掩蔽 \end{lstlisting}

掩蔽 \end{lstlisting}

我不确定标题中的措辞是否正确。基本上我需要的是使用 listing 包添加以下源。

在序言中:

\usepackage{listings}

然后当我遇到问题时就在这里:

\begin{lstlisting}
     \begin{lstlisting}
     \end{lstlisting} 
\end{lstlisting}

但我得到了Package Listings Error: Extra \endlstlisting

我怎样才能“掩盖”第一个\end{lstlisting}?我已经看过文档了,但我还是迷茫了。

答案1

如果要展示lstlisting其自身的例子,请定义不同的环境:

\lstnewenvironment{TeXlstlisting}{\lstset{language=[LaTeX]TeX}}{}

然后

\begin{TeXlstlisting}
  \begin{lstlisting}
  ...
  \end{lstlisting}
\end{TeXlstlisting}

会起作用。当必须管理两种或多种编程语言的列表时,此策略也很有用。

答案2

您可以使用mathescape=true列表选项来逃避数学,但不执行任何操作,欺骗listings破坏控制序列任何地方分成两个不同的部分。在下面的 MWE 中,我使用了\$$end{lstlisting},将其分成\end{lstlisting};第一个$打开并退出到数学模式,而第二个$关闭数学模式并返回到列表。否则listings将控制序列识别\end{lstlisting}为结尾。

在此处输入图片描述

\documentclass{article}
\usepackage{listings}% http://ctan.org/pkg/listing
\begin{document}
\begin{lstlisting}[mathescape=true]
  \begin{lstlisting}
    Hello world!
  \$$end{lstlisting}
​\end{lstlisting}
\end{document}​

答案3

我认为您不能在lstlisting环境中嵌套。由于这是一个 verbatin 环境,因此第二个环境\begin{lstlisting}将被忽略,而第一个环境\end{lstlisting}将导致外部终止\begin{lstlisting}并留下一个额外的\end{lstlisting}

如果您提供有关您想要做什么的更多详细信息,也许我们可以提供一种实现该目标的方法。

如果你只想使用环境显示 LaTeX 输出listings,我会使用包裹showexpl

在此处输入图片描述

\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{showexpl}

\lstdefinestyle{demoLatexStyle}{
    basicstyle=\small\ttfamily,
    numbers=left, numberstyle=\tiny, stepnumber=2, numbersep=5pt,
    frame=none,
    basicstyle=\small\ttfamily,% print whole listing small
}
\lstloadlanguages{[LaTeX]TeX}

\begin{document}
\begin{LTXexample}[pos=b,style=demoLatexStyle]
     \begin{lstlisting}
        blah blah
     \end{lstlisting} 
\end{LTXexample}
\enddocument}

相关内容