LaTeX 中用 listings 為什麼輸出結果和程序編譯器里的有差別(對齊格式)?

用listings宏包(lstinputlisting)輸出程序到pdf文檔,發現在編譯器注釋是對齊的,但是在pdf文檔里卻對不齊了(如下兩圖),這是為啥呢?有什麼解決的方法呢?

我的listings宏包設置是這樣的

lstset{
language={Matlab},
numbers=left,
numberstyle=scriptsize,
basicstyle=Ubuntumonosmall, %
ewfontfamilyUbuntumono{Ubuntu Mono}
breaklines,breakatwhitespace=true,
showstringspaces=false,
backgroundcolor=color[rgb]{0.97,0.97,0.97},
keywordstyle=color{blue}fcolorbox{gray!20}{.},
stringstyle=color{red},
commentstyle=color{lightgray},
frame=leftline,
rulesepcolor=color{red!20!green!20!blue!20},
morekeywords={ones},
keywords=[2]{nc,n,bound,xy},
keywordstyle=[2]color{black}fcolorbox{black}{gray!20},
keywords=[3]{mv,mbound},
keywordstyle=[3]color{black}fcolorbox{black}{gray!0},
}


0. 截圖中,編輯器里用等寬字族顯示代碼,且每行 % 之前的字元(包括空格)數相等,所以注釋能對齊。

1. listings 宏包默認將字元等寬顯示 [1, Sec 2.10],所以按照「預期」,PDF 中代碼也應對齊。題主 lstset{} 中的的這行設定

basicstyle=Ubuntumonosmall, %
ewfontfamilyUbuntumono{Ubuntu Mono}

將代碼字體設為等寬的 Ubuntu Mono 字族,使代碼在 PDF 里看起來更勻稱。沒有該設定,PDF 中的代碼也「應該」是對齊的。

2. 查看設定、觀察輸出結果,可發現 PDF 中的不對齊是由加框關鍵詞 (n, mv) 引起的,相關的設定為

keywords=[2]{nc,n,bound,xy},
keywordstyle=[2]color{black}fcolorbox{black}{gray!20},
keywords=[3]{mv,mbound},
keywordstyle=[3]color{black}fcolorbox{black}{gray!0},

注意到,在關鍵詞格式設定 (keywordstyle) 的兩行中都使用了彩色加框盒子命令 fcolorbox [1, Sec 1.3; 3, Sec 2.6.2]。

3. 字母(事實上可以是任何內容)加框後較之加框前增加的寬度,是兩倍的 fboxrule(框線寬度),與兩倍的 fboxsep(框內空距,字母與框線間的空距)之和 [3, Appx.; 4, Sec 3.6; 2, Sec 20.2]。這兩個命令都屬長度變數 [2, Chap 14],默認值分別為 3 pt 與 0.4 pt [2, Sec 20.2]。

4. 若想維持加框並對齊,可適當減少 fboxsep,並使加框後的寬度縮至正常。這一方案未經實踐,可能麻煩。用其他方式強調關鍵詞,如粗體、斜體、其他字族等,可使問題更好解決。listings 宏包文檔 [1] 中的示例,也提供了設定關鍵詞強調格式的參考。

參考文檔:

[1] Jobst Hoffmann, The Listings Package, 2015/06/04 v1.6

http://mirrors.ctan.org/macros/latex/contrib/listings/listings.pdf

[2] Karl Berry, LaTeX2e: An unofficial reference manual, May 2015

http://mirrors.ctan.org/info/latex2e-help-texinfo/latex2e.pdf

[3] Uwe Kern, Extending LaTeX"s color facilities: the xcolor package, 2007/01/21 v2.11

http://mirrors.ctan.org/macros/latex/contrib/xcolor/xcolor.pdf

[4] David P. Carlisle, Packages in the "graphics" bundle, 2014/04/27

http://mirrors.ctan.org/macros/latex/required/graphics/grfguide.pdf

希望本回答能給題主和潛在讀者帶來幫助。


推薦閱讀:

TAG:LaTeX | TeX | LaTeX排版與設計 |