如何延长双线的内线?

如何延长双线的内线?

TikZ 内置的双线功能对内线和外线/背景线使用完全相同的长度,这很合理。但是,由于舍入误差或抗锯齿等原因,背景线在渲染过程中往往会在末端“渗出”。当然,“渗出”很小,但通常仍然很明显,使双线的错觉变得模糊。例如:

\documentclass[border=3pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
    \tikz\draw (0,0) edge[double equal sign distance,-implies] (.5,0);
\end{document}

其结果如下:

在此处输入图片描述

左侧有泄漏的黑线。(渲染到我的屏幕时(这与演示或以电子方式阅读文档有关)以及使用较低分辨率时,它通常会出现在两侧。)

我想要的只是将内线延长一点点,这样就可以消除伪影。如果我自己构造双线,我就可以做到这一点,如果我可以让它与箭头implies和配合得很好double equal sign distance,我想这也是一个可以接受的解决方案。(或者任何其他可以修复泄漏伪影的方法。)

是否有任何选项可用于将 ashorten <=-.1pt或类似内容插入内线样式?鉴于它是一种低级机制,如果没有重大黑客攻击,也许没有办法做到这一点?

答案1

内线由下面的宏绘制,在pgfcorepathusage.code.tex

\def\pgf@stroke@inner@line@if@needed{%
  \ifdim\pgfinnerlinewidth>0pt\relax%
    \let\pgf@temp@save=\pgf@strokecolor@global
    \pgfsys@beginscope%
    {%
      \pgfsys@setlinewidth{\pgfinnerlinewidth}%
      \pgfsetstrokecolor{\pgfinnerstrokecolor}%
      \pgfsyssoftpath@invokecurrentpath%
      \pgfsys@stroke%
    }%
    \pgfsys@endscope%
    \global\let\pgf@strokecolor@global=\pgf@temp@save
  \fi%
}

rect因此,一个简单的解决方法是使用 line-cap或绘制内线round

\documentclass[tikz,border=3pt]{standalone}
\usetikzlibrary{arrows}

\makeatletter
\def\pgf@stroke@inner@line@if@needed{%
  \ifdim\pgfinnerlinewidth>0pt\relax%
    \let\pgf@temp@save=\pgf@strokecolor@global
    \pgfsys@beginscope%
    {%
      \pgfsetrectcap%   <-- adding this line
      \pgfsys@setlinewidth{\pgfinnerlinewidth}%
      \pgfsetstrokecolor{\pgfinnerstrokecolor}%
      \pgfsyssoftpath@invokecurrentpath%
      \pgfsys@stroke%
    }%
    \pgfsys@endscope%
    \global\let\pgf@strokecolor@global=\pgf@temp@save
  \fi%
}

\begin{document}

    \tikz\draw (0,0) edge[double equal sign distance,double=red,-implies] (.5,0);

    \tikz\draw (0,0) edge[double equal sign distance,double=red,line cap=round] (.5 ,0);

    \tikz\draw (0,0) edge[double equal sign distance,double=red,line cap=rect] (.5 ,0);

\end{document}

请注意,当使用特定的线帽绘制外线时,这将产生有趣的结果。

为了解决这个问题,可以重新定义\pgfsetbuttcappgfsetroundcap\pgfsetrectcap使得 TiZ 会记住线帽的全局设置并为内线选择合适的线帽。

相关内容