Latex 从同一源编译文档的两个版本
如何自动编译同一文档的两个版本,例如学生没有答案的版本和我自己有答案的版本 有几个包允许有条件地排除文档的某些部分,例如练习包 使用TeXstudio,可以使用以下神奇注释一次自动编译两个版本,包括重复编译交叉引用、参考书目、索引等:Latex 从同一源编译文档的两个版本,latex,Latex,如何自动编译同一文档的两个版本,例如学生没有答案的版本和我自己有答案的版本 有几个包允许有条件地排除文档的某些部分,例如练习包 使用TeXstudio,可以使用以下神奇注释一次自动编译两个版本,包括重复编译交叉引用、参考书目、索引等: % !TeX program = latexmk -pdf -pdflatex="pdflatex -synctex=1 -interaction=nonstopmode -shell-escape" -jobname=% -pretex="\newcommand
% !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}
我有一个小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,以保留两个版本的有用信息
在latex级别,我基本上也这样做,并使用宏\withanswers来配置我的软件包。谢谢您的回答。如果你有一个文件foo.pdf,它是从有答案的foo.tex生成的,还是从没有答案的foo.tex生成的?有答案的文件会自动称为foo_solution.pdf,我看不出将错误的文件分发给学生有任何风险。我错过了。你们程序的第一行太长了!这应该也解决了.aux的问题。据我所知,texstudio不支持magic评论中的换行符,对此我们无能为力