假设我们有这段小代码片段:
\begin{tikzpicture}
\begin{axis}[
date coordinates in = x,
table/col sep = semicolon,
date ZERO = 2019-01-01 09:00:00,
xmin = 2019-01-01 09:00:00,
xmax = 2019-01-10 21:00:00,
xticklabel = \day.\month,
xlabel = Test,
]
\addplot table [x=Date, y=Value] {data.csv};
\end{axis}
\end{tikzpicture}
结果看起来与用此代码编译的结果完全相同:
\begin{tikzpicture}
\begin{axis}[
date coordinates in = {x},
table/col sep = {semicolon},
date ZERO = {2019-01-01 09:00:00},
xmin = {2019-01-01 09:00:00},
xmax = {2019-01-10 21:00:00},
xticklabel = {\day.\month},
xlabel = {Test},
]
\addplot table [x=Date, y=Value] {data.csv};
\end{axis}
\end{tikzpicture}
所以:
什么时候必须使用括号,什么时候不需要使用括号?
答案1
基本上,你必须当值中包含以下三个(我记得的)字符之一时,请用括号将值括在键中:,
、=
和]
。
假设您有(例如)这样的选项:
legend style = draw = none, fill = white
如何分辨什么是键以及传递给该键的值是什么?
使用花括号是为了向底层键值解析包明确什么是键,什么是值。这种“保护”在 TeX 级别起作用,因为当 TeX 抓取分隔参数(用于键值解析器)时,它会(引用 TeXbook,重点是我加的):
A分隔参数接下来是
<parameter text>
在到达参数文本的末尾或下一个参数标记之前,最短(可能为空)的标记序列,具有适当的嵌套{...}
具有适当嵌套组的输入中紧接着的是这一特定的非参数标记列表。(类别代码和字符代码必须匹配,并且控制序列名称必须相同。)
因此{...}
诀窍是确保解析器能够获得正确的键和值。
从我提到的三个字符来看,,
和需要=
隐藏,因为键值解析器会使用它们来确定键值对在何处结束,然后确定什么是键,什么是值。
也需要]
受到保护,因为更早的时候,环境axis
会抓取一个[...]
-delimited 参数,如果你有一个明确的]
非隐藏的 TeX 会认为它是参数分隔符并会在中途切断该参数。
您可以尝试使用虚拟键来查看使用或不使用括号时会发生什么:
\documentclass{article}
\usepackage{pgfkeys}
\pgfkeys{
legend style/.code = {
Legend Style: #1.\par
},
draw/.code = {
ERROR! Draw: #1.\par
},
fill/.code = {
ERROR! Fill: #1.\par
},
}
\begin{document}
\pgfkeys{legend style = draw = none, fill = white}
\pgfkeys{legend style = {draw = none, fill = white}}
\end{document}