1. 程式人生 > >LaTeX lstlisting環境中執行LaTeX程式碼

LaTeX lstlisting環境中執行LaTeX程式碼

問題提出

有一段Visual Basic 程式碼,需要在LaTeX文件中生成:

Private Sub Form_Click()
  Print
  For i = 1 To 5
    Print Tab(i); String(6 - i, "▼"); Spc(6); String(i, "▲")
  Next i
End Sub

我在利用 LATEX 排版文件時,書寫Visual Basic語言使用的是包listings,前導區如下書寫:

\usepackage{listings}
\usepackage{xcolor}
\lstset
{
    breaklines=true,
    tabsize=3
, showstringspaces=false }
\lstdefinestyle{Common} { extendedchars=\true, language={[Visual]Basic}, frame=single, %=========================================================== framesep=3pt,%expand outward. framerule=0.4pt,%expand outward. xleftmargin=3.4pt,%make the frame fits in the text area.
xrightmargin=3.4pt,%make the frame fits in the text area. %=========================================================== rulecolor=\color{red} } \lstdefinestyle{A} { style=Common, backgroundcolor=\color{yellow!10}, %basicstyle=\scriptsize\color{black}\ttfamily, basicstyle=\small\color{black}
\ttfamily, keywordstyle=\color{orange}, identifierstyle=\color{cyan}, stringstyle=\color{red}, commentstyle=\color{green} }

在正文部分,我使用下面 LATEX 程式碼排版Visual Basic程式碼:

\begin{lstlisting}[style=A]
Private Sub Form_Click()
  Print
  For i = 1 To 5
    Print Tab(i); String(6 - i, "▼"); Spc(6); String(i, "▲")
  Next i
End Sub
\end{lstlisting}

編譯,輸出結果中,始終無法出現這兩個特殊符號:”▼”和”▲”。如何在lstlisting環境中顯示、打印出這兩個特殊字元?這是一個問題。

問題解決方法

我將上述問題分解為如下兩個問題:

  1. 如何在LaTeX中(非lstlisting環境中)顯示這兩個特殊符號?
  2. 如何將這兩個特殊符號的 LATEX Code 放置到lstlisting環境中,從而在該環境中正確顯示該符號?

我最終費一番功夫,沿著上述思路解決了該問題。首先看對問題1的解答,通過baidu搜尋,得知《LaTeX數學公式的符號表示》中有這兩個特殊符號的表示程式碼,如下:

\blacktriangledown
\blacktriangle

注意上述程式碼必須放到數學環境下才能成功。

現在來看第二個問題的解答。我利用Baidu搜尋得不到任何答案,沒人遇到這方面的問題。因為國內使用LaTeX書寫文件的人本來就很少,且集中在高等學校的研究生、教師。另外,本文的問題是一個很奇怪的問題,程式碼中怎麼可能放入一些特殊的符號呢?寫程式碼就好好的寫程式碼,怎麼能在其中寫一些奇奇怪怪的字元呢?所以在國內遇到該問題的人幾乎沒有。按照我解決問題的慣例,問題還是出在listings包的使用方面,也就是說,該包的某些使用細節我還沒有掌握。當然,現在從頭開始讀厚厚的listings包的使用手冊不太現實,還必須從搜尋別人的答案著手。

baidu不起作用,Google在國內又用不上,我只有藉助於微軟的Bing搜尋,該搜尋引擎分為兩個版本,國內和國際。用英文使用國際版。在搜尋本問題時,如何選擇合適的搜尋關鍵字也非常重要。經過一番功夫,我使用的搜尋關鍵字是:

LaTeX lstlisting environment execute LaTeX code

最終,我搜索到一篇《lstlisting environment: applying syntax typesetting to escaped code》,裡面有作者相關的講解,該文作者遇到的問題與我遇到的問題相似,我借鑑他的思路,在\lstdefinestyle{A}中的設定中的最後增加了如下程式碼:

escapeinside={(*@}{@*)}

緊接著,在正文的lstlisting環境中這樣書寫:

\begin{lstlisting}[style=A]
Private Sub Form_Click()
  Print
  For i = 1 To 5
    Print Tab(i); String(6 - i, "(*@$\[email protected]*)"); Spc(6); String(i, "(*@$\[email protected]*)")
  Next i
End Sub
\end{lstlisting}

執行結果如下:
這裡寫圖片描述