您的位置:首页 > 编程语言

LaTeX lstlisting环境中执行LaTeX代码

2018-01-09 20:32 246 查看

问题提出

有一段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环境中显示、打印出这两个特殊字符?这是一个问题。

问题解决方法

我将上述问题分解为如下两个问题:

如何在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, "(*@$\blacktriangledown$@*)"); Spc(6); String(i, "(*@$\blacktriangle$@*)")
Next i
End Sub
\end{lstlisting}


运行结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息