tikzpicture
일반적으로 나중에 사용하기 위해 상자에 저장하는 것이 가능합니다 . 실제로 이것은 tikzpicture
다른 것 안에 하나를 사용하는 데 권장되는 전략 중 하나입니다. 상자를 사용하면 중첩의 위험을 피할 수 있습니다 tikzpicture
.
tikzpicture
가 로 구성된 경우 이 작업을 수행할 수 있습니까 matrix of nodes
?
MNWE:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\newsavebox\mybox
\sbox\mybox{%
\begin{tikzpicture}
\matrix [matrix of nodes]
{
a & b \\
c & d \\
};
\end{tikzpicture}%
}
\usebox\mybox
\end{document}
오류:
! Undefined control sequence.
<argument> \pgf@matrix@last@nextcell@options
l.185 }
? h
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.
?
답변1
이유는 잘 모르겠지만 가끔 tikz
임시 상자에 저장해야 할 때가 있습니다.그 다음에보다 영구적인 방법으로 저장할 수 있습니다.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\newsavebox\mybox
\setbox0=\hbox{%
\begin{tikzpicture}
\matrix [matrix of nodes]
{
a & b \\
c & d \\
};
\end{tikzpicture}%
}
\sbox\mybox{\copy0}
here is \usebox\mybox
\end{document}
답변2
&
이것은 열 구분 기호로 사용되는 좋은 오래된 catcode 문제입니다 . 매크로 \sbox
는 TikZ가 앰퍼샌드를 검색하는 것을 불가능하게 만드는 인수로 상자의 내용을 읽습니다. 이 문제를 해결할 수 있는 방법은 여러 가지가 있습니다.
를 사용하면
ampersand replacement
TikZ 측에서 catcode를 변경할 필요가 없습니다.\documentclass{article} \usepackage{tikz} \usetikzlibrary{matrix} \begin{document} \newsavebox\mybox \sbox\mybox{% \begin{tikzpicture} \matrix [matrix of nodes,ampersand replacement=\&] { a \& b \\ c \& d \\ }; \end{tikzpicture}% } \usebox\mybox \end{document}
\setbox\mybox=\hbox{...}
대신 사용하십시오\sbox
. 상자 내용은 인수로 읽히지 않으며 모든 것이 정상입니다.\documentclass{article} \usepackage{tikz} \usetikzlibrary{matrix} \begin{document} \newsavebox\mybox \setbox\mybox=\hbox{% \begin{tikzpicture} \matrix [matrix of nodes] { a & b \\ c & d \\ }; \end{tikzpicture}% } \usebox\mybox \end{document}
기본적으로 2와 같은 이유이지만 LaTeX-y가 더 많습니다. 사용
lrbox
.\documentclass{article} \usepackage{tikz} \usetikzlibrary{matrix} \begin{document} \newsavebox\mybox \begin{lrbox}{\mybox} \begin{tikzpicture} \matrix [matrix of nodes] { a & b \\ c & d \\ }; \end{tikzpicture}% \end{lrbox} \usebox\mybox \end{document}
\sbox
전달된 토큰을 다시 스캔하도록 수정하세요 . 이것은 아마도 의 몇 가지 유효한 용도 중 하나일 것입니다\scantokens
.\documentclass{article} \usepackage{tikz} \usetikzlibrary{matrix} \makeatletter \long\def\sbox#1#2{\setbox#1\hbox{% \color@setgroup\scantokens{#2}\color@endgroup}} \makeatother \begin{document} \newsavebox\mybox \sbox\mybox{% \begin{tikzpicture} \matrix [matrix of nodes] { a & b \\ c & d \\ }; \end{tikzpicture}% } \usebox\mybox \end{document}