PSTricks 和 \pscustom

PSTricks 和 \pscustom

请考虑以下示例:

代码

% 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}

相关内容