奇怪的列表语法:emph=[][} 或 emph={[]}?

奇怪的列表语法:emph=[][} 或 emph={[]}?

在第 18 页的清单文档(2015/06/04,版本 1.6)中,我们看到了示例

\lstset{emph={square}, emphstyle=\color{red},
emph={[2]root,base}, emphstyle={[2]\color{blue}}

请注意,数字[2]位于左括号之后{

然而,在第 31 页,我们看到,

emph=[<number>]{<identifier list>}
moreemph=[<number>]{<identifier list>}
deleteemph=[<number>]{<identifier list>}
emphstyle=[<number>]{<identifier list>}

这里,[<number>]位于左括号 之前{,与上面的例子相矛盾。

哪种语法是“正确的”语法(通常需要注意的是,“正确的”定义不明确,因为只有代码可以比较)?如果两者都是“正确的”语法:那么语义上是否存在差异?

答案1

摘自手册(第 27 页):

关于参数,请记住以下几点:

[...]

  1. 如果在可选的 [⟨key=value list⟩] 中使用键的 [⟨optional arcargument⟩],则必须将参数括号括在键的整个值周围:\begin{lstlisting}[caption={[one]two}].

如果括号在括号内,则将其放在大括号内。

即使没有必要,您也可以使用此语法,如您的示例中所示:

\lstset{emph={square}, emphstyle=\color{red},
emph={[2]root,base}, emphstyle={[2]\color{blue}}

或者正如手册(第 19 页,重点是我的)所述:

还要注意,如果在漂亮打印命令的可选参数中使用键的可选参数,则必须在值周围加上括号。尽管这不是必需的,但下面的示例使用了这些括号。当需要时它们通常会被遗忘


这里发生了什么?

  1. 参数如下:⟨key⟩={⟨value⟩}
  2. 如果值是一个组,则可以删除括号:⟨key⟩=⟨value⟩
  3. 可选参数如下所示:key=[⟨optional argument⟩]{⟨value⟩}
  4. 再次,你可以删除(→2.)括号:key=[⟨optional argument⟩]⟨value⟩
  5. 如果值位于可选参数
    5a. (→3.)key={[⟨optional argument⟩]{⟨value⟩}}
    5b. (→4.)key={[⟨optional argument⟩]⟨value⟩}

必须如果您在内optional argument,即在括号内,请使用 5a 或 5b []

相关内容