上个月我问过这个问题,关于如何根据文本文件中的数据个性化流程图。这个想法是能够根据文本文件中的数字调整箭头的宽度。现在我想更进一步,即:如果数据文件中的相应数字为零,则不绘制箭头。
我设法引入一个条件来测试我的数据是否大于零,如果我使用任意数字(例如\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
以避免后面内容不合时宜的扩展)。