標籤:latex listings
最近由於需要在LaTeX中展現C++代碼,於是就在網路上搜尋別人提供的解決方案。結果大失所望,所搜尋出來的LaTeX代碼要麼不能運行,要麼運行結果不符合自己的需要。國內的利用百度進行搜尋,國外的利用yahoo進行搜尋。最可恨的是有的貼出來的LaTeX代碼進行講解的少,而且前置 (preamble) 中缺失相應的包,浪費了使用者的時間。本來想直接利用別人的,反而沒有達到應有的效果。這就刺激了我,我花了時間捋捋LaTeX展現代碼的機制,終於弄懂了其中的機理,現講解如下.
1 前置言加入的包
展現代碼在LaTeX中需要使用listings包,由於代碼中要用不同顏色的字型顯示更加好看,又需要xcolor包。LaTeX中的包就像C++語言中的標頭檔那樣,只有引入它們相應的功能才能具備。最終,前置言1應該這樣書寫:
\usepackage{listings}\usepackage[usenames,dvipsnames]{xcolor}
2 listings包相應的參數設定
我們不做任何設定,也會得到運行結果,但那種結果的展現通常比較單調,不是我們想要的結果。我們在真正使用它之前,必須進行相應的設定才能達到我們需要的效果。真正費工夫的地方正在於此。經過多次調試,我的設定為:
\definecolor{mygreen}{rgb}{0,0.6,0}\definecolor{mygray}{rgb}{0.5,0.5,0.5}\definecolor{mymauve}{rgb}{0.58,0,0.82}\lstset{ backgroundcolor=\color{lightgray}, basicstyle = \footnotesize, breakatwhitespace = false, breaklines = true, captionpos = b, commentstyle = \color{mygreen}\bfseries, extendedchars = false, frame =shadowbox, framerule=0.5pt, keepspaces=true, keywordstyle=\color{blue}\bfseries, % keyword style language = C++, % the language of code otherkeywords={string}, numbers=left, numbersep=5pt, numberstyle=\tiny\color{mygray}, rulecolor=\color{black}, showspaces=false, showstringspaces=false, showtabs=false, stepnumber=1, stringstyle=\color{mymauve}, % string literal style tabsize=2, title=\lstname }
上面的設定中,為了更好的使用顏色,我們定義了三種自訂的顏色,然後在listings的設定中使用它們。上面的設定選項大部分是顧名思義的,我講解一下比較重要的幾個選項的含義,其他的請讀者參考相應的資料。
- basicstyle用來設定代碼字型的格式
- captionpos用來設定代碼塊標題出現的位置
- commentstyle用來設定代碼中注釋的字型格式
- language用來指定是什麼語言的代碼,本例使用的是C++
- numbers用來指定代碼塊的行號出現的位置或者不出現
注意:上面的設定代碼也應該出現的LaTeX的前置言中。
3 LaTeX展現C++的代碼及運行結果
在LaTeX代碼的本文中屬性以下代碼:
\begin{lstlisting}[caption={}]#include "randomGenerator.h"void normalNumGen(double mean, double sd, int num, string filename){const int nrolls=num; // number of eperimentsdefault_random_engine generator;normal_distribution<double> dnorm(mean, sd);ofstream outfile(filename,ios::out);for(int i=0; i < nrolls; ++i){double number = dnorm(generator);outfile << number << endl;}}\end{lstlisting}
上面是具體使用listings包的方式,你需要將完整的C++程式碼封裝含在環境lstlisting中。最後的運行結果如下:
4 結束語
該包是很好玩的,更加詳細的介紹請參考listings包使用者手冊。
- 所謂前置言,就是大多數LaTeX教科書,國外或者國內的,定義的,在\documentclass以下,\begin{document}以上的那部分地區。 ?
利用LaTeX展現C++代碼