如何自动编译同一文档的两个版本,例如对学生没有答案的版本和对我自己有答案的另一个版本?
答案 0 :(得分:1)
有几个软件包可以有条件地排除文档的某些部分,例如exercise
软件包。
使用TeXstudio,以下魔术注释可用于自动一次编译两个版本(包括针对交叉引用,书目,索引等的重复编译):
% !TeX program = latexmk -pdf -pdflatex="pdflatex -synctex=1 -interaction=nonstopmode -shell-escape" -jobname=% -pretex="\newcommand{\version}{noanswer}" -usepretex % | latexmk -pdf -pdflatex="pdflatex -synctex=1 -interaction=nonstopmode -shell-escape" -jobname=%_solution -pretex="\newcommand{\version}{}" -usepretex % | txs:///view-pdf "?am)_solution.pdf"
\documentclass{article}
% setting a default value in case it is compiled without the magic comment
\ifdefined\version
\else
\def\version{noanswer}
\fi
\usepackage[\version]{exercise}
\begin{document}
\begin{Exercise}[title={Title},label=ex1]
question text
\end{Exercise}
\begin{Answer}[ref={ex1}]
solution
\end{Answer}
\end{document}
答案 1 :(得分:1)
我有一个小的bash脚本来执行双重格式。
function latex-ans () {
n=$(basename $1 .tex) # strip .tex in filename foo.tex -> foo
ln -s $n.tex $n-ans.tex # create a soft link (for instance foo-ans.tex -> foo.tex)
pdflatex '\def\withanswer{1} \input{'$n-ans'}' && pdflatex $n
% first format the version with answers and then the normal version
rm $n-ans.tex $n-ans.log
% remove useless files
}
如果我有文件foo.tex,此命令将格式化文件的两个版本并生成两个pdf:foo.pdf和foo-ans.pdf。由于通过ln -s
重命名了foo.tex,它还保留了单独的foo.aux和foo-ans.aux来保留这两个版本上的有用信息。
在乳胶级别上,我基本上执行相同的操作,并使用宏\ withanswers来配置我的软件包。