如何在 TikZ 中“锐化”箭头

如何在 TikZ 中“锐化”箭头

我正在尝试使用以下代码绘制一条带箭头的线。

\documentclass[tikz,margin=10pt]{standalone}
\usetikzlibrary{arrows.meta,decorations.markings}
\begin{document}
\begin{tikzpicture}
    \draw[very thick,
        postaction={decorate,
                    decoration={
                                markings,
                                mark=at position 1 with \arrow{Triangle}
                                }
                    }
        ] (0,0) -- (1,0);
\end{tikzpicture}
\end{document}

生成下图,箭头其实并不是三角形,而是从三角形箭头处伸出的一条线。

您将如何修改代码来获得漂亮的三角箭头(没有突出的线)?

在此处输入图片描述

答案1

让我将我的评论扩展为一个答案,因为我不知道您为什么要使用如此复杂的代码来绘制一个简单的箭头:

\draw[-Triangle] (0,0) -- (1,0);

在您的代码中, 的\arrow位置恰好位于其应在的位置。要查看此情况,请查看代码中的以下更改:

\begin{tikzpicture}
    \draw[very thick, 
        postaction={decorate, 
                    decoration={
                                markings,
                                mark=at position 1 with \arrow[red]{Triangle}
                                }
                    }
        ] (0,0) -- (1,0);
\end{tikzpicture}

这使:

在此处输入图片描述

好吧,如果你坚持你的方法,你需要画更短的线(正如 Alan Munn 的评论所指出的那样。例如:

\documentclass[tikz,margin=10pt]{standalone}
\usetikzlibrary{arrows.meta,decorations.markings}
\begin{document}
\begin{tikzpicture}
    \draw[very thick, shorten >=\pgflinewidth,
        postaction={decorate, 
                    decoration={
                                markings,
                                mark=at position 1 with \arrow{Triangle}
                                }
                    }
        ] (0,0) -- (1,0);
\end{tikzpicture}
\end{document}

这使:

在此处输入图片描述

笔记: \arrow始终定位在不会延长线的位置。在您的特定情况下,它被放置在线的末尾。由于它是一种装饰,它不会对线条长度产生任何影响(因此您应该将其画得更短)。在上面,MWE 建议了如何手动执行此操作,但根据您的评论,这似乎不是正确的解决方案,因为如果您选择不同的装饰定位,例如0.5,线条将显得更短。这可能会扰乱您的绘图。因此,正确的解决方案是不要使用装饰位置1,而是对于这样的位置使用一条简单的箭头线(如答案开头所示)。

附录: 另一种可能性是测试所需位置是否为1。如果不是,则使用您的装饰设计,如果是,则考虑上面的 MWE:

\documentclass[tikz,
               margin=3mm]{standalone}
\usetikzlibrary{arrows.meta, decorations.markings}

\begin{document}

\begin{tikzpicture}[
decor/.style = {very thick, 
        postaction={decorate, 
                    decoration={
                                markings,
                                mark=at position #1 with \arrow[red]{Triangle}
                                }
                    }% end of postaction
                },
decorif/.code = {\ifnum 1= #1 
                    \tikzset{decor=#1,shorten >=\pgflinewidth}
                 \else 
                    \tikzset{decor=#1}
                 \fi
                },
                ]
    \draw[decorif=1]    (0,1) -- (2,1);
    \draw[decorif=0.5]  (0,0) -- (2,0);
\end{tikzpicture}
\end{document}

在此处输入图片描述

红色箭头仅用于演示目的:)

相关内容