我正在编写 LaTeX 文本,但我需要同一篇文本的两个版本,一个是普通版本,另一个是文本内带有更多注释的版本。如何使用同一个 TEX 文件编写两个版本?
为了更清楚起见,我想获得例如这两个版本:
...第一个简单版本...
...第一个简单版本加上一些评论,现在是第二版...
我希望它们两个的代码都是这样的:
...first simple version \secondversion{with some more comments is now second version}....
因此,如果我在 TEX 文件开头更改标志,我就可以获得第一个或第二个版本。
答案1
这是一个使用标志的解决方案。您可以在序言中设置标志,并根据需要在文档中动态更改它。
只需稍加努力,您就可以在编译命令行上设置标志,而无需编辑文件。
\documentclass{article}
\usepackage{etoolbox}
\newtoggle{vtwo}
% set status globally in the preamble
\togglefalse{vtwo}
\newcommand{\secondversion}[1]{%
\iftoggle{vtwo}{%
#1
}
% else
{}
}
\begin{document}
...first simple version \secondversion{with some more comments is now
second version}....
% change status locally if you wish
\toggletrue{vtwo}
...first simple version \secondversion{with some more comments is now
second version}....
\end{document}
答案2
有各种各样的软件包可以做到这一点。我使用版本。在其文档中,可以找到与其他软件包的比较。下面是最低使用示例。
\documentclass{article}
\usepackage{versions}
\includeversion{abridged}
\excludeversion{unabridged}
\excludeversion{redact}
\begin{document}
Text for the \begin{abridged}short\end{abridged}\begin{unabridged}long and really longwinded, opaque and boring\end{unabridged} version of the paper. Punctuation works correctly\begin{unabridged}because sphack is used\end{unabridged}.
\begin{comment} This is deleted by default. \end{comment}
\begin{redact}This information was withdrawn\end{redact}
\end{document}
必须注意不要留下空格或添加换行符,例如,在之前以\begin{abridged}
获得单词之间的适当间距。
答案3
这是我依靠检查的解决方案\jobname
。
源文件:
% source.tex
\documentclass{article}
\usepackage{etoolbox} % for `\ifstrequal`
%% NOTE: i do not know how this works (how `\expandafter` works),
%% but it works
\newcommand{\secondVsFirstVersion}[2]{%
\expandafter\ifstrequal\expandafter{\jobname}{second-version}{#1}{#2}}
\newcommand{\mainversion}[1]{\secondVsFirstVersion{}{#1}}
\newcommand{\secondversion}[1]{\secondVsFirstVersion{#1}{}}
\begin{document}
...first simple version \secondversion{with some more comments is now second version}....
Moreover, \mainversion{this will appear only in the main version,}
\secondVsFirstVersion{this will appear only in the second version}{
and this only in the first again}.
\end{document}
要获取输出的主要版本,请运行
pdflatex -jobname='main-version' source.tex
(或者只是pdflatex source.tex
)。要获取第二个,请运行
pdflatex -jobname='second-version' source.tex
main-version.tex
或者,创建指向该文件的两个名为和的硬链接,second-version.tex
然后照常编译它们,无需-jobname
参数。
我认为更好的方法是使用带有以下选项的 makefile latexmk
:
# Makefile
.DELETE_ON_ERROR:
.PHONY: all
all: v1 v2
.PHONY: v1
v1: main-version.pdf
.PHONY: v2
v2: second-version.pdf
main-version.pdf: source.tex
latexmk -pdf -jobname='main-version' '$<'
second-version.pdf: source.tex
latexmk -pdf -jobname='second-version' '$<'
.PHONY: mostlyclean
mostlyclean:
rm -f *.log
.PHONY: clean
clean: mostlyclean
rm -f *.aux *.out *.toc *.fdb_latexmk *.fls
.PHONY: distclean
distclean: clean
rm -f main-version.pdf second-version.pdf
make
然后,只需在源目录中运行即可同时获得两个版本。