编辑:

编辑:

我想使用命令 绘制尺寸线\draw[|<->|]...;。此外,我还有一些其他对象的线,需要说明其尺寸。但是,箭头选项的线|<->|与相同坐标处的垂直线相比略有偏移。有没有办法自动更正这个问题,而不是像我在示例中所做的那样手动更正?减去半线宽度仅适用于已知箭头方向的情况,并且只有在沿坐标系的情况下才容易。

平均能量损失

\documentclass[convert={density=1000}]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[gray] (0,0) -- (0,0.5);
\draw[gray] (1,0) -- (1,0.5);
\draw[|<->|] (0,0.125) -- (1,0.125);
\draw[|<->|] (0-\pgflinewidth/2,0.375) -- (1cm+\pgflinewidth/2,0.375);
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

编辑:

建议答案用途\pgfarrowsdeclare,似乎已被弃用,如这个问题。我将尝试使用当前命令来解决我的问题\pgfdeclarearrow。有了它,我可以简单地写

\pgfdeclarearrow{name=dim-dim,   means={>.|[sep=-0.25pt]},}

这是一个非常简短的解决方案,几乎可以满足我的要求。唯一的缺点是,我无法使用它\pgflinewidth来代替手动值。如果我尝试编译以下代码,-0.25pt则会导致错误:Missing \endcsname inserted.

\documentclass[]{article}
\usepackage{tikz}
\usetikzlibrary{arrows}
%\pgfdeclarearrow{name=dim-dim,   means={>.|[sep=-0.25pt]},}
\pgfdeclarearrow{name=dim-dim,   means={>.|[sep=-\pgflinewidth]},}
\begin{document}
\begin{tikzpicture}
\draw[gray] (0,0) -- (0,1);
\draw[gray] (1,0) -- (1,1);
\draw[dim-dim] (0,0.5) -- (1,0.5);
\end{tikzpicture}
\end{document}

有没有办法克服这个错误?

答案1

这是一种更正式的方法(抱歉,语言不当)(更多解释见下文)

\documentclass[tikz,margin=9]{standalone}
\usetikzlibrary{arrows.meta}
\begin{document}
    \begin{tikzpicture}
        \draw[gray] (0,0) -- (0,0.5);
        \draw[gray] (1,0) -- (1,0.5);
        \draw[{|[sep=0 -.5].<}-{[line width=0 3]>.|[sep=0 -1.5]}](0,0.375) -- (1,0.375);
        \draw[{|[sep=0 .5].<}-{>[sep=0 1].|[sep=0 -1.5]}](0,0.125) -- (1,0.125);
    \end{tikzpicture}
\end{document}

解释

箭头尖端经过精心布置,不会超出线段(或曲线)的末端,因此它永远不会与任何重要的东西重叠。每个箭头尖端都是这种情况(参见手册中的下图)

当然,它是|默认发生的,这就引出了你的问题。

我们可以通过添加正或负空格来解决这个问题。只有两个问题:在哪里?多少钱?

原来/pgf/arrow keys/有一个sep选项可以控制箭头尖端的间距。这很像我们\vspace{1ptplus1fil}在文档中添加的 或其他内容。因此,我们可以添加负空间,使尖端超出末端,就像 一样\vspace{-1pt}

但有多少呢?sep选项实际上接受三个参数。第二个参数是线宽因子也就是说,sep=0 2是正间距,等于线宽的两倍;sep=0 -.5是负间距,等于线宽的一半。后者才是我们想要的,如左上角所示。

这还没完。由于我们可以独立更改箭头的线宽,我们可以尝试使用/arrow keys/line width和的第二个参数/arrow keys/sep。您可以看到其他三个角也有一些变化。

一旦牵涉其中,事情就会变得疯狂double。但仍然可以使用第三个参数。

\begin{tikzpicture}[scale=2]
    \draw[double,gray] (0,0) -- (0,0.5);
    \draw[double,gray] (1,0) -- (1,0.5);
    \draw[double,{|[sep=0 -.5]<.}-{[line width=0 1].>[sep=0]|[sep=0 -.5]}](0,0.375) -- (1,0.375);
    \draw[double,{|[sep=0 -.5 2]<.}-{[line width=0 -1 2].>[sep=0 1 1]|[sep=0 .5 2]}](0,0.125) -- (1,0.125);
\end{tikzpicture}

答案2

风格是一种选择吗?

例如:

\documentclass[border=5pt, multi, tikz]{standalone}
\begin{document}
\begin{tikzpicture}
  [
  double trouble/.style={|<->|, shorten >=-.5\pgflinewidth, shorten <=-.5\pgflinewidth}
  ]
  \draw[gray] (0,-0.5) -- (0,0.5);
  \draw[gray] (1,-0.5) -- (1,0.5);
  \draw[|<->|] (0,0.125) -- (1,0.125);
  \draw[|<->|] (0-\pgflinewidth/2,0.375) -- (1cm+\pgflinewidth/2,0.375);
  \draw[double trouble] (0,-0.125) -- (1,-0.125);
\end{tikzpicture}
\end{document}

显示double trouble已正确对齐:

双重麻烦

当然,如果您希望这适用于所有箭头,您可以为整个图片设置shorten >和。shorten <

\begin{tikzpicture}
  [
    shorten >=-.5\pgflinewidth,
    shorten <=-.5\pgflinewidth,
  ]
  \draw[gray] (0,-0.5) -- (0,0.5);
  \draw[gray] (1,-0.5) -- (1,0.5);
  \draw[|<->|] (0,0.125) -- (1,0.125);
  \draw[|<->|] (0-\pgflinewidth/2,0.375) -- (1cm+\pgflinewidth/2,0.375);
  \draw[|<->|] (0,-0.125) -- (1,-0.125);
\end{tikzpicture}

生产

整个画面都陷入了麻烦之中

这当然表明手动修正现在已过度修正……

相关内容