列表开始后文本被删除

列表开始后文本被删除

我该如何解决这个令人困扰的消息?

"text dropped after beginning of listing"

在我的序言中我使用:

\usepackage{listings}

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

然后在文档中我以这种方式使用该包:

\begin{lstlisting} http://www.victim.com/cms/login.php?..\end{lstlisting}

也可以这样:

\begin{lstlisting}
// connect to the database
$conn = mysql_connect("localhost","username","password");
...
\end{lstlisting}

这是因为列表环境中的文本不应该只在一行上吗?

答案1

对于较长的列表,请将环境\begin和放在\end它们自己的行上。对于简短的内联列表,请使用\lstinline(已定义)。以下是它们的用法示例:

在此处输入图片描述

\documentclass{article}
\usepackage{listings}% http://ctan.org/pkg/listings
\lstset{basicstyle=\ttfamily,breaklines=true}
\begin{document}
\begin{lstlisting}
http://www.victim.com/cms/login.php?..
\end{lstlisting}
Some text and \lstinline!http://www.victim.com/cms/login.php?..! and some more text.
\end{document}

listings文档使用以下术语(第4.2 排版列表,第25-26页):

  • 代码片段:\lstinline
  • 显示代码:lstlisting环境
  • 独立文件:\lstinputlisting

关于显示代码环境的使用lstlisting,它还指出(第 26 页):

对照verbatim包的环境,同一行上和环境结束后的 LaTeX 代码分别排版执行。

这允许您使用

\begin{lstlisting}
http://www.victim.com/cms/login.php?..\end{lstlisting}

但不是

\begin{lstlisting}http://www.victim.com/cms/login.php?..
\end{lstlisting}

无论如何,我认为没有必要将代码列表及其封闭的环境定义放在同一行,因此即使上面允许的用途也可以从放在\end{lstlisting}自己的行中受益。

答案2

环境会忽略同一行lstlisting之后的任何文本,因此会发出警告。\begin{lstlisting}

还有一个必须注意的陷阱:行末的注释会\begin{lstlisting}[…]像往常一样延长行。例如:

\begin{lstlisting}[float=bp] % try to place at bottom of page for some reason
foo;
bar;
% baz;
\end{lstlisting}

印刷

bar;
% baz;

该注释将被 latex 正确解析,并被 lstlistings 忽略(如警告所示)。这可能是预期的行为。

然而,随着注释延长了行,列表的第一行也将被忽略!

相反,确保该\begin{lstlisting}命令后面没有该行中的任何其他字符 - 但允许中间注释:

\begin{lstlisting}[
    float=bp % try to place at bottom of page for some reason
]
foo;
bar;
% baz;
\end{lstlisting}

(我将此作为答案发布,因为我的声誉不够高,无法发表评论。)

相关内容