来自同一 tex 文件的两个版本

来自同一 tex 文件的两个版本

我正在编写 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然后,只需在源目录中运行即可同时获得两个版本。

相关内容