我的目标如下:我想将练习及其解决方案写在一个 tex 文件中,并可以选择隐藏解决方案,这样我就不需要为问题文件和示例解决方案创建两个单独的 tex 文件。在 tex 文件中,我希望有类似
\documentclass{article}
\def\generateSolution{1} % 0 or 1
\usepackage{my_stylefile}
\begin{document}
... question ...
\solution{
...
}
\end{document}
这里,\solution 在 my_stylefile 中定义,并且解决方案的显示或隐藏取决于 \generateSolution 中的值(由样式文件访问)。
对我来说重要的是 synctex.gz 文件的功能,它使一些 LaTeX 编辑器能够通过单击 tex 文件中的行跳转到 pdf 中的正确行,反之亦然。我找到了隐藏文本的方法,但没有一种方法可以保留此功能并可以移动到样式文件中。
问题是 synctex.gz 文件仅识别块 \solution{...} 的开头和结尾。我不知道如何解决这个问题。
因此,似乎更好的方法是采用以下形式
\begin{solution}
...
\end{solution}
在这里,注释包会派上用场。但是,当我在样式文件中尝试以下操作时
\usepackage{comment}
\if\generateSolution0
\newenvironment{solution}{\begin{comment}}{\end{comment}}
\else
\newenvironment{solution}{}{}
\fi
然后我遇到了这错误。
到目前为止我得到的最佳解决方案如下:stylefile:
\newcommand{\BeginSol}{\if\generateSolution1
{\large\textbf{\Solution:}}}
和 tex 文件:
\BeginSol
solution text
\fi
但是,这并不令人满意,因为我无法移动样式文件中的“\fi”,因为它必须明确出现在 tex 文件中。此外,如果我想添加装饰功能,例如将解决方案放在 mdframed 环境中,那么“\end{mdframed}”也会出现在 tex 文件中:
\newcommand{\BeginSol}{\if\generateSolution1
{\large\textbf{\Solution:}}\begin{mdframed}}
\BeginSol
solution text
\end{mdframed}\fi
欢迎提出任何建议!干杯。
PS:由于这是我在 tex.stackexchange 上的第一篇帖子,因此我对适当的标签不太熟悉。
答案1
\excludecomment{solution}
来自comment
包可以解决问题:
\documentclass[]{article}
\def\generateSolution{1}
\usepackage{comment}
\if\generateSolution1
\newenvironment{solution}{\textbf{Solution:}}{}
\else
\excludecomment{solution}
\fi
\begin{document}
Always show this
\begin{solution}
I only want these paragraphs in the case showSolution is set to 1
BB
CC
DD
EE
FF
GG
HH
II
JJ
KK
LL
MM
NN
\end{solution}
\end{document}
上述解决方案在 Overleaf 中对我来说效果很好。双击 Overleaf 的 pdf 预览中的某个段落会使光标跳转到 TeX 源代码中的正确段落。
据我了解comment
以下替代版本也应该可以正常工作,但实际上synctex.gz
在 Overleaf 中对于以下版本不起作用:
\documentclass[]{article}
\def\generateSolution{1}
\usepackage{comment}
\if\generateSolution1
\includecomment{solution}
\else
\excludecomment{solution}
\fi
\begin{document}
Always show this
\begin{solution}
I only want these paragraphs in the case showSolution ist set to 1
BB
CC
DD
...
\end{solution}
\end{document}
我不太明白为什么第二个版本不起作用,但幸运的是第一个版本运行良好,所以没有必要使用第二个版本。
这些解决方案的灵感来自于答案https://tex.stackexchange.com/a/3025/128042,https://tex.stackexchange.com/a/3026/128042和https://tex.stackexchange.com/a/3073/128042针对这个问题Latex 标签可以让注释在 pdf 中出现或消失吗?。