TikZ 环境样式选项在 `\ExplSyntaxOn` 中不起作用

TikZ 环境样式选项在 `\ExplSyntaxOn` 中不起作用

我想在\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}

输出

在此处输入图片描述

相关内容