latexdiff 和 lstlisting

latexdiff 和 lstlisting

我想知道在查找差异时,是否可以让 latexdiff 忽略我的文档中的所有列表。我的大多数列表都包含特殊字符。这在列表内运行得很好,但当 latexdiff 尝试比较时,这些列表最终会超出列表范围,因此需要手动转义。有没有办法解决这个问题?

答案1

您可以使用https://tex.stackexchange.com/a/73649/15925告诉latexdiff忽略lstlisting环境。放置

 PICTUREENV=(?:picture|DIFnomarkup|lstlisting)[\w\d*@]*

正在ld.cfg运行在latexdiff -c ld.cfg j1.tex j2.tex >diff.tex哪里j1.tex

\documentclass{article}

\usepackage{listings}

\begin{document}

Text.

\begin{lstlisting}
  for $a do
\end{lstlisting}

Text.

\end{document}

并且j2.tex

\documentclass{article}

\usepackage{listings}

\begin{document}

Text changed.

\begin{lstlisting}
  for $a do y
\end{lstlisting}

Text.

\end{document}

产品diff.tex含有:

\documentclass{article}
%DIF LATEXDIFF DIFFERENCE FILE
%DIF DEL j1.tex   Wed Oct 16 16:53:10 2013
%DIF ADD j2.tex   Wed Oct 16 16:53:33 2013

\usepackage{listings}
%DIF PREAMBLE EXTENSION ADDED BY LATEXDIFF
%DIF UNDERLINE PREAMBLE %DIF PREAMBLE
\RequirePackage[normalem]{ulem} %DIF PREAMBLE
\RequirePackage{color}\definecolor{RED}{rgb}{1,0,0}\definecolor{BLUE}{rgb}{0,0,1} %DIF PREAMBLE
\providecommand{\DIFadd}[1]{{\protect\color{blue}\uwave{#1}}} %DIF PREAMBLE
\providecommand{\DIFdel}[1]{{\protect\color{red}\sout{#1}}}                      %DIF PREAMBLE
%DIF SAFE PREAMBLE %DIF PREAMBLE
\providecommand{\DIFaddbegin}{} %DIF PREAMBLE
\providecommand{\DIFaddend}{} %DIF PREAMBLE
\providecommand{\DIFdelbegin}{} %DIF PREAMBLE
\providecommand{\DIFdelend}{} %DIF PREAMBLE
%DIF FLOATSAFE PREAMBLE %DIF PREAMBLE
\providecommand{\DIFaddFL}[1]{\DIFadd{#1}} %DIF PREAMBLE
\providecommand{\DIFdelFL}[1]{\DIFdel{#1}} %DIF PREAMBLE
\providecommand{\DIFaddbeginFL}{} %DIF PREAMBLE
\providecommand{\DIFaddendFL}{} %DIF PREAMBLE
\providecommand{\DIFdelbeginFL}{} %DIF PREAMBLE
\providecommand{\DIFdelendFL}{} %DIF PREAMBLE
%DIF END PREAMBLE EXTENSION ADDED BY LATEXDIFF

\begin{document}

Text \DIFaddbegin \DIFadd{changed}\DIFaddend .

\DIFdelbegin %DIFDELCMD < \begin{lstlisting}
%DIFDELCMD <   for $a do
%DIFDELCMD < \end{lstlisting}
%DIFDELCMD < %%%
\DIFdelend \DIFaddbegin \begin{lstlisting}
  for $a do y
\end{lstlisting}
\DIFaddend 

Text.

\end{document}

并编译得到:

示例输出

如您所见,文本中的更改被突出显示,而代码只是来自第二个文件。

编辑正如 asmeurer 指出的那样,您可以通过编写命令行来避免使用配置文件

latexdiff --config='PICTUREENV=(?:picture|DIFnomarkup|lstlisting)[\w\d*@]*'

这可能与脚本或 makefile 特别相关。

相关内容