在第 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 页):
关于参数,请记住以下几点:
[...]
- 如果在可选的 [⟨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 页,重点是我的)所述:
还要注意,如果在漂亮打印命令的可选参数中使用键的可选参数,则必须在值周围加上括号。尽管这不是必需的,但下面的示例使用了这些括号。当需要时它们通常会被遗忘
这里发生了什么?
- 参数如下:
⟨key⟩={⟨value⟩}
- 如果值是一个组,则可以删除括号:
⟨key⟩=⟨value⟩
- 可选参数如下所示:
key=[⟨optional argument⟩]{⟨value⟩}
- 再次,你可以删除(→2.)括号:
key=[⟨optional argument⟩]⟨value⟩
- 如果值位于可选参数:
5a. (→3.)key={[⟨optional argument⟩]{⟨value⟩}}
5b. (→4.)key={[⟨optional argument⟩]⟨value⟩}
你必须如果您在内optional argument
,即在括号内,请使用 5a 或 5b []
。