![LaTeX Tikz:比较两个 \def 参数](https://linux22.com/image/409506/LaTeX%20Tikz%EF%BC%9A%E6%AF%94%E8%BE%83%E4%B8%A4%E4%B8%AA%20%5Cdef%20%E5%8F%82%E6%95%B0.png)
我正在编写一个宏定义,以技术制图风格绘制尺寸。我需要对两个参数进行不等式运算,才能知道哪个坐标更高,但控制台无法理解我用作\如果否则争论。
% (#1,#2): 起始坐标 % (#3,#4):结束坐标 % #5:身体垂直向上的距离 % #6:尺寸文字 \usetikzlibrary{计算} \def\DimensionTop(#1,#2)(#3,#4)[#5,#6]{ \ifthenelse{#2>#4} { % 如果点 (#1,#2) 高于 (#3,#4) \坐标(D1)位于($(#1,#2)+(0,#5)$); \坐标(D2)位于($(#3,#4)+(0,#2-#4)+(0,#5)$); } { % 如果点 (#3,#4) 高于 (#1,#2) \坐标(D1)位于($(#1,#2)+(0,#4-#2)+(0,#5)$); \坐标(D2)位于($(#3,#4)+(0,#5)$); } \绘制(#1,#2)--(D1)--++(0,0.2); \绘制(#3,#4)--(D2)--++(0,0.2); \draw[ , >=latex, thin ] (D1) -- (D2) node[ fill=white, midway ] {$\mathtt{#6}$}; }
该函数在主文档中的使用方式如下
\documentclass[border=2pt,convert={outext=.png}]{独立} \usepackage{tikz} \usetikzlibrary{模式} \usetikzlibrary{箭头} \开始{文档} \开始{tikzpicture} % 背景网格的自定义命令,忽略 \GuideCartesian(-2,-2)(8,8); \draw[ 非常粗 ] (0,4) -- (2,5); \DimensionTop(0,4)(2,5)[1,1.50]; \结束{tikzpicture} \结束{文档}
由于控制台无法理解该条件,因此它直接转到别的情况,当右边的点高于左边的点时,这种方法有效,如图所示。
表达这种情况的正确方法是什么?
答案1
您只需计算两个 y 坐标中的最大值。由于您使用的是calc
,因此您可以这样做
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[pics/dimension top/.style={code={
\tikzset{dimension top/.cd,#1}
\def\pv##1{\pgfkeysvalueof{/tikz/dimension top/##1}}%
\draw
let \p1=\pv{first},\p2=\pv{second},\n1={max(\y1,\y2)} in
(\x1,\y1) -- (\x1,\n1+0.2cm) (\x2,\y2) -- (\x2,\n1+0.2cm)
(\x1,\n1) -- node[above,midway]{\pv{text}} (\x2,\n1) ;}},
dimension top/.cd,first/.initial={(0,0)},second/.initial={(1,0)},
text/.initial=]
\draw (0,4) -- (2,5);
\pic{dimension top={first={(0,4)},second={(2,5)},text=1.5}};
\end{tikzpicture}
\end{document}