避免透明度

避免透明度

在尝试使用 pgfplots 创建绘图时,我注意到由创建的输出ghostscript

gs -o main_opt.pdf -sDEVICE=pdfwrite main.pdf

优化 PDF(尺寸缩小至约 50%)与原始 PDF 不同。在图例中,绘图标记的边框从重置solid为相应的线条样式。

破碎的情节痕迹

我的调查提示我注意透明度和后记的问题。不幸的是,我认为透明度在axis line on top样式以避免轴、刻度和刻度标签的双重绘制。

transparent这里可能存在什么确切的问题?为什么当我附加到tick style(请参阅下面的 MWE)时,情节标记会中断?

是否还有其他不带透明度的解决方案,如“dontdraw”/“draw”开关,类似于“transparent”/“opaque”?


下面的示例不包含axis line on top样式但确实重现了问题:

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=1.13}

\begin{document}

\begin{tikzpicture}
  \begin{axis}[
    tick style=transparent,
    legend entries={1,2,3,4},
    xmin=0,xmax=1,ymin=0,ymax=1
    ]

    \addplot+[thick,solid,             mark options=solid,mark=*] coordinates {(0,0) (0.5,0.2) (1,1)};
    \addplot+[thick,densely dashed,    mark options=solid,mark=square*] coordinates {(0,0) (0.5,0.4) (1,1)};
    \addplot+[thick,densely dotted,    mark options=solid,mark=triangle*] coordinates {(0,0) (0.5,0.6) (1,1)};
    \addplot+[thick,densely dashdotted,mark options=solid,mark=diamond*] coordinates {(0,0) (0.5,0.8) (1,1)};

  \end{axis}
\end{tikzpicture}

\end{document}

更新:感谢@cfr,我可以重写样式axis line on top以满足我的需求。我禁用了处理,ticklabel style因为我不需要它,而重新启用它ticklabel style=draw实际上会在它们周围绘制方框。

\makeatletter \newcommand{\pgfplotsdrawaxis}{\pgfplots@draw@axis} \makeatother
\pgfplotsset{axis line on top/.style={
    %% before
    %axis line style=transparent,
    %ticklabel style=transparent,
    %tick style=transparent,
    %% now
    axis line style={draw=none},
    tick style={draw=none},
    axis on top=false,

    after end axis/.append code={
      \pgfplotsset{
        %% before
        %axis line style=opaque,
        %ticklabel style=opaque,
        %tick style=opaque,
        %% now
        axis line style=draw,
        tick style=draw,

        grid=none}
      \pgfplotsdrawaxis}
  }
}

相关内容