我正在尝试编写一个环境,用户应该能够在环境中插入一些命令(通过在环境内定义新命令很容易),但命令的输出只能插入在最后。
我的例子:
\begin{myEnv}
lorem ipsum
\newCommand{1}{2}
\end{myEnv}
的定义myEnv
如下:
\newenvironment{myEnv}%
{%
\begin{pNiceMatrix}%
}%
{%
\end{pNiceMatrix}%
\begin{tikzpicture}%
<insert the code generated by "newCommand" here>
\end{tikzpicture}%
}
有什么建议可以实现这样的目标吗?(我还不知道)
(解释一下这里不起作用,因为人们应该能够\newCommand
多次使用插入相应的代码多次)
编辑:我现在的想法是使用 pgf 键做一些事情,如下所示
\documentclass[10pt, a4paper]{article}
\usepackage{nicematrix}
\usepackage{tikz}
\begin{document}
\begin{align*}
\pgfkeys{/drawing/.code={}}
\begin{bNiceMatrix}[name=mymatrix]
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9 \\
\pgfkeys{/drawing/.add={\draw (1,1) -- (2,2);}{}}
\end{bNiceMatrix}
\begin{tikzpicture}[remember picture,overlay]
\pgfkeys{/drawing}
\draw (1,2) -- (2,2);
\end{tikzpicture}
\end{align*}
\end{document}
但 中包含的代码drawing
未在 上执行\pgfkeys{/drawing}
。是我做错了什么还是这个想法行不通?
答案1
由于您只能使用 3.6 版nicematrix
(请参阅这篇先前的文章),我可以给你一个解决方案特别指定使用 的命令定义\MyCodeAfter
来执行 3.6 版的工作nicematrix
。
\documentclass[10pt, a4paper]{article}
\usepackage{nicematrix} % version 3.6 !
\usepackage{tikz}
\ExplSyntaxOn
\NewDocumentCommand \MyCodeAfter { m }
{ \tl_gput_right:Nn \g__nm_code_after_tl { #1 } }
\ExplSyntaxOff
\begin{document}
$\begin{pNiceMatrix}
1 & 2 & 3 & 4 \\
5 & 6 & 7 & 8 \\
9 & 0 & 1 & 2 \\
\end{pNiceMatrix}
%
\begin{pNiceMatrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\MyCodeAfter{\tikz \draw (2-2) circle (2mm) ;}
\end{pNiceMatrix}$
\end{document}
然而,这不符合 LaTeX3 的精神,因为它使用了私有内部\g__nm_code_after_tl
。除了它本身之外,不应使用这样的内部nicematrix
。此外,在 的较新版本中nicematrix
,此内部已重命名\g__nicematrix_code_after_tl
。前缀_nicematrix_
已注册到 LaTeX3 团队。