我有以下一段代码:
\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}