extendedchars=false才能順利 compile 文件及顯示中文
listings 套件可以處理程式碼內,包含 ASCII Code 128~255 的字元 (extended ASCII),但是需要你「明白」的告訴 listings 「你要把這些字元正確的印出來」, 因此有這個 extendedchars 選項。
如果設定 true, 代表程式碼中有 ASCII 128~255 的字元要顯示。但中文字都是復合編碼, 因此需要明白設定 false 才能避免 listings 套件去處理這些字元。
如果註解的中文,想要變換顏色,這時候要設定 texcl=true, 啟動「讓註解跳脫(escape) 到 LaTeX 去處理」。
開啟這個設定後,當 listings 套件遇到註解符號後,註解字符會印出來,接著會將後面(到行尾)的所有內容交由 LaTeX 去處理,LaTeX 就可以用顏色套件,套用你所設定的樣式後印出。
這時候要特別注意,如果註解中有出現反斜線的字眼,這會被視為 LaTeX 的命令!如果是無意放進去的,可能會導致排版異常。
一般來說, 開啟 texcl 功能設定後,extendedchars 使用預設值即可。
但如果是如 C++ 這種語言,可以接受 // 為註解,也可以接受 /* */ 為註解的語言,這時候就要設定 extendedchars=false 才行了。
只是 C++ 程式碼中如果有「/* ... */」這種註解,中間的中文不會變色,目前無解中,所以建議採用「//」 這種註解方式。
假設我希望程式中中文註解字的顏色要換成紅色,這時可以這麼設定:
commentstyle={\color{red}} texcl=true
目前我自己試驗過覺得一個還不錯的設定值, 紀錄於此。
backgroundcolor={\color{yellow!30}} %設定背景顏色為 30% 黃色 basicstyle={\scriptsize} %設定文字的樣式 breaklines=true %設定長文字行的時候要自動換行 columns=flexible %設定字符寬度為可變的 commentstyle={\color{red}} %設定註解顏色為紅色 extendedchars=false %不處理 extended ASCII 字元 frame=single %加外框 keywordstyle={\color{blue}} %程式碼的關鍵字以藍色字體顯示 language={PSTricks} %程式碼的語言 numbers=left %行號標注在左方 numberstyle={\scriptsize\color[rgb]{0.5,0.5,1.0}\oldstylenums} %行號字體 tabsize=4 %程式碼中 Tab 鍵的空格數 texcl=true %開啟 LaTeX comment line 功能
排版結果如下圖:
「在文件中放入程式碼 -- (1)」中所使用的方法,無法用這裡的設定放入中文註解。後來我發現,原來是 LyX 的「先天限制」。
因為,當在 LyX 插入一個 Programming List 的時候,LyX 會自動加入 \inputencoding{latin1} ,這會讓程式碼內有任何 UTF8 編碼的文字,都無法處理。
我不知道新版 LyX 會不會改進,但到 2.0.6 版都有這個問題。
多了這行 \inputencoding{latin1} 使得程式碼內不能放中文註解 |
目前我的解決辦法就是,自己插入 TeX Code, 輸入程式碼,就可以使用中文註解了。
\begin{lstlisting} ... 程式碼 \end{lstlisting}
自行建立 lstlisting 環境 |
排版結果 |