我想在\ExplSyntaxOn... \ExplSyntaxOff
块内使用 TikZ 环境。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{xparse}
\usepackage{tikz}
\usetikzlibrary{positioning}
\ExplSyntaxOn
\NewDocumentCommand{\maketikz}{ O{,} m }{%
\begin{tikzpicture}[%
padding/.append style={inner sep=2px},%
node distance=2pt
]
\node[draw] {#2};
\end{tikzpicture}
}
\ExplSyntaxOff
\begin{document}
\maketikz[;]{Yes}
\end{document}
在构建过程中,我收到 TikZ 样式的错误:I do not know the key '/tikz/padding/.appendstyle', to which you passed 'innersep=2px...
和I do not know the key '/tikz/nodedistance', to which you passed '2pt'...
。
如果没有\ExplSyntaxOn
它,构建就不会有任何错误。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{xparse}
\usepackage{tikz}
\usetikzlibrary{positioning}
\newcommand{\maketikz}[2][,]{
\begin{tikzpicture}[%
padding/.append style={inner sep=2px},%
node distance=2pt
]
\node[draw] {#2};
\end{tikzpicture}
}
\begin{document}
\maketikz[;]{Yes}
\end{document}
我的错误在哪里?
答案1
当ExplSyntax
转动时On
,空格将被忽略,而~
需要使用空格来代替。
引用手册interface3.pdf
:
函数
\ExplSyntaxOn
切换到类别代码机制,其中空格和换行符被忽略,冒号 (:
) 和下划线 (_
) 被视为“字母”,从而允许访问代码函数和变量的名称。在此环境中,~
用于输入空格。\ExplSyntaxOff
恢复为文档类别代码机制。
因此,您需要使用~
而不是空格来使用正确的键名。
这也意味着您不必%
在开场后{
或之后使用\end{tikzpicture}
。
传递给 PGFKeys 的选项后面[
和,
后面的也是不必要的,\ExplSyntaxOn
因为 PGFKeys 从一开始就忽略了空格
我在宏周围添加了一些文本以显示它们不包含空格。
代码
\documentclass{article}
\usepackage{tikz}
\ExplSyntaxOn
\NewDocumentCommand{\maketikz}{ O{,} m }{ % ← space doesn't need to be %ed
\begin{tikzpicture}[
padding/.append~style = {inner~sep = 2pt},
node~distance = 2pt ]
\node[draw, padding] {#2};
\end{tikzpicture} % ← space doesn't need to be %ed
}
\ExplSyntaxOff
\begin{document}
Foo\maketikz[;]{Yes}Bar
\end{document}