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

运行结果如下:
这里写图片描述


©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页