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
我在利用
\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}
}
在正文部分,我使用下面
\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環境中顯示、打印出這兩個特殊字元?這是一個問題。
問題解決方法
我將上述問題分解為如下兩個問題:
- 如何在LaTeX中(非lstlisting環境中)顯示這兩個特殊符號?
- 如何將這兩個特殊符號的
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}
執行結果如下: