请考虑以下示例:
代码
% latex filename.tex
% dvips filename.dvi
% ps2pdf filename.ps
\documentclass{article}
\usepackage{pstricks}
\begin{document}
\begin{pspicture}(-3.9,-3.9)(3.8,0.15)
\pscustom[
fillstyle = solid,
fillcolor = lightgray
]{%
\psarc(0,0){3.53}{180}{360}
\psarc(-3.74,0){0.21}{0}{180}
\psarc(0,0){3.95}{180}{360}
\psarc(3.74,0){0.21}{0}{180}
}
\end{pspicture}
\end{document}
输出
问题
我如何使 PSTricks 仅填充封闭区域(如果删除,则不存在水平线\pscustom
)?
答案1
使用时pscustom
最好将起点和终点匹配在一起;事实上,您得到意外结果的原因是PSTricks
将第一个点和最后一个点连接在一起 - 在您的代码中,第一个点和最后一个点彼此相距甚远,因此出现了不必要的水平线。
我改变了一些psarc
片段的顺序,并将一些片段的方向从逆时针改为顺时针,以psarcn
保持所有片段都朝着相同的方向流动。
在调试时,我发现为不同的部分着色并使用箭头显示方向很有帮助:
一旦所有内容都匹配,再添加pscustom
回去就会得到预期的结果:
% arara: pdflatex: {shell: true}
% !arara: indent: {overwrite: yes}
\documentclass{standalone}
\usepackage[pdf]{pstricks}
\usepackage{pstricks-add}
\begin{document}
\begin{pspicture}(-4,-4)(4,1)
\pscustom[fillstyle=solid,fillcolor=lightgray]{%
\psarc[linecolor=blue]{->}(0,0){3.53}{180}{360}
\psarcn[linecolor=orange]{->}(3.74,0){0.21}{180}{0}
\psarcn[linecolor=green]{->}(0,0){3.95}{360}{180}
\psarcn[linecolor=red]{->}(-3.74,0){0.21}{180}{0}
}
\end{pspicture}
\end{document}
您会注意到我在代码中保留了颜色和箭头 - 当您对正在发生的事情满意时只需将它们删除。
正如 Werner 所指出的,在这种特殊情况下,您可能会使用获得相同的输出ncarcbox
,详细信息请参见第 68 页the documentation
。
PS:我也用过arara
工具来帮助shell escape
。
答案2
正如 Werner 已经写过的使用\ncarcbox
:
\documentclass[pstricks]{standalone}
\usepackage{pstricks-add}
\begin{document}
\begin{pspicture}(-4,-4)(4,1)
\pnodes(-3.5,0){A}(3.5,0){B}
\ncarcbox[nodesep=0.2,boxsize=0.2,linearc=0.2,arcangle=90,
fillstyle=solid,fillcolor=lightgray]{A}{B}
\end{pspicture}
\end{document}