我继续研究嵌套 tikzpicture 环境的使用(抱歉),并发现了下一个问题。我不确定,但这听起来像是“脆弱”命令的问题。也许,问题出在嵌套环境上,但我不这么认为,因为代码在很多情况下都能正常工作。这很奇怪,这$\mathbf{\Pi}$
不会带来任何问题,但却\textbf{textbf}
是灾难性的!。
在下一个代码中,我使用宏\place
在节点的帮助下放置一个对象(一些 tex 的代码)。我稍微简化了宏链,但保留了基本内容。
代码我使用 pgf 2.1 CVS
取消注释该行
\documentclass{scrartcl}
\usepackage{amsmath,tikz}
\makeatletter
\def\place{\pgfutil@ifnextchar[{\place@i}{\place@i[]}}%
\def\place@i[#1]#2(#3)#{\place@ii[#1]{#2}(#3)}%
\def\place@ii[#1]#2(#3)#4{%
\begin{tikzpicture}[overlay]
\path (0,0)--(#3);
\node[anchor=#1,rotate=#2] at (#3) {#4};
\end{tikzpicture}%
}%
\begin{document}
Baseline%
\begin{tikzpicture}
\draw[help lines] (0,-4) grid (5,1);
\place[west]{0}(1,-2){$ \frac{2}{3}$}
\place[west]{-30}(2,-3){$\mathbf{\Pi}$}
\end{tikzpicture}%
% uncomment the next line with \place to see the problem
\begin{tikzpicture}
%\place[west]{0}(4,0){\textbf{textbf}}
\end{tikzpicture}
% \noexpand resolves the problem
\begin{tikzpicture}
\place[west]{0}(2,0){\noexpand\textbf{textbf}}
\end{tikzpicture}
\end{document}
结果
但如果我不使用\noexpand
:
我遇到了什么样的问题?
答案1
Marco,谢谢你的答案链接马丁感谢 Martin 使用 pgfinterruptpicture 做出的解释
下一个代码似乎可以解决问题
\newbox\mybox
\makeatletter
\def\place{\pgfutil@ifnextchar[{\place@i}{\place@i[]}}%
\def\place@i[#1]#2(#3)#{\place@ii[#1]{#2}(#3)}%
\def\place@ii[#1]#2(#3)#4{%
%\setbox\mybox=\hbox{\pgfinterruptpicture #4\endpgfinterruptpicture}
\sbox\mybox{\pgfinterruptpicture#4\endpgfinterruptpicture}% from Martin Scharrer and egreg
\begin{tikzpicture}[overlay]
\path (0,0)--(#3);
\node[anchor=#1,rotate=#2] at (#3) {\box\mybox};
\end{tikzpicture}%
}%