我有以下宏,
\def\RCS$ $#1: #2 $ ${\expandafter\def\csname RCS#1\endcsname{#2}}
用于修订版本控制,即
\RCS$ $Revision: 1.2 $ $
\RCS$ $Date: 2010/04/02 18:20:00 $ $
\lhead{Revision \RCSRevision, \RCSDate}
\pagestyle{fancy}
效果很好。但是,如果我随后使用 latexdiff 处理另一个修订版本,diff 文件无法正确展开宏,
\RCS$ $Revision: \DIFdelbegin \DIFdel{1.2 }\DIFdelend \DIFaddbegin \DIFadd{1.8 }\DIFaddend $ $
有没有办法让它将第二个参数扩展为单个文本块?
(这与我的问题有关latexdiff-cvs 可以处理 RCS 标签吗?)
答案1
总编辑:实际上,您需要\edef
,它在定义宏之前完全扩展其内容。但是,有一个问题:latexdiff
定义\DIFadd
和\DIFend
打印涉及颜色的内容,这对于像您想要的那样解析为文本来说并不是很好的材料。最重要的是,它对\protect
它们足够谨慎,并且 的整个目的\protect
是干扰正常扩展。因此尝试\edef
直接使用会给您一个错误(显然,“TeX 容量超出”)。
然后,我所做的就是临时重新定义这两个宏,让它们按照“逻辑”执行:包含或忽略其内容。由于这不应该是永久性更改,因此我会以组的形式执行,这就要求我使用\xdef
,即 的全局版本\edef
。
这个小程序的工作方式是,它像您\RCS
一样抓取美元符号之间的材料,然后将其输入到\edef
以生成扩展文本\expandedRCS
。然后它将内容放在\expandedRCS
另一个宏之后\innerRCS
,该宏执行您习惯的操作\RCS
。 \expandedRCS
如上所述,它是在一个组中创建的,但是一旦它被定义,我就不再需要\DIFadd
和的新定义\DIFend
,所以我可以(并且应该)扩展\innerRCS
外部群组。
这是一份完整的文档。latexdiff
为了逼真,我附上了序言。
\documentclass{article}
\def\RCS$ $#1$ ${%
{%
\renewcommand{\DIFadd}[1]{##1}%
\renewcommand{\DIFdel}[1]{}%
\xdef\expandedRCS{#1}%
}%
\expandafter\innerRCS\expandedRCS
}
\def\innerRCS#1: #2 {\expandafter\def\csname RCS#1\endcsname{#2}}
%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}
\RCS$ $Revision: \DIFdelbegin \DIFdel{1.2 }\DIFdelend \DIFaddbegin \DIFadd{1.8 }\DIFaddend $ $
Revision \RCSRevision.
\end{document}