为什么当 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}
会导致我的机器出现奇怪的结果,所以我将其注释掉。这里人们了解到不应该使用这个选项,因此放弃它可能是一个好主意。