如何在条件语句中使用列表?

如何在条件语句中使用列表?

我有一个库,其中包含使用 listings 包格式化的代码片段。此库用于两个不同的文档,根据文档的不同会略有不同。我一直在使用条件语句来实现这些特定于文档的更改。

然而,当我尝试将列表格式的片段与条件结合起来时,LaTeX 编译器(xelatex)输出以下警告,并且文本被吞没:

“软件包列表警告:在输入行 XYZ 的列表开始后文本被丢弃。”

为什么我会收到这个错误/我需要做什么才能在条件中使用列表?

我在下面附加了一个 MWE,展示了我正在尝试做的事情(文件名是 MWE.tex):

\documentclass[a4paper]{article}

\usepackage{listings}
\usepackage{xstring}

\lstset{basicstyle=\ttfamily,breaklines=true}

\begin{document}

Here is lstlisting without condition:

\begin{lstlisting}
    This is sample code. 
\end{lstlisting}

Here is lstlisting within a conditional:

\IfSubStr{\jobname}{\detokenize{MWE}}%
  {\begin{lstlisting}
    This is sample code. 
   \end{lstlisting}}%true
  {FALSE}%false

\end{document}

答案1

在宏的参数中使用脆弱内容不是一个好主意。你可以避免这个问题,例如使用一个\if案例:

\documentclass[a4paper]{article}

\newif\ifmwe
\usepackage{listings}
\usepackage{xstring}


\lstset{basicstyle=\ttfamily,breaklines=true}

\begin{document}

Here is lstlisting without condition:

\begin{lstlisting}
    This is sample code. 
\end{lstlisting}

Here is lstlisting within a conditional:

\IfSubStr{\jobname}{\detokenize{MWE}}%
  {\mwetrue}%true
  {\mwefalse}%false
  
\ifmwe
  \begin{lstlisting}
      This is sample code. 
     \end{lstlisting}  
\else
 fasle
\fi  
  

\end{document}

相关内容