Latex 从同一源编译文档的两个版本

Latex 从同一源编译文档的两个版本,latex,Latex,如何自动编译同一文档的两个版本,例如学生没有答案的版本和我自己有答案的版本 有几个包允许有条件地排除文档的某些部分,例如练习包 使用TeXstudio,可以使用以下神奇注释一次自动编译两个版本,包括重复编译交叉引用、参考书目、索引等: % !TeX program = latexmk -pdf -pdflatex="pdflatex -synctex=1 -interaction=nonstopmode -shell-escape" -jobname=% -pretex="\newcommand

如何自动编译同一文档的两个版本,例如学生没有答案的版本和我自己有答案的版本

有几个包允许有条件地排除文档的某些部分,例如练习包

使用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}

我有一个小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评论中的换行符,对此我们无能为力