在保存框中使用 TikZ 矩阵:由于“&”而不起作用

在保存框中使用 TikZ 矩阵:由于“&”而不起作用

使用 TikZmatrix作为嵌套的tikzpicture,我预先定义了前者并将其存储在 中savebox
但是,当我添加第二列时,编译失败。这似乎是由于&(请参阅下面的 MWE)。日志特别指出:!软件包 pgf 错误:单个 & 符号与错误的 catcode 一起使用。

问题:matrix如何定义具有多列的TikZ savebox


\documentclass{article}
    \usepackage{tikz}

    \newsavebox{\testsbox}
    \savebox{\testsbox}{
        \begin{tikzpicture} [borders/.style={draw, help lines}]
            \matrix[borders]{
                \node [borders] {11};
%           &
%               \node [borders] {12};
            \\
            };
        \end{tikzpicture}
    }

\begin{document}
    This example stops working as soon as you add a second column (i.e. uncomment lines 9 and 10).
    \begin{tikzpicture}
        \node {\usebox{\testsbox}};
    \end{tikzpicture}
\end{document}

答案1

TikZ 将 的类别代码更改为&活动字符以处理矩阵。但tikzpicture被用作 的参数\savebox。当 TeX 解析参数时,文本将使用当前类别代码设置进行标记。然后,当 TikZ 更改类别代码时,它不会产生任何影响,因为&已经被标记化。

LaTeX 提供环境lrbox作为命令\savebox或 的替代\sbox。在环境形式中,内容不会被读取为参数,并且类别更改有效:

\documentclass{article}
\usepackage{tikz}

\newsavebox{\testsbox}
\begin{lrbox}{\testsbox}
    \begin{tikzpicture} [borders/.style={draw, help lines}]
        \matrix[borders]{
            \node [borders] {11};
        &
            \node [borders] {12};
        \\
        };
    \end{tikzpicture}
\end{lrbox}

\begin{document}
    \begin{tikzpicture}
        \node {\usebox{\testsbox}};
    \end{tikzpicture}
\end{document}

结果

环境还会删除与/lrbox相反的主体开始和结束处的空格。\savebox\sbox

答案2

使用ampersand replacement来替换&任意命令(大多数人选择\&)。

\documentclass{article}
    \usepackage{tikz}

    \newsavebox{\testsbox}
    \savebox{\testsbox}{%
        \begin{tikzpicture} [borders/.style={draw, help lines}]
            \matrix[borders,ampersand replacement=\&]{
                \node [borders] {11};
            \&
                \node [borders] {12};
            \\
            };
        \end{tikzpicture}%
    }

\begin{document}
    This example stops working as soon as you add a second column (i.e. uncomment lines 9 and 10).
    \begin{tikzpicture}
        \node {\usebox{\testsbox}};
    \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容