![关于 listings 包中键 xxxstyle 的一些问题](https://linux22.com/image/349469/%E5%85%B3%E4%BA%8E%20listings%20%E5%8C%85%E4%B8%AD%E9%94%AE%20xxxstyle%20%E7%9A%84%E4%B8%80%E4%BA%9B%E9%97%AE%E9%A2%98.png)
我是 Latex 的新手,正在阅读listings
软件包文档(http://mirrors.ctan.org/macros/latex/contrib/listings/listings.pdf)第6页有以下段落:
这些样式使用两种不同的命令。
\ttfamily
并且\bfseries
都不带参数,但\underbar
它确实;它强调了以下参数。一般来说,最后命令只能读取一个参数,即包排版的一些材料。有一个例外。最后一个命令basicstyle
一定不阅读任何标记-否则您将陷入困境。
我对这段话有一些疑问。首先,“最后变化命令”指的是什么?乍一看,我以为是指\underbar
,但出现在同一个句子开头的短语“一般来说”和后面的句子“有一个例外……”让我感到困惑。其次,同样,“最后一个命令”basicstyle
指的是什么?有人能给我解释一下整个段落吗?第 30 页也有类似的句子:
最后一个标记基本风格不能读取任何后续字符。
我将非常感激您对此事的帮助。
答案1
你可以这样做,正如文档所说
keywordstyle=\color{black}\bfseries\underbar
或者其他愚蠢的事情,例如
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\newcommand{\fancycomment}[1]{\textcolor{red}{\slshape#1}}
\newcommand{\fancystring}[1]{\textcolor{blue}{\itshape#1}}
\lstset{% general command to set parameter(s)
basicstyle=\small, % print whole listing small
keywordstyle=\color{black}\bfseries\underbar,
identifierstyle=\textit,
commentstyle=\fancycomment,
stringstyle=\fancystring,
showstringspaces=false,
}
\begin{document}
\begin{lstlisting}[language=Pascal]
for i:=maxint to 0 do
begin
{ do nothing }
end;
Write('Case insensitive ');
WritE('Pascal keywords.');
\end{lstlisting}
\end{document}
发生的事情是,一个被视为注释的单词被传递作为支撑论据在 和 中的命令之后,或commentstyle
中的命令也类似。因此,幕后发生的事情类似于keywordstyle
stringstyle
\begingroup\color{black}\bfseries\underbar{for}\endgroup
(分组用于避免设置泄漏到预期范围之外);实际上,而不是for
会有一个更复杂的标记列表,但这与本解释无关。如果没有该\underbar
命令,我们将有
\begingroup\color{black}\bfseries{for}\endgroup
括号中没有任何特殊含义。使用\fancycomment
和\fancystring
只是举例,因为
commentstyle=\color{red}\slshape,
stringstyle=\color{blue}\itshape,
会更轻松地完成相同的任务。您可以考虑更好的应用程序。
这才不是发生basicstyle
:获取整个处理过的列表然后将其作为宏的参数传递是荒谬的basicstyle
。
因此我们不允许玩这样的游戏basicstyle
,此类游戏仅应接收以下列表作为值:声明例如\small
或\ttfamily
。
常见的错误是认为\small
和其他字体大小更改命令都带有参数:它们不需要。与 类似\ttfamily
,\small
命令 TeX“从现在开始使用较小的字体排版”,受标准作用域规则的限制。
并非所有一个参数命令都可以作为样式键的值位于尾随位置:例如,\MakeUppercase
是不允许的。
答案2
这是指您为 提供样式参数的方式listings
。这意味着您可以使用任何不带任何参数的样式命令。
basicstyle
如果您使用(如),则不能使用带参数的命令\lstset{basicstyle=}
。在任何其他情况下,您都可以使用仅带有一个参数的命令,例如\ttfamily\underbar
。“最后一个”命令只是指该命令必须是分配中的最后一个。
之所以有这种区别,是因为basicstyle
适用于所有列表文本,因此例如关键字将被设计为basicstyle+keywordstyle
。并且只有最后一个(这里是 的最后一个keywordstyle
)可以处理该参数。
答案3
basicstyle 是列表中整体字体的样式。
\documentclass{article}
\usepackage{listings}
\lstset{language=[LaTeX]TeX}
\begin{document}
%OK
\begin{lstlisting}[basicstyle=\bfseries,
keywordstyle=\underbar]
abc \ttfamily
\end{lstlisting}
%big troubles
%\begin{lstlisting}[basicstyle=\underbar]
%abc
%\end{lstlisting}
%
\end{document}