使用 LaTeX 中的 listing 包强调字符串中的单词

使用 LaTeX 中的 listing 包强调字符串中的单词

我使用 LaTeX 的 listings-package 来格式化文档中的源代码。我可以使用 listings 包的 emph-option 来强调关键字:

\lstset{
    emph={nerv},
    emphstyle={\color{red}\textbf}
}

\begin{lstlisting}[
    frame=trBL,
    caption={R-Code (test).},
    label={code:R_allee}
]
# comment
square <- function(x) {
    x^2
}

nerv = "Str ing "

x <- c(1:100)
y <- square(x)
\end{lstlisting}

这使得源代码中的“nerv”变成粗体和红色。但是,我想使用以下方法突出显示字符串“Str ing”中的“ing”:

\lstset{
    emph={ing},
    emphstyle={\color{red}\textbf}
}

不幸的是,这不起作用。我不知道该如何解决这个问题。

你们有人有主意吗?

答案1

我理解这可能是一个没有实际意义的问题,因为你只提供了一个最小的例子。但是,我还假设突出显示ing中的字符串"Str ing "可能仅限于代码中的特定实例。为此,无需定义一个样式全球的整个列表。您可以立即逃脱列表环境(产生当地的更改),并通过设置mathescape=true标志使用标准 LaTeX 排版一些内容:

\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\begin{document}

\lstset{
    emph={ing},
    emphstyle={\color{red}\textit}
}

\begin{lstlisting}[
    frame=trBL,mathescape=true,
    caption={R-Code (test).},
    label={code:R_allee}
]
# comment
square <- function(x) {
    x^2
}

nerv = "Str $\color{blue}\textbf{ing}$ "
burn ing = hot

x <- c(1:100)
y <- square(x)
\end{lstlisting}

​\end{document}​

来自 lstlisting 中的 mathescape

另一个很好的例子是:Lstlistings:在显示模式下获得漂亮的方程式

答案2

今天我偶然发现了一个类似的问题,并找到了这个相当老问题的另一个解决方案。该listings包允许我们定义分隔符,包仍将在其中处理关键字和其他内容。来自文档listings

您甚至可以让包检测内容内的关键字、注释、字符串和其他分隔符。

\lstset{moredelim=*[s][\itshape]{/*}{*/}}

修饰符*也适用于字符串定义,因此我们可以定义自己的字符串,其中仍然允许使用关键字:

\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}

\begin{document}
\lstset{
    emph={ing},
    emphstyle={\color{red}\textit},
    morestring=*[b]"  % the quote may be escaped by a _b_ackslash
}

\begin{lstlisting}[
    frame=trBL,mathescape=true,
    caption={R-Code (test).},
    label={code:R_allee}
]
# comment
square <- function(x) {
    x^2
}

nerv = "Str ing"
burn ing = hot

x <- c(1:100)
y <- square(x)
\end{lstlisting}
​\end{document}

但请注意,“ing”仍然必须是它自己的标识符。 在此处输入图片描述

相关内容