我有大量由几个独立人员编写的旧版和新版 LaTeX 文档。我必须更新它们,使它们符合最新、现代、一致、标准化的 LaTeX 代码。这些文档中有很多常见的“错误”或怪癖。例如:
\begin{equation}
a = b
\nonumber
\end{equation}
而不仅仅是
\[
a = b
\]
以及类似的情况(eqnarray
而不是align
等等)。或者文本中完全随机的代码换行符(不输出可以合并的改变分隔符(如段落)。
推荐使用哪些工具来自动执行此类任务?主要是将代码片段更改为其他代码片段,而不更改代码片段的原始内容。可以说,查找和替换可以处理 LaTeX 语法/语义。
有这样的工具吗?我在 Windows 上工作。
答案1
第一步可能是加载nag
每个文档开头的 package,用于检查常见错误、过时的包和过时的命令:
\RequirePackage[l2tabu, orthodox]{nag}
例如,可以使用正则表达式和 perl、php 或 sed 等工具进行上下文感知检查和替换。但您需要知道要查找什么。
另外还有帮助:grep、egrep、find,例如:
find "." -name "*.tex" | xargs grep eqnarray
您可以扩展此功能以搜索整个目录树以查找不需要的模式的列表。
我会在 Linux 上执行此操作,因为通常已预装了上述所有工具。在 Windows 上,您可以安装 Cygwin(用于 shell 和工具)和 ActiveState Perl。
答案2
我认为你可以用布莱克泰克按照适用于 Python 的黑色格式化程序经过尼科·施洛默. 来自文档
blacktex 是一款小工具,可帮助编辑 LaTeX 文章。它可删除给定文件中的所有注释,并更正一些常见的反模式。例如,
blacktex in.tex out.tex
输入文件
Because of $$a+b=c$$ ({\it Pythogoras}),
% @johnny remember to insert name
and $y=2^ng$ with $n=1,...,10$, we have ${\Gamma \over 2}=8.$
转换为
Because of
\[
a+b = c
\]
(\textit{Pythogoras}),
and \(y = 2^n g\) with \(n = 1,\dots,10\), we have \(\frac{\Gamma}{2} = 8\).
您可以使用
blacktex -i in.tex
答案3
我很想使用常用表达,您可以使用各种工具(如perl
)进行访问python
。
latexindent.pl有专门更换开关可以帮你解决这个问题。如果你从以下文件开始,说myfile.tex
我的文件.tex
this one has no number
\begin{equation}
a = b
\nonumber
\end{equation}
this one keeps it number
\begin{equation}
a = b
\end{equation}
并采用以下设置,例如,equation.yaml
replacements:
-
substitution: |-
s/(\\begin\{equation\})(.*?)(\\end\{equation\})/
my $begin = $1;
my $body = $2;
my $end = $3;
if($body=~m|\\nonumber|s){
$body =~ s|\\nonumber(\h*\R)?||sg;
$begin = "\\[";
$end = "\\]";
}
$begin.$body.$end;/sxge
我们称其latexindent.pl
为
latexindent.pl -rr myfile.tex -l equation.yaml
产生以下输出
this one has no number
\[
a = b
\]
this one keeps it number
\begin{equation}
a = b
\end{equation}
您可以在latexindent.pl 文档以及本网站上的各种答案: