LaTeX Tikz:比较两个 \def 参数

LaTeX Tikz:比较两个 \def 参数

我正在编写一个宏定义,以技术制图风格绘制尺寸。我需要对两个参数进行不等式运算,才能知道哪个坐标更高,但控制台无法理解我用作\如果否则争论。

% (#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}

在此处输入图片描述

相关内容