TikZ 零宽度线与虚线

TikZ 零宽度线与虚线

绘制虚线时,TikZ 似乎会插入一条零宽度线,该线在某些(例如 Acrobat、Sumatra)PDF 查看器上可见,但并非所有(例如 Evince、Chromium 浏览器)PDF 查看器上可见。

PDF 1.7 规范,第 8.4.3.2 节:

线宽 0 表示在设备分辨率下可以呈现的最细线:1 个设备像素宽。但是,某些设备无法再现 1 个像素的线,而在高分辨率设备上,它们几乎不可见。由于呈现此类零宽度线的结果与设备相关,因此不应使用它们。

一个几乎最小的例子:

% Created by tikzDevice version 0.7.3 on 2014-11-02 08:56:28
% !TEX encoding = UTF-8 Unicode
\documentclass{article}
\usepackage{tikz}
\usepackage[active,tightpage,psfixbb]{preview}
\PreviewEnvironment{pgfpicture}
\setlength\PreviewBorder{0pt}

\begin{document}
  \begin{tikzpicture}[x=1pt,y=1pt]
    \definecolor[named]{drawColor}{rgb}{0.00,0.00,0.00}
    \definecolor[named]{fillColor}{rgb}{0.00,0.00,0.00}

    \path[draw=drawColor,line width= 0.6pt,dash pattern=on 1pt off 3pt,
          line join=round,fill=fillColor]
      ( 21.13, 19.75) -- (132.49,132.50);
  \end{tikzpicture}
\end{document}

以下是在 Acrobat XI pro 中看到的输出(打印屏幕,导出为 PNG 看起来更糟糕):

Crobat 屏幕截图

这是一个已知问题吗?该命令是否缺少某些选项\path

参考:原始问题用于tikzDeviceR 包。

或许相关:TikZ填充零宽度边框

答案1

绘画填充导致问题,只有绘图工作按预期进行:

\documentclass{article}
\usepackage{tikz}
\usepackage[active,tightpage,psfixbb]{preview}
\PreviewEnvironment{pgfpicture}
\setlength\PreviewBorder{0pt}

\begin{document}
  \begin{tikzpicture}[x=1pt,y=1pt]
    \definecolor[named]{drawColor}{gray}{0}
    \definecolor[named]{fillColor}{rgb}{0,0,0}

    \path[
      draw=drawColor,
      line width= 0.6pt,
      dash pattern=on 1pt off 3pt,
      % line join=round,
      line cap=round,
      % fill=fillColor,
    ]
      ( 21.13, 19.75) -- (132.49,132.50);
  \end{tikzpicture}
\end{document}

评论:

  • 用直线,line join没有太多意义,因此我将其改为line cap
  • 0比 短三个字节0.00

结果

给出填充颜色后,还会对路径应用填充操作,如三角形的非退化情况所示。该示例还显示了可以line join使用并达到预期效果:

\documentclass{article}
\usepackage{tikz}
\usepackage[active,tightpage,psfixbb]{preview}
\PreviewEnvironment{pgfpicture}
\setlength\PreviewBorder{0pt}

\begin{document}
  \begin{tikzpicture}[x=1pt,y=1pt]
    \definecolor[named]{drawColor}{gray}{0}
    \definecolor[named]{fillColor}{rgb}{0,0,0}

    \path[
      draw=drawColor,
      line width= 0.6pt,
      dash pattern=on 1pt off 3pt,
      line join=round,
      line cap=round,
      fill=red,
    ]
      (20, 20) -- (60, 60) -- (60, 20) -- cycle;
  \end{tikzpicture}
\end{document}

结果三角形

相关内容