首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sed将LaTeX pmatrix命令转换为amsmath环境

使用sed将LaTeX pmatrix命令转换为amsmath环境
EN

Stack Overflow用户
提问于 2014-04-09 02:00:10
回答 2查看 122关注 0票数 0

我有一个旧的LaTeX文档(带有许多格式化命令),我想将它转换成更现代的LaTeX (我想进行更新有几个原因,其中最重要的一个原因是减少内容和格式化之间的耦合)。无论如何,文档中有很多对废弃的\pmatrix{ .... }命令的调用,我想用新的amsmath命令\begin{pmatrix} ... \end{pmatrix}替换它。我一直在尝试使用sed来完成这种转换,但我以前从未使用过它,现在遇到了麻烦。

这是一个MWE LaTeX输入字符串

代码语言:javascript
复制
\pmatrix{0&0\cr \frac{1}{2}&0\cr 0&0\cr}\pmatrix{1&1\cr 1&1\cr 1&1\cr}

使用预期的输出

代码语言:javascript
复制
\begin{pmatrix}0&0\\ \frac{1}{2}&0\\ 0&0\end{pmatrix}\begin{pmatrix}1&1\\ 1&1\\ 1&1\end{pmatrix}

我一直尝试使用的命令是以下命令的变体

代码语言:javascript
复制
sed 's/\\pmatrix{\(.*\cr[ ]*\)}/\\begin{pmatrix}\1 \\end{pmatrix}/g' <$WORKING_FILE >$OUTPUT_FILE

但我所能达到的最接近的输出是

代码语言:javascript
复制
\begin{pmatrix}0 & 0 \\ 0 & 0 \\ 0 & 0 \end{pmatrix}

我非常确定这个问题与同时调用两个pmatrix有关,但我不确定如何修改正则表达式以使其工作。

我搜索过google,但作为regex的新手,我只是被所有的变体搞糊涂了,以及如何正确地格式化这样的东西。

EN

回答 2

Stack Overflow用户

发布于 2014-04-09 02:18:44

以下内容可能适用于您:

代码语言:javascript
复制
sed -re 's/(\\pmatrix)\{([^}]*)}/\\begin{pmatrix}\2\\end{pmatrix}/g' -e 's/\\cr/\\\\/g' -e 's/\\\\\\end/\\end/g' inputfile

它的工作原理是:

使用`\begin{matrix}...\end{matrix}

  • substituting

  • \end

\cr替换

  • ,使其成为\end

编辑:根据您的更新,在通过管道连接到sed之前,使用grep拆分相关部分可能更好

代码语言:javascript
复制
grep -oP '\\pmatrix.*?\\cr}' inputfile | sed -re 's/\\pmatrix\{(.*)}/\\begin{pmatrix}\1\\end{pmatrix}/g;s/\\cr/\\\\/g;s/\\\\\\end/\\end/g'
票数 0
EN

Stack Overflow用户

发布于 2014-04-09 15:55:06

这可能适用于您(GNU sed):

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22944768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档