如何在使用列表时暂时禁用注释分隔符

如何在使用列表时暂时禁用注释分隔符

在我的文档的序言中,我放置了以下命令以允许字符串用斜体注释包装<并打印:>

\lstset{morecomment=[s]{<}{>},commentstyle=\rmfamily\itshape}

并且根据我对listings包文档的理解,如果我想暂时禁用这个分隔符,我应该使用它deletecomment=[s]{<}{>}作为特定环境的可选参数lstlisting

\begin{lstlisting}[deletecomment=[s]{<}{>}]
\lstset{morecomment=[s]{<}{>},commentstyle=\rmfamily\itshape}
\end{lstlisting}

但 LaTeX 却因此发出了错误。

那么禁用注释分隔符的正确方法是什么?

以下是 MWE:

\documentclass[a4paper]{article}
\usepackage{listings}
\lstset{morecomment=[s]{<}{>},commentstyle=\rmfamily\itshape}
\begin{document}
\begin{lstlisting}[deletecomment=[s]{<}{>}]
<text>
\end{lstlisting}
\end{document}

答案1

问题在于lstlisting环境可选参数的解析。]

deletecomment=[s]{<}{>}

找到后,LaTeX 会假定它标记了该可选参数的结尾。此问题及其解决方案在文档的 2.3 小节中进行了解释listings

language=[77]Fortran在可选参数内不起作用。如果在可选参数内使用带有可选参数的值,则必须在值周围加上括号。在这种情况下,请写入language={[77]Fortran}选择 Fortran 77。

如果你在这里应用这个技巧,通过编写

deletecomment={[s]{<}{>}}

相反,一切都按预期进行。

在此处输入图片描述

\documentclass[a4paper]{article}
\usepackage{listings}
\lstset{morecomment=[s]{<}{>},commentstyle=\rmfamily\itshape}
\begin{document}
\begin{lstlisting}
<text>
\end{lstlisting}
\begin{lstlisting}[deletecomment={[s]{<}{>}}]
<text>
\end{lstlisting}
\end{document}

相关内容