如何不排版 LaTeX 内容?或者如何省略 LaTeX 内容?

如何不排版 LaTeX 内容?或者如何省略 LaTeX 内容?

考虑以下最小示例:

\documentclass{article}

\begin{document}
foo
\setbox0=\vbox\bgroup
\label{baz}
\ref{baz}
\egroup
bar
\end{document}

每当你运行 LaTeX 时,你都会收到类似这样的警告

LaTeX Warning: Reference `baz' on page 1 undefined on input line 7.

这是完全可以接受的,也是意料之中的。但是,如何才能省去任意(但有效)的 LaTeX 内容而不打印这样的警告呢?

我为什么要问这个问题或者我想要实现什么。我尝试为考试编写一个模板,其中我有一个名为的环境,solution并按如下方式使用它:

\begin{solution}
  foo ...
\end{solution}

每当我切换布尔值时,解决方案环境中的内容应该被排版或省略。我通过将所有内容保存在框内来实现后者,如上面的最小示例所示。即使我verbatim的环境中有一个环境,这也能正常工作solution

答案1

我用的是这个:

\newif\ifsolution\solutiontrue
\colorlet{darkgreen}{green!40!black}
\usepackage{comment}
\specialcomment{solution}{\begingroup\color{darkgreen}}{\endgroup}
%
%\solutionfalse % uncomment this to hide the solution
\ifsolution\relax\else\excludecomment{solution}\fi

...并且它运行得很好(我还没有用真正棘手的东西来检查它,但它似乎lstlisting有效)。

(另一个布尔值似乎被过度使用是因为我\ifsolution在更多宏中使用了该构造)。

更新

当我在我的第一篇非英语文本上使用它时,我发现问题在问题中得到了解释comment.sty 和 UTF8 编码--- 因此,感谢@egreg,真正的解决方案是:

\newif\ifsolution\solutiontrue
\colorlet{darkgreen}{green!40!black}
\usepackage{comment}
%% fix comment.sty for utf8 encoding https://tex.stackexchange.com/a/159824/38080
\renewcommand\ThisComment[1]{%
\immediate\write\CommentStream{\unexpanded{#1}}%
}
\specialcomment{solution}{\begingroup\color{darkgreen}}{\endgroup}
%
%\solutionfalse % uncomment this to hide the solution
\ifsolution\relax\else\excludecomment{solution}\fi

答案2

您可以使用多受众选修的, 或者标记包。

这里还发布了一个使用 etoolbox 和 verbatim 包的非常好的解决方案,打开或关闭部分文本

相关内容