我正在尝试编写一个新环境,该环境采用矩阵并将其绘制为 tikz 中的节点矩阵。这是一个最小的例子:
\documentclass[a4aper,pagesize]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usetikzlibrary{matrix}
\newenvironment{diagram}{
\begin{tikzpicture}
\matrix (m) [matrix of math nodes]
}{
\end{tikzpicture}
}
\begin{document}
\begin{diagram}
{
A & B & C \\
D & E & F \\
};
\end{diagram}
\end{document}
不过,我希望能够像编写表格一样编写图表环境,并忽略{ ...};
环境内部的使用。
我曾尝试使用\begingroup ... \endgroup;
,但我认为 tikz 确实需要花括号,而且我不知道如何将它们放在新环境定义中而不弄乱我的语法。
我想另一种选择是使用\newcommand
,但这样我就必须使用&符号替换字符,而这也不是我想要的。
答案1
您可以抓住环境主体但安排&
有正确的 catcode。
\documentclass[a4aper,pagesize]{scrartcl}
%\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usetikzlibrary{matrix}
\NewDocumentEnvironment{diagram}{b}{%
\begin{tikzpicture}%
\matrix (m) [matrix of math nodes]{#1};%
\end{tikzpicture}%
}{}
\AddToHook{env/diagram/begin}{\catcode`\&\active}
\begin{document}
\begin{diagram}
AA & B & C \\
D & E & F \\
\end{diagram}
\end{document}
以上内容使用当前版本的 LaTeX,如果您有旧版 LaTeX,也可以在软件包中使用类似的功能。这是使用 Overleaf texlive 2017 图像测试的
\documentclass[a4aper,pagesize]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usepackage{environ}
\usepackage{etoolbox}
\NewEnviron{diagram}{%
\begin{tikzpicture}%
\matrix (m) [matrix of math nodes]{\BODY};%
\end{tikzpicture}%
}
\AtBeginEnvironment{diagram}{\catcode`\&\active}
\begin{document}
\begin{diagram}
AA & B & C \\
D & E & F \\
\end{diagram}
\end{document}