tikz 节点规范中的条件

tikz 节点规范中的条件

我想指定 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

带有 Tiz 样式(用/.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可以做同样事情的自定义命令,但这真的是个人问题。

相关内容