我想使用命令 绘制尺寸线\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}
生产
这当然表明手动修正现在已过度修正……