关于 listings 包中键 xxxstyle 的一些问题

关于 listings 包中键 xxxstyle 的一些问题

我是 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中的命令也类似。因此,幕后发生的事情类似于keywordstylestringstyle

\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}

相关内容