隐藏文本的同时保留 synctex.gz 功能

隐藏文本的同时保留 synctex.gz 功能

我的目标如下:我想将练习及其解决方案写在一个 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/128042https://tex.stackexchange.com/a/3026/128042https://tex.stackexchange.com/a/3073/128042针对这个问题Latex 标签可以让注释在 pdf 中出现或消失吗?

相关内容