latex 环境编写生成 tikz 代码但稍后插入 - 也许使用 tikz 键

latex 环境编写生成 tikz 代码但稍后插入 - 也许使用 tikz 键

我正在尝试编写一个环境,用户应该能够在环境中插入一些命令(通过在环境内定义新命令很容易),但命令的输出只能插入在最后。

我的例子:

\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 团队。

相关内容