我有一个库,其中包含使用 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}