为什么当 if-else 检测到给定的参数为空时无法正常工作?

为什么当 if-else 检测到给定的参数为空时无法正常工作?

为什么当 if-else 检测到给定的参数为空时无法正常工作?

#1下面是我的代码。我想根据它是否为空来更改操作参数。如果#1不为空,则代码按预期工作。但是,如果#1为空(例如,在一行的情况下)\foobar{}{Child3},我的代码会在 if 的 true 部分和 false 部分处理代码。if 无法正常工作。结果导致第二个节点的两帧像附图中那样叠加。

为什么?该如何解决这个问题?

\documentclass{article}
\usepackage[dvipdfmx]{graphicx} % require to color.
\usepackage{tikz}
\usetikzlibrary{trees, positioning}
\begin{document}

\begin{figure}[t]
  \newcommand{\foobar}[2]{
    \if\relax\detokenize{#1}\relax
    node(#2){Empty!!!!!}%<EMPTY>%
    \else
    node(#2){#1}%<NON EMPTY>%
    \fi
  }
  \begin{tikzpicture}[every node/.style={draw=black, thick, anchor=west}]
    \node {Root}
        child{\foobar{}{Child3}
        % child{\foobar{child3}{Child3} % no problem, insted above line.
            child{\foobar{child5}{child5}}
    }; % means end of drawing
  \end{tikzpicture}
\end{figure}

\end{document}

答案1

您的代码在我的计算机上会产生错误。您不能\if在路径中任意插入 s,这可能会使解析器感到困惑。但是,由于\if仅涉及节点内容,因此您可以执行例如

\documentclass{article}
%\usepackage[dvipdfmx]{graphicx} % require to color.
\usepackage{tikz}
\usetikzlibrary{trees, positioning}
\begin{document}

\begin{figure}[t]
  \newcommand{\foobar}[2]{
    node(#2){\if\relax\detokenize{#1}\relax
     Empty!!!!!
    \else
    #1
    \fi}%<EMPTY>%
  }


  \begin{tikzpicture}[every node/.style={draw=black, thick, anchor=west}]
  \node {Roo[![enter image description here][1]][1]t}
    child {\foobar{}{Child3}
      child {\foobar{child5}{child5}}
    };
   \end{tikzpicture}    
\end{figure}

\end{document}

在此处输入图片描述

但是,保留\usepackage[dvipdfmx]{graphicx}会导致我的机器出现奇怪的结果,所以我将其注释掉。这里人们了解到不应该使用这个选项,因此放弃它可能是一个好主意。

相关内容