Latexdiff 和 achemso 没有显示标题的变化

Latexdiff 和 achemso 没有显示标题的变化

我正在尝试使用该命令latexdiff来标记两个相似的 latex 文档之间的更改。我已经使用过该achemso软件包,并希望继续这样做。它显示了正文和图形标题中的更改,但没有显示作者姓名、标题或摘要。我在下面提供了一个 mwe;old.tex 是原始文档,new.tex 有五个更改:

  • 更改标题(未显示在 diff.pdf 上)
  • 更改为作者姓名首字母(diff.pdf 上未显示)
  • 更改为摘要文本(未显示在 diff.pdf 上)
  • 更改为正文(显示标记)
  • 更改为参考(显示标记)

为了得到这个结果,我在包含 old.tex 和 new.tex 的同一目录中运行以下 bash 脚本(见下文)。我使用的 latexdiff 的基本命令是:

latexdiff --append-context2cmd="\twocolumn,\abstract,\@twocolumnfalse,\title" old.tex new.tex > diff.tex

在阅读了一些其他在线资源后,我尝试了该--append...选项,但仍然无法在生成的 diff.pdf 文件中显示更改。

在此先感谢您的帮助。

old.tex 的内容:

\documentclass[journal=jacsat,manuscript=communication]{achemso}
\setkeys{acs}{articletitle = true}
% manuscript title
\title{My title}
\SectionsOn
\SectionNumbersOff

% author list
\author{A. N. Other}
\affiliation[Latex]{Latex University}
\altaffiliation{Contributed equally to this work}

\author{B. N. Other}
\affiliation[Latex]{Latex University}
\altaffiliation{Contributed equally to this work}
\email{[email protected]}

\usepackage[hidelinks]{hyperref} % Provide convenient links throughout


\usepackage{achemso}         % ACS formatting

\renewcommand*\titlesize{\Large}
\let\oldmaketitle\maketitle
\let\maketitle\relax


\begin{document}
    
    \begin{filecontents}{oldrefs.bib}
        @article{ref1,
            title = {Paper Title},
            volume = {70},
            journal = {Nature},
            author = {Smith, J. H.},
            year = {1942},
            pages = {1--31},
        }
    \end{filecontents}

\twocolumn[
\begin{@twocolumnfalse}
    \oldmaketitle
    \begin{abstract}
        My abstract. 
    \end{abstract}
\end{@twocolumnfalse}
]

\section*{Introduction}

Main text.\cite{ref1}

\bibliography{oldrefs}

\end{document}

new.tex 的内容:

\documentclass[journal=jacsat,manuscript=communication]{achemso}
\setkeys{acs}{articletitle = true}
% manuscript title
\title{My title has changed}
\SectionsOn
\SectionNumbersOff

% author list
\author{A. N. Other}
\affiliation[Latex]{Latex University}
\altaffiliation{Contributed equally to this work}

\author{C. N. Other}
\affiliation[Latex]{Latex University}
\altaffiliation{Contributed equally to this work}
\email{[email protected]}

\usepackage[hidelinks]{hyperref} % Provide convenient links throughout


\usepackage{achemso}         % ACS formatting

\renewcommand*\titlesize{\Large}
\let\oldmaketitle\maketitle
\let\maketitle\relax


\begin{document}
    
    \begin{filecontents}{newrefs.bib}
        @article{ref1,
            title = {Paper Title},
            volume = {70},
            journal = {Nature},
            author = {Smithsonian, J. H.},
            year = {1942},
            pages = {1--31},
        }
    \end{filecontents}

\twocolumn[
\begin{@twocolumnfalse}
    \oldmaketitle
    \begin{abstract}
        My abstract has some new information. 
    \end{abstract}
\end{@twocolumnfalse}
]

\section*{Introduction}

Main TEXT.\cite{ref1}

\bibliography{newrefs}

\end{document}

产生结果的脚本(diff.tex 和 diff.pdf):

#!/bin/bash

latex -src -interaction=nonstopmode old.tex
bibtex old.aux
latex -src -interaction=nonstopmode old.tex
pdflatex -synctex=1 -interaction=nonstopmode old.tex
latex -src -interaction=nonstopmode new.tex
bibtex new.aux
latex -src -interaction=nonstopmode new.tex
pdflatex -synctex=1 -interaction=nonstopmode new.tex
latexdiff --append-context2cmd="\twocolumn,\abstract,\@twocolumnfalse,\title" old.bbl new.bbl > diff.bbl
latexdiff --append-context2cmd="\twocolumn,\abstract,\@twocolumnfalse,\title" old.tex new.tex > diff.tex
latex -src -interaction=nonstopmode diff.tex
pdflatex -synctex=1 -interaction=nonstopmode diff.tex

答案1

TL;DR:根据您的 MWE,latexdiff检测并标记标题中的更改涉及对latexdiff您使用的命令的简单更改;但是,检测并标记作者和摘要中的更改(特别是在您的 MWE 的情况下,但并非总是如此)超出了当前的设计范围latexdiff。详情如下:

latexdiff您列出了三个未标记更改的部分:

  1. 更改标题

您可以通过将标题设为 a 来解决这个问题replace-context2cmd,如下所示:

latexdiff --replace-context2cmd="title" old.tex new.tex > diff.tex

请参阅#2 以了解为什么append-context2cmd你的 MWE shell 脚本不起作用。

  1. 更改为作者首字母

摘自latexdiff-man2022 年 9 月 25 日的第 7 页,其中的replace-context2cmdappend-context2cmd论点:

context2 命令也是序言中唯一一个参数将以逐字模式处理的命令(仅当它们在序言中出现不超过一次时才有效)。该算法目前无法处理序言中重复的 context2 命令,因为它们出现在某些期刊样式(但不在标准样式)中的 \author 参数中。如果检测到这样的重复,整个序言将以逐行模式处理。在这种情况下,使用 --replace-context2cmd 选项仅选择应处理且不会在序言中重复使用的命令。

换句话说,latexdiff无法检测到作者的变化,但当只有一个命令实例时能够检测并标记变化\author

  1. 更改为摘要文本

我通常将序言中的抽象视为\abstract{}而不是 之后的环境\begin{document}。如果这是你的情况,你可以使用与上述 #1 相同的技术,replace-context2cmd。但由于你的抽象环境包含在命令的参数中,因此适用以下内容(latexdiff-man,日期为 2022 年 9 月 25 日,第 3 页):

命令及其所有参数通常作为一个单元进行比较,即,不会在命令的参数中插入任何标记。但是,对于选定数量的命令(例如,\caption 和所有分段命令),最后一个参数已知为文本。此文本被拆分为单词并像普通文本一样进行区分(使用选项显示和更改文本命令列表,见下​​文)。

因为命令的最后一个参数\twocolumn不仅仅是文本,所以您不能将其附加为安全命令或文本命令。 latexdiff必须将此命令视为单个块。

相关内容