我正在编写一个带有解决方案的问题集。目前我有以下设置:
\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}