2009-12-27 24 views
23

我有類似如下的代碼乳膠:如何標記長行的分行?

\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循環的長線就會自動打破某處在中間,因爲紙張太窄。這正是我想要的,否則這條線將在論文的最後消失。但是現在我的問題是,是否有辦法標記或者說明這條線路被打破了。否則,它看起來像一條新線被創建。

類似的東西是我想要的(行號,注意箭頭)什麼:

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

回答

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:對於斷行標記的位置,一些接近在問題所提供的示例的外觀可以通過設置breakindent0ptbreakautoindent來實現false和手工填充所述標記帶,說,\\space

例如,使用postbreak={\textbf{marker}\\space\\space\\space\\space}一個不錯的大膽標記排版,其中新線將正常啓動,那麼四個空格,然後是虛線的剩餘內容。這些選項在prebreak/postbreaklistings手冊中記錄。 :-)

+0

謝謝,「postbreak」似乎是/近/我一直在尋找,猜測這是最好的方法。可能有辦法將「postbreak」的標記定位到行首嗎?也許重置它的位置? – watain 2009-12-27 12:48:27

+0

是的,您可以操縱縮進並在換行符中包含硬空格以將虛線的實際內容推向右側。我編輯了我的答案以包含相關的詳細信息。希望對你有效。 :-) – 2009-12-27 14:03:09

+0

非常感謝Michał。這只是想我想:)我應該先閱讀整個列表手冊;) – watain 2009-12-28 11:19:03

43

配置列表如下:

\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一個d \rcurvearrowse。爲防止額外的依賴性,您可以使用默認軟件包中包含的\hookrightarrow\hookleftarrow

來源:http://www.bollchen.de/blog/2011/04/good-looking-line-breaks-with-the-listings-package/。閱讀更詳細的解釋。也pdf