我正在使用列表包将 GAUSS 代码包含到 Latex 中。
例如这样:
\lstset{
emph={proc,retp,endp,local}, emphstyle=\color{blue}\textbf,
emph={[2]=,.^,./,=}, emphstyle={[2]\color{red}}
}
\begin{lstlisting}
proc(1) = tdist(n,v);
local x, z, z2, u, t;
x=rndn(n,1);
z=rndn(n,v);
z2=z.^2;
t=x./((U./v)^(1/2));
retp(t);
endp;
\end{lstlisting}
虽然字符串 (proc、retp 等) 突出显示,但数学运算符 (=、*、/) 却没有突出显示。我在这里做错了什么?
答案1
您无法使用emph
密钥执行此操作。但您可以使用密钥执行此操作literate
:
\documentclass{article}
\usepackage{listings,xcolor}
\begin{document}
\lstset{
emph={proc,retp,endp,local}, emphstyle={\color{blue}\textbf},
literate={./}{{{\color{red}./}}}2 {.^}{{{\color{red}.\^{}}}}2 {=}{{{\color{red}=}}}1
}
\begin{lstlisting}
proc(1) = tdist(n,v);
local x, z, z2, u, t;
x=rndn(n,1);
z=rndn(n,v);
z2=z.^2;
t=x./((U./v)^(1/2));
retp(t);
endp;
\end{lstlisting}
\end{document}
请注意,所有括号都是必需的,因为您需要限制\color
命令的范围。
答案2
我想对艾伦的回答补充一些观察,因为我也遇到了这个问题,来到这里我发现你的问题只是得到了部分回答。
如果您也希望运算符(如/
或)*
有颜色,那么您可能会遇到代码注释问题。这literate
将破坏软件包识别注释的方式listings
。以下是示例:
/**
* This is a
* comment ...
**/
let java = s / c + r * i - p + t // and this is some code
截屏:
现在您想要突出显示等式中的/
和*
,但是它会破坏注释:
literate=%
{+}{{{\color{Red}+}}}1
{-}{{{\color{Red}-}}}1
{*}{{{\color{Red}*}}}1
{/}{{{\color{Red}/}}}1
{=}{{{\color{Red}=}}}1
结果:
显然,这两条注释都是错误的。现在我尝试在模式中添加空格,但效果不佳。
literate=%
{\ +}{{{\color{Red}\ +}}}1
{\ -}{{{\color{Red}\ -}}}1
{\ *}{{{\color{Red}\ *}}}1
{\ /}{{{\color{Red}\ /}}}1
{\ =}{{{\color{Red}\ =}}}1
现在可以识别块注释,但是不能识别单行注释。
那么,为什么不也附加一个空格呢?
literate=%
{\ +\ }{{{\color{Red}\ +\ }}}1
{\ -\ }{{{\color{Red}\ -\ }}}1
{\ *\ }{{{\color{Red}\ *\ }}}1
{\ /\ }{{{\color{Red}\ /\ }}}1
{\ =\ }{{{\color{Red}\ =\ }}}1
这是我能获得的最接近期望的结果。
你可以看到它以某种方式缩小了空白。有些人可能会深入研究这里有几十种不同的 TeX 空白. 但你会明白的。