利用LaTeX展現C++代碼

來源:互聯網
上載者:User

標籤: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包使用者手冊。

  1. 所謂前置言,就是大多數LaTeX教科書,國外或者國內的,定義的,在\documentclass以下,\begin{document}以上的那部分地區。 ?

利用LaTeX展現C++代碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.