我想指定 tikz 节点的自定义层次结构,在其中进行一些与文本深度、文本宽度、文本高度等相关的几何计算。
在编写自定义命令来自动执行其中一些计算的过程中,我最终想要使用 TeX 条件与 tikz 代码混合使用。我在另一个问题中看到 \pgfextra{} 可用于此。然而,这似乎只在 tikzpicture 环境级别有效。
我想要做的一个最简单的例子如下:
\documentclass[class=minimal, border=0pt]{standalone}
\usepackage{tikz}
\newif\ifDebug
%\Debugtrue
\Debugfalse
\newcommand\MyNode{
\node[anchor=north west,
minimum width=5cm,
minimum height=5cm,
fill=green,
\pgfextra{\ifDebug opacity=0.2,\fi}
] at (current page.north west) {}}
\begin{document}
\begin{tikzpicture}
\MyNode{};
\end{tikzpicture}
\end{document}
包含 \pgfextra 的行给我带来了麻烦。我应该怎么做才能有条件地将参数更改为 \node?
谢谢!
答案1
欢迎来到 TeX.SE!请尽量避免所有pgfextra
问题。您可以使用 pgfkeys 实现几乎所有功能,也可以在这里实现。
\documentclass[class=minimal, border=0pt]{standalone}
\usepackage{tikz}
\newif\ifDebug
%\Debugtrue
\Debugfalse
\tikzset{Debug/.code={\ifDebug\pgfkeysalso{opacity=0.2}\fi}}
\newcommand\MyNode{
\node[anchor=north west,
minimum width=5cm,
minimum height=5cm,
fill=green,
Debug,
] at (current page.north west) {}}
\begin{document}
\begin{tikzpicture}
\Debugtrue
\MyNode{};
\end{tikzpicture}
\end{document}
如果我注释掉\Debugtrue
,我就会得到。
答案2
带有 Ti钾z 样式(用/.code
处理程序实现)这相当简单:
\documentclass[class=minimal, border=0pt]{standalone}
\usepackage{tikz}
\newif\ifDebug
\Debugtrue
%\Debugfalse
\tikzset{
my node/.code={
\tikzset{
anchor=north west,
minimum width=5cm,
minimum height=5cm,
fill=green,
}
\ifDebug
\tikzset{opacity=0.2}
\fi
}
}
\begin{document}
\begin{tikzpicture}
\node[my node]{};
\Debugfalse
\node[my node] at (6,0){};
\end{tikzpicture}
\end{document}
正如 marmot 在他的回答一般情况下你应该远离它\pgfextra
。我个人的偏好也是远离style
可以做同样事情的自定义命令,但这真的是个人问题。