我该如何解决这个令人困扰的消息?
"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}
(我将此作为答案发布,因为我的声誉不够高,无法发表评论。)