【已解决】Obsidian不渲染“\[, \], \(, \)",但可以渲染”$“和”$$“,如何解决?本论坛的帖子也存在这个问题。

遇到的问题

win10+Obsidian V1.6.7

markdown源代码包含非独立公式和独立公式,代码如下:

上述代码显示的效果,与本论坛的显示效果是一样的,如下:

为了推导公式 (2.2),我们从给定的平稳过程 (\Delta y_t) 的 (\mathrm{MA}(\infty)) 表达式开始:

[
\Delta y_t = \psi(L) \varepsilon_t
]

很显然,段内公式和独立公式都没有正常显示

已尝试的解决方案

把“\[, \]”换成“$$”,把“\(, \)”换成“$”就能正常显示。

请问这是什么原因?最简单的解决方法是什么?需要安装第三方插件么?安哪个?

原因是 markdown 格式使用 $...$$$...$$ 表示数学公式, 而不用 \[ ... \]

但既然两边都是纯文本, 那转换起来也是很容易的

const input = `
context1
\\[
\\Delta y_t = \\psi(L) \\varepsilon_t
\\]
context2
\\[
\\Delta y_t = \\psi(L) \\varepsilon_t
\\]
context3
`;
const regex = /\\\[(.+?)\\\]/gs;
const output = input.replaceAll(regex, "$$$$$1$$$$");
console.log(output);
// context1
// $$
// \Delta y_t = \psi(L) \varepsilon_t
// $$
// context2
// $$
// \Delta y_t = \psi(L) \varepsilon_t
// $$
// context3

推荐先找个在线 regex 编辑器 (如 ref ) 或者 VSCode, 把转换规则测稳妥了, 再去仓库里转换

另外也见 一键将带 (math),[math] (chatgpt格式的数学公式)的文本转换为 obsidian 能识别的用 $math$,$$math$$ 表示的文本 - 经验分享 这个讨论的方案

ob是底层是使用markdown语言。
不是ob的问题,是markdown语言的问题。
因此除了替换没有办法解决。

我记得你在QQ群里也问过来着吧,不是自己写了个脚本解决了么~

插件 KaTEX to MathJax,已经测试过可以用

1 个赞

:+1:nice

我有一个很好的解决方案可供大家参考,用到 QuickAdd 插件。 :wink:

  1. 在你的 Obsidian 库根目录下(即与 .obsidian 同级),新建一个文件夹,例如:scripts/。在这个 scripts/ 文件夹中,新建一个 .js 文件,命名为:latex-to-dollar.js。
  2. 将如下脚本代码粘贴到 .js 文件中:
module.exports = async function(params) {
  const { app, quickAddApi, obsidian } = params;
  const activeView = app.workspace.getActiveViewOfType(obsidian.MarkdownView);
  if (!activeView || !activeView.editor) {
    new obsidian.Notice("请在 Markdown 编辑器中运行此命令");
    return;
  }

  const editor = activeView.editor;
  let text = editor.getSelection();
  const hasSelection = !!text;
  if (!text) text = editor.getValue();

  text = text.replace(/\\\(\s*([\s\S]*?)\s*\\\)/g, (_, inner) => {
    return `$${inner}$`;
  });

  text = text.replace(/^\s*\\\[\s*([\s\S]*?)\s*\\\]\s*$/mg, (_, inner) => {
    return `$$\n${inner}\n$$`;
  });
  text = text.replace(/\\\[\s*([\s\S]*?)\s*\\\]/g, (_, inner) => {
    return `$$${inner}$$`;
  });

  if (hasSelection) {
    editor.replaceSelection(text);
  } else {
    editor.setValue(text);
  }
  new obsidian.Notice("LaTeX 转换为 Dollar 格式成功!");
};
  1. 保存文件后打开 Obsidian 设置找到 QuickAdd,点击最上面的下拉框找到 Macros 标签页,名字设置好,点击你设置好后的小齿轮设置页面,在 User Scripts 区域,点击 Browse,导航到你刚刚创建的 scripts/latex-to-dollar.js 文件,选择它并点击 Add。
  2. 配置完成后,直接对你要改的文本 ‘ctrl+all’ ,然后 ‘ctrl+p’ 找到 QuickAdd,你就能找到他并运行它。

这样的配置其实对于AI来说编写比较困难,我让 Grok 、Qwen 还有豆包都写了好几次都没写对,最后是看了官方的文档才解决问题。

我也写了一个脚本,直接在黑曜石里面快捷键能替换得方便一些,