lstlisting 破坏 ifbool 块

lstlisting 破坏 ifbool 块

我有以下一段代码:

\documentclass{article}
\usepackage{etoolbox}
\usepackage{listings}

\newbool{xyz}
%\booltrue{xyz}
\boolfalse{xyz}

\begin{document}

\ifbool{xyz}{
    \section{XYZ explained}
    \newpage
}{
    \begin{lstlisting}
    %my code goes here
    \end{lstlisting}
}

\end{document}

当我尝试编译该文档时,出现以下错误:

段落在 \@lstlisting 完成之前结束。

编译上述示例会导致以下错误:

TeX 容量超出,抱歉 [输入堆栈大小=5000]。

有人可以帮帮我吗?

答案1

这是一个常见的问题,源于不能将逐字内容作为宏参数的一部分。就你的情况来说,逐字内容是一个列表,而宏是\ifbool{<bool>}{<true>}{<false>}

然而,etoolbox创建\newbool{<bool>}一个原始 TeX \if<bool>,您可以使用它来调节。因此,不要使用上面提到的宏接口,而是使用原始接口\if<bool><true>\else<false>\fi

\documentclass{article}
\usepackage{etoolbox}
\usepackage{listings}

\newbool{xyz}% Creates \ifxyz; default is \xyzfalse
%\booltrue{xyz}% Sets \xyztrue

\begin{document}

\ifxyz% <true>
\section{XYZ explained}
\newpage
\else% <false>
\begin{lstlisting}
%my code goes here
\end{lstlisting}
\fi

\end{document}

相关内容