将 \showtrue 和 \showfalse 编译为不同的目标文件

将 \showtrue 和 \showfalse 编译为不同的目标文件

我正在编写一个带有解决方案的问题集。目前我有以下设置:

\newtheorem*{sol}{Solution}

\newif\ifshow
\showfalse

\ifshow
    \newenvironment{bluesol}
    {\begin{sol} \color{NavyBlue}}
    {\end{sol}}
\else
    \excludecomment{bluesol}
\fi

所以我的解决方案就在bluesol环境中。

目前,如果我想编译问题集问题,我会执行\showfalse,而当我想编译解决方案时,我会执行\showtrue。这有效……但输出文件相同,因此在编译解决方案之前,我必须手动将文件名更改为类似的名字pset1questions.pdf

我想知道是否有办法自动执行此操作;即运行一次\showfalse,并将目标文件重命名为pset1questions.pdf,然后再次运行\showtrue,并将目标文件重命名为pset1sol.pdf

我也愿意采用全新的方式来实现这一点(但我仍然希望我的解决方案能够在环境内)。

多谢!

答案1

这是一个解决方案。假设你的文件是question.tex

\documentclass{article}
\usepackage{comment}
\usepackage{xcolor}

\newtheorem{sol}{Solution}

%\newif\ifshow    % uncomment this line for normal use

% uncomment next line for solutions
%\showtrue

\ifshow
    \newenvironment{bluesol}
    {\begin{sol} \color{blue}}
    {\end{sol}}
\else
    \excludecomment{bluesol}
\fi

\begin{document}
This is a question
\begin{bluesol}
Here is the solution
\end{bluesol}
\end{document}

注意:您需要的\showtrue\showfalse默认值。

\newif\ifshow在这个方法中我们不需要\showtrue

我们在线编译命令:

pdflatex \newif\ifshow\showtrue \input{question.tex} && copy question.pdf solution.pdf

进而

pdflatex \newif\ifshow \input{question.tex}

相关内容