从相同的乳胶源编译文档的两个版本

时间:2019-07-19 10:55:20

标签: latex

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

2 个答案:

答案 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来配置我的软件包。