tikz:NewDocumentCommand 无法在 tikzcd/节点矩阵中添加 |[mystyle]|

tikz:NewDocumentCommand 无法在 tikzcd/节点矩阵中添加 |[mystyle]|

我如何设计一个宏(如果可以使用\NewDocumentCommand)来添加类似 tikz 矩阵(通过 tikzcd 创建)的内容|[stylename]| content?现在我可以这样做:

\newcommand\zxZ[1]{|[Z]| #1}

但是使用 NewDocumentCommand 时,会失败:

\NewDocumentCommand{\zxZ}{m}{|[Z]| #1}

以下是我目前得到的结果:

在此处输入图片描述

梅威瑟:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{cd}
\usetikzlibrary{backgrounds,positioning}
\usetikzlibrary{shapes,shapes.geometric,shapes.misc}
\usepackage{xparse}
\begin{document}

\tikzstyle{Z}=[fill=green]

% Works
%\newcommand\zxZ[1]{|[Z]| #1}
% Works (but I'd prefer the above |[Z]| since it seems to handle \arr and https://tex.stackexchange.com/a/21167/116348 better)
%\newcommand\zxZ[1]{\node[Z]{#1};}
% Fails
%\NewDocumentCommand{\zxZ}{m}{\node[Z]{#1};}
% Fails
%\NewDocumentCommand{\zxZ}{m}{|[Z]| #1}

\begin{tikzcd}
  \node[Z]{\alpha}; & \zxZ{\beta}
\end{tikzcd}

\end{document}

答案1

不确定为什么\NewDocumentCommand认为是必要的。无论如何,您需要使用\NewExpandableDocumentCommand,因为 的内部工作原理tikz

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{cd}
%\usepackage{xparse} % only for LaTeX prior to 2020-10-01

\begin{document}

\tikzset{
  Z/.style={fill=green},
}

% Works
%\newcommand\zxZ[1]{|[Z]| #1}
% Works (but I'd prefer the above |[Z]|
%\newcommand\zxZ[1]{\node[Z]{#1};}
% Works
%\NewExpandableDocumentCommand{\zxZ}{m}{\node[Z]{#1};}
% Works
\NewExpandableDocumentCommand{\zxZ}{m}{|[Z]| #1}

\begin{tikzcd}
  \node[Z]{\alpha}; & \zxZ{\beta}
\end{tikzcd}

\end{document}

请注意,该功能\tikzstyle已被弃用好几年了。

相关内容