我正在创建一个 tikz 样式,以对坐标进行一些复杂的线性变换,这些变换是根据变量计算的。为了给出一个想法,下面是样式声明现在的样子:
\tikzset{foo/.style={cm={\cosLgP,
\sinLgP * (-\sinEl),
\cosLa * \cosLg,
\sinLa * \cosEl - \cosLa * \sinLg * \sinEl,
(0,0)}}}
...其中\cosLgP
&co 是一些先前定义的宏(如果一切顺利的话,应该计算各种正弦和余弦)。
有一个错误,坐标变换似乎不正确。我该如何调试?具体来说,我该如何打印变换矩阵的(数字)内容foo
,看看它最终包含什么?
谢谢!
答案1
在里面foo/.style
添加/utils/exec={\show\cosLgP}
(注意开头的斜杠)作为最后一项。如果这些值是 dimen 寄存器,则改用\showthe
。
或者,show
您也可以将它们转储到宏中utils/exec
,然后检查它们的值
答案2
我回答最初的问题:如何查看 tikz 样式的内容?
您可以尝试.show code
处理程序(p.893,pgfmanual)来显示样式的定义,但在编译期间会中断。
在下面的文档中,我定义了新的处理程序.typeout code
,将样式的定义放入.log
文件中:
\documentclass[tikz]{standalone}
% handler to use \typeout instead of \show (based on code of '.show code' handler)
\pgfkeys{
/handlers/.typeout code/.code={%
\pgfkeysgetvalue{\pgfkeyscurrentpath/.@cmd}{\pgfkeysshower}%
\typeout{--- \pgfkeyscurrentpath\space---}%
\typeout{\meaning\pgfkeysshower}%
}
}
% application to your style
\tikzset{
foo/.style={cm={\cosLgP,
\sinLgP * (-\sinEl),
\cosLa * \cosLg,
\sinLa * \cosEl - \cosLa * \sinLg * \sinEl,
(0,0)}},
foo/.typeout code,
}
% application to an ".estyle":
\def\cosLgP{1} \def\sinLgP{0}
\def\cosEl{0.707} \def\sinEl{0.707}
\def\cosLa{.848} \def\sinLa{.529}
\def\cosLg{0} \def\sinLg{1}
\tikzset{
efoo/.estyle={cm={\cosLgP,
\sinLgP * (-\sinEl),
\cosLa * \cosLg,
\sinLa * \cosEl - \cosLa * \sinLg * \sinEl,
(0,0)}},
efoo/.typeout code,
}
\begin{document}
\end{document}
在.log
文件中:
--- /tikz/foo --- \long 宏:#1\pgfeov ->\pgfkeysalso {cm={\cosLgP,\sinLgP * (-\sinEl),\cosLa * \cosLg,\sinLa * \cosEl - \cosLa * \sinLg * \sinEl,(0,0)}} --- /tikz/efoo --- \长宏:#1\pgfeov ->\pgfkeysalso {cm={1, 0* (-0.707), .848* 0, .529* 0.707- .848* 1* 0.707, (0,0)}}