条件有效,列表有效,但放在一起时,没有

条件有效,列表有效,但放在一起时,没有

在之前的一个问题中,我学习了以下代码来定义条件编译的文本(供教师指导)

\newtoggle{teach}
\toggletrue{teach}
\NewEnviron{teachr}
  {\iftoggle{teach}{\BODY}{}}
\newcommand{\cpp}{\begin{lstlisting}[language=C++]}

如果我想在条件编译的文本中嵌入代码,就会失败。条件文本可以正常工作。

\begin{teachr}

\cpp
class foo {};
\end{lstlisting}

\end{teachr}

错误信息为:!LaTeX 错误:输入行 166 上的 \begin{teachr} 以 \end{lstlisting} 结束。

我认为这是明显的失败,但如果我应该构建一个 mwe,请告诉我,我会编辑这个问题。

答案1

您不能这样做:lstlisting环境不能嵌套在用 定义的环境中。此外,如果您没有使用正确的标签\NewEnviron,您就不能将环境嵌套在用 定义的环境中。\NewEnviron\begin

\documentclass{article}

\usepackage{listings}
\usepackage{comment}

\lstnewenvironment{cpp}[1][]
  {\lstset{language=C++,#1}}
  {}

\newenvironment{teacher}{}{}
%\excludecomment{teacher} % uncomment to hide

\begin{document}

This always shows
\begin{cpp}
class foo {};
\end{cpp}

\begin{teacher}
The following is for teacher only
\begin{cpp}
class bar {};
\end{cpp}
\end{teacher}

\end{document}

在此处输入图片描述

\excludecomment如果删除了带有 的行%,则输出将是

在此处输入图片描述

相关内容