我如何设计一个宏(如果可以使用\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
已被弃用好几年了。