我有一个旧的LaTeX文档(带有许多格式化命令),我想将它转换成更现代的LaTeX (我想进行更新有几个原因,其中最重要的一个原因是减少内容和格式化之间的耦合)。无论如何,文档中有很多对废弃的\pmatrix{ .... }命令的调用,我想用新的amsmath命令\begin{pmatrix} ... \end{pmatrix}替换它。我一直在尝试使用sed来完成这种转换,但我以前从未使用过它,现在遇到了麻烦。
这是一个MWE LaTeX输入字符串
\pmatrix{0&0\cr \frac{1}{2}&0\cr 0&0\cr}\pmatrix{1&1\cr 1&1\cr 1&1\cr}使用预期的输出
\begin{pmatrix}0&0\\ \frac{1}{2}&0\\ 0&0\end{pmatrix}\begin{pmatrix}1&1\\ 1&1\\ 1&1\end{pmatrix}我一直尝试使用的命令是以下命令的变体
sed 's/\\pmatrix{\(.*\cr[ ]*\)}/\\begin{pmatrix}\1 \\end{pmatrix}/g' <$WORKING_FILE >$OUTPUT_FILE但我所能达到的最接近的输出是
\begin{pmatrix}0 & 0 \\ 0 & 0 \\ 0 & 0 \end{pmatrix}我非常确定这个问题与同时调用两个pmatrix有关,但我不确定如何修改正则表达式以使其工作。
我搜索过google,但作为regex的新手,我只是被所有的变体搞糊涂了,以及如何正确地格式化这样的东西。
发布于 2014-04-09 02:18:44
以下内容可能适用于您:
sed -re 's/(\\pmatrix)\{([^}]*)}/\\begin{pmatrix}\2\\end{pmatrix}/g' -e 's/\\cr/\\\\/g' -e 's/\\\\\\end/\\end/g' inputfile它的工作原理是:
使用`\begin{matrix}...\end{matrix}
\end
\cr替换
\end编辑:根据您的更新,在通过管道连接到sed之前,使用grep拆分相关部分可能更好
grep -oP '\\pmatrix.*?\\cr}' inputfile | sed -re 's/\\pmatrix\{(.*)}/\\begin{pmatrix}\1\\end{pmatrix}/g;s/\\cr/\\\\/g;s/\\\\\\end/\\end/g'发布于 2014-04-09 15:55:06
这可能适用于您(GNU sed):
sed -r 's/\\cr/\n/g;s/\\(pmatrix)\{([^\n]*)\n([^\n]*)\n([^\n]*)\n\}/\\begin{\1}\2\\\\ \3\\\\ \4\\end{\1}/g;s/\n/\\cr/g' file将\\cr转换为换行符。执行全局替换命令。然后将左边的那些换行符转换回\\cr。
https://stackoverflow.com/questions/22944768
复制相似问题