如果我使用(例如) pgfplots 来遮蔽某个区域,则\addplot[shade, top color=cyan] fill between ...
阴影区域的边界周围会有一条非常细的描边。
如何避免使用 pgfplots 在阴影区域边界周围绘制任何笔触fill between
?
在较暗的一侧,描边几乎难以察觉,但在较亮的一侧,当使用 mupdf 1.22.1、evince 43.0 和 firefox 115 进行栅格化时,描边就会显现出来。
使用检查由 poppler 23.05.0 生成的 SVG 文件pdftocairo -svg
会发现一条指向文件末尾的路径,如果将该路径注释掉或者调整为fill:none
或fill-opacity:0
,边界描边就会消失:
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="..."/>
我认为检查 LaTeX 的 PDF 或 DVI 输出会发现类似的情况,但它们不太适合人工检查。无论如何,我不确定如何返回找到 pgfplots 生成此笔画的位置。
如果我改用
\addplot[fill=cyan] fill between ...
,边界笔划就会消失。如果我使用 ghostscript 10.01.2 栅格化为 png
gs -dNOPAUSE -dBATCH -dSAFER -sDEVICE=png16m -r300 -sOutputFile=pgfplotsshadebetween.png pgfplotsshadebetween.pdf
-r600
或者使用像或 这样的更高分辨率-r2400
,边界笔划就消失了。如果我使用 poppler 23.05.0 将其栅格化为 png
pdftocairo -png
,边界描边就会消失。
但这些要么改变情节,要么依赖于特定的光栅化器,而这些光栅化器不是通常用于在屏幕上读取 PDF 文档的光栅化器。
最小工作示例:
\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{tikz}
\usepgfplotslibrary{fillbetween}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot[name path=rho, domain=0:1, opacity=0] {exp(-x)};
\addplot[name path=zero, domain=0:1, opacity=0] {0};
\addplot[shade, top color=cyan] fill between[of=rho and zero];
\end{axis}
\end{tikzpicture}
\end{document}
来自 mupdf 1.22.1 的屏幕截图(因为我能想到的常规光栅文件输出方法都没有显示笔划):
答案1
我没有对此进行广泛的测试,但我认为出现此描边的原因是一个渲染问题,该问题会随着缩放而变得或多或少可见。我检查了从您的代码生成的 PDF,似乎该区域的路径首先被填充为黑色,然后渐变被剪裁以适合其中的内容。
通过fill=none
向相关命令添加选项\addplot
,细笔画应该消失,并且无论缩放或输出为不同格式它都不应该是可见的。
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{fillbetween}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot[name path=rho, domain=0:1, opacity=0] {exp(-x)};
\addplot[name path=zero, domain=0:1, opacity=0] {0};
\addplot[fill=none, shade, top color=cyan]
fill between[of=rho and zero];
\end{axis}
\end{tikzpicture}
\end{document}