对自定义变量使用条件

对自定义变量使用条件

上个月我问过这个问题,关于如何根据文本文件中的数据个性化流程图。这个想法是能够根据文本文件中的数字调整箭头的宽度。现在我想更进一步,即:如果数据文件中的相应数字为零,则不绘制箭头。

我设法引入一个条件来测试我的数据是否大于零,如果我使用任意数字(例如\ifnum2>0),它就会起作用,但如果我使用自定义命令来获取数据(例如\ifnum\flowwidth{A2B}>0,参见下面的代码块),则不起作用

我尝试了几种不同的方法让它工作。这是基础代码,我开始对其进行修改(部分内容来自答案另一个问题我上个月问过):

\documentclass[tikz]{standalone}
\usepackage{readarray}
\usetikzlibrary{arrows,positioning}
\usepackage{filecontents}

\begin{filecontents*}{flow.txt}
A2B, 110$\pm$6, 1.5 mm
A2C, 0$\pm$0, 0 mm
A2D, 110$\pm$6, 0.4 mm
\end{filecontents*}

\begin{document}

% USE readarray  TO GET THE DATA INTO A \def
\readarraysepchar{;}
\readdef{flow.txt}\myflowdef

% USE listofitems TO DIGEST THE \def APPROPRIATELY
\setsepchar{;/,}
\ignoreemptyitems
\readlist*\myflowdata{\myflowdef}
\foreachitem\i\in\myflowdata[]{%
  \expandafter\edef\csname\myflowdata[\icnt,1]var\endcsname{\myflowdata[\icnt,2]}%
  \expandafter\edef\csname\myflowdata[\icnt,1]width\endcsname{\myflowdata[\icnt,3]}%
}

% For importing data
\newcommand{\flowvar}[1]{\csname#1var\endcsname}
\newcommand{\flowwidth}[1]{\csname#1width\endcsname}

\begin{tikzpicture}[BOX/.style   ={rectangle, draw, text centered},
                    ARROW/.style ={draw,-latex', line width = 0.5mm}]

\node [BOX] (a) {A};   
\node [BOX, right= of a] (c) {C};   
\node [BOX, above= of c] (b) {B};

\draw [draw,-stealth, line width = \flowwidth{A2B}] (a.north) |- (b.west);
\draw [draw,-stealth, line width = \flowwidth{A2C}] (a.east) -- (c.west);  

\end{tikzpicture}
\end{document}

我试图将宽度存储在中间变量中,而不是在 if 之后使用命令:

\def\myvar{\flowwidth{A2B}}
\ifnum\myvar>0%
    \draw [draw,-stealth, line width = \flowwidth{A2B}, color = red] (a.north) |- (b.west);
\fi

或者使用 \pgfmathsetmacro

\pgfmathsetmacro\myvar{\csname\flowwidth{A2B}\endcsname}
\ifnum\myvar>0%
    \draw [draw,-stealth, line width = \flowwidth{A2B}, color = red] (a.north) |- (b.west);
\fi

或者使用 \expandafter

\expandafter\ifnum\expandafter\flowwidth{A2B}>0%
    \draw [draw,-stealth, line width = \flowwidth{A2B}, color = red] (a.north) |- (b.west);
\fi

但这些方法毫无成效。我也尝试过尝试\csname\endcsname。我必须承认,我做出这些改变是相当随机的,并没有真正理解背后的编程原理。如果有人能就如何解决这个问题提出建议,或者如果有人知道一个好的资源/教程可以解释这种 LaTeX 编程,我会非常高兴。

答案1

的最终展开式\flowwidth{A2B}1.5mm,因此检验其是否为正应使用\ifdim

\ifdim\flowwidth{A2B}>0pt

(请记住在后面留一个空格或行尾,pt以避免后面内容不合时宜的扩展)。

相关内容