如何标记长线的断线?

时间:2009-12-27 10:33:08

标签: latex

我有一个类似于以下内容的Latex代码:

\usepackage{listings}
\lstset{
    breaklines     = true,
    numbers        = left,
    stepnumber     = 5,
}
\begin{lstlisting}
for (int i = 0, j = 0, k = 1; i <= 10, j < foo; i++, j *= factor, k--) { // a comment here
    % something code here ...
}
\end{lstlisting}

for-loop的长行会在中间某处自动断开,因为纸张太窄了。这正是我想要的,否则该线将在论文的最后消失。但现在我的问题是,是否有办法标记或表明这条线被打破了。否则,它看起来像是一条新线。

这就是我想要的(使用行号,注意箭头):

10   for (int i = 0, j = 0, k = 1; i <= 10, j < foo;
   ↳     i++, j *= factor, k--) { // a comment here
11       % something code here ...

2 个答案:

答案 0 :(得分:46)

配置列表如下:

\lstset{prebreak=\raisebox{0ex}[0ex][0ex]
        {\ensuremath{\rhookswarrow}}}
\lstset{postbreak=\raisebox{0ex}[0ex][0ex]
        {\ensuremath{\rcurvearrowse\space}}}
\lstset{breaklines=true, breakatwhitespace=true}
\lstset{numbers=left, numberstyle=\scriptsize}

文档中的示例源代码:

\begin{lstlisting}[language=C++, numbers=left, linewidth=5.1cm]
    if (line.length() > line.max_length())
    {
        line.wrap();
    }
\end{lstlisting}

示例结果:

enter image description here

注意:您必须\usepackage{MnSymbol}才能使用\rhookswarrow\rcurvearrowse。为了防止额外的依赖,您可以使用默认包中包含的\hookrightarrow\hookleftarrow

来源:http://www.bollchen.de/blog/2011/04/good-looking-line-breaks-with-the-listings-package/。在那里阅读更详细的解释。还pdf

答案 1 :(得分:12)

显然,这可以通过prebreak / postbreak选项来完成。请参阅listings包的文档,该文档链接到its CTAN page(它是第33页的底部和pdf中第34页的顶部)。

修改:指向the Listings Package's manual的直接链接。另外,我想我可以在这里重现相关的位 - 所以这里是:

prebreak=<tokens>   (default {})
postbreak=<tokens>  (default {})
  

<tokens>分别出现在当前行的末尾,分别位于下一行(已断开的部分行)的开头。

     

您不能使用动态空间(特别是空格),因为我们在内部使用\\discretionary。但是,\\space被重新定义为在<tokens>内使用。

编辑2:关于换行标记的位置,可以通过将breakindent设置为0ptbreakautoindent来实现与问题中提供的示例外观接近的内容false并用\\space

将标记手工填充

例如,使用postbreak={\textbf{marker}\\space\\space\\space\\space}作为一个漂亮的粗体标记排版,其中新行通常会开始,然后是四个空格,然后是虚线的剩余内容。在prebreak'手册中postbreak / listings之后立即记录这些选项。 : - )