首页 > 解决方案 > 如何使用 perl 或 sed 等命令行工具替换 LaTex $ 分隔符?

问题描述

我有一堆用 LaTex 编写的方程式的 Jupyter Notebooks。我知道我可以将笔记本转换为 HTML,如下所示。

jupyter nbconvert --to html --template basic test.ipynb test.html

但是,保留了 LaTex 标记。例如,如果我有$y = w'x$,那么它仍然会显示在输出 HTML 中。我想把这个生成的 HTML 放到 WordPress 中(基本上是复制/粘贴),但是WordPress像这样分隔 LaTex $latex y = w'x$

我如何使用perlor sed(或其他任何东西)转换$y = w'x$latex y = w'x$

我知道我可以编写一个程序来完成它,但我认为这有点过头了,因为我确信这些可用的命令行工具可以做到这一点。此外,在 Windows 和 Mac/Linux 上都可用的任何工具都会是一个奖励,因为我在这两种环境类型上工作,并且不想求助于类似 *nix 的环境来进行这种转换(虽然,Windows 确实现在有 Windows Linux 子系统,所以我想如果它只是一个 Linux 工具可能没问题)。

我试图从这篇文章sed(在 Mac 上)修改这个表达式,但它不起作用。

sed -e ' /\$\$/{s/\$\$/{\$latex }/;:a;N;/\$\$/!ba;s/\$\$/{\$}/};s/^\(\$\)\(.*\)\(\$\)$/{\$latex }\2{\$}/' test.html

意外的 EOF(待处理的 })

标签: regexperlsedjupyter-notebook

解决方案


您可以使用以下sed命令:

sed -e 's/\$\([^$]*\)\$/$\\latex \1$/g'

输入:

$ echo -e "abc \$y = w'x$ toto\n123 \$u = v'w$ xyz"
abc $y = w'x$ toto
123 $u = v'w$ xyz

输出:

echo -e "abc \$y = w'x$ toto\n123 \$u = v'w$ xyz" | sed -e 's/\$\([^$]*\)\$/$\\latex \1$/g'
abc $\latex y = w'x$ toto
123 $\latex u = v'w$ xyz

说明:

sed在查找和替换模式下使用,它将$通过此​​正则表达式替换两个字符之间的所有内容:\$\([^$]*\)\$通过这里已经存在的内容(反向引用)并\latex在开头添加。

最后但并非最不重要的一点是,以下sed -e 's/\$\([^$]*\)\$/$latex \1$/g'sed 命令在$latex没有\


推荐阅读