如何突出显示lstlisting中的某些部分?

9

我该如何将lstlisting中的某些部分设置为粗体?

\begin{lstlisting}[escapechar=@]
fun(foo, bar, @\textbf{baz}@ );
\end{lstlisting}

这段代码是可以编译通过的,但是 baz 没有被设置为粗体 :( 我错过了什么?

3个回答

9

你的基本方法应该是告诉列表应该强调哪些单词。一种简单的方法是像这样:

\lstset{emph={baz},emphstyle=\textbf}

当然,这将强调每次出现baz。但是这比尝试将标记放入您的列表本身要好得多,因为您不应该这样做,因为您希望使用列表来格式化未经修改的代码片段,尤其是如果您包括源文件而不是键入代码片段。
一旦掌握了基础知识,请查看文档,以了解如何为关键字和标识符设置样式,以及如何修改所选语言的内置关键字列表。

2
谢谢,但我真的想在这个特定的上下文中强调baz。 - fredoverflow
好的,只需在您想要的范围内进行\lstset调用,然后在该范围之外进行重置。我不会说您不能在列表中设置任意文本和任意格式,但如果这样做,您将始终与软件包作斗争。 - High Performance Mark
1
顺便说一句,emphstyle=\textbf 对我不起作用,而例如 emphstyle=\color{red} 就可以。看来 lstlisting 真的不想让我弄乱字体 :( - fredoverflow
尝试使用\bfseries代替\textbf - High Performance Mark
我在这个解决方案和@velop提供的下面遇到的问题是,当代码语言被确定(无论是在\lstset还是在\begin{lstlisting}后作为属性)时,它们都不起作用。有原因吗?更重要的是,有解决方法吗? - Jopie

7

您的解决方案是正确的。然而,标准的LaTeX等宽字体没有粗体版本,因此\textbflstlisting环境中无效。根据macfreek.nl的说法,您可以重新声明粗体版本,方法如下:

\DeclareFontShape{OT1}{cmtt}{bx}{n}{<5><6><7><8><9><10><10.95><12><14.4><17.28><20.74><24.88>cmttb10}{}

我已经测试了以下示例,它可以按照你的要求正常工作:
\documentclass{article}
\usepackage{listings}
\DeclareFontShape{OT1}{cmtt}{bx}{n}{<5><6><7><8><9><10><10.95><12><14.4><17.28><20.74><24.88>cmttb10}{}
\lstset{language=C, basicstyle=\ttfamily}
\begin{document}

\begin{lstlisting}[escapechar=@]
fun(foo, bar, @\textbf{baz}@ );
\end{lstlisting}

\end{document}

我在beamer演示文稿中使用相同的技术,只是使用\color{red}而不是\textbf来提示观众两个几乎相同的代码清单之间的区别。


5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接