有人能告诉我以下是否是错误吗?MWE:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows}
\pgfarrowsdeclarecombine{onetwo}{onetwo}{triangle 45}{triangle 45}{open triangle 90}{open triangle 90}
\pgfarrowsdeclarecombine*{twothree}{twothree}{open triangle 90}{open triangle 90}{triangle 45}{triangle 45}
\pgfarrowsdeclarecombine*{onetwo three}{onetwo three}{onetwo}{onetwo}{triangle 45}{triangle 45}
\pgfarrowsdeclarecombine{one twothree}{one twothree}{triangle 45}{triangle 45}{twothree}{twothree}
\begin{document}
\begin{tikzpicture}
\draw[-onetwo] (0,3) -- (2,3);
\draw[-twothree] (0,2) -- (2,2);
\draw[-onetwo three] (0,1) -- (2,1);
\draw[-one twothree] (0,0) -- (2,0);
\end{tikzpicture}
\end{document}
第三和第四个组合虽然在结合律上相同,但有所不同。在第四个组合中,最左边的三角形和中间(空)三角形之间出现了间隙。我认为这个间隙不应该存在。
我认为问题出在第二种组合的定义上,twothree
具体来说,它的“左延伸”(参见手册第 74.2 节“左延伸和右延伸”)是错误的。
根据手册,\pgfarrowsdeclarecombine*
应使线条在内箭头尖端之前结束,在本例中为open triangle 90
。因此,左延伸应为内尖端的延伸。
据我所知,在 中pgfcorearrows.code.tex
,左扩展存储在 中\pgf@arrow@left@<name of arrow tip>
。因此,我在以上文档的末尾添加了以下代码:
\makeatletter
\texttt{\expandafter\meaning\csname pgf@arrow@left@open triangle 90\endcsname}\par
\texttt{\expandafter\meaning\csname pgf@arrow@left@triangle 45\endcsname}\par
\texttt{\expandafter\meaning\csname pgf@arrow@left@twothree\endcsname}\par
结果表明,第二条线与第三条线相同,即的左延伸部分twothree
为外尖的左延伸部分,即triangle 45
。
它看起来像一个真正的错误吗?如果是,以前有人遇到过/解决过它吗?