
Рассмотрим следующий пример.
Код
\documentclass{article}
\usepackage{pstricks-add}
\begin{document}
\begin{figure}
\psset{unit=0.05}
\begin{pspicture}(120,216)
\pnodes{P}(0,0)(0,120)(186,120)(216,120)(216,0)(186,0)(186,30)(186,90)
\pspolygon(P0)(P1)(P3)(P4)
\pcline[offset=12pt]{|<->|}(P1)(P3)
\ncput*[nrot=:U]{216}
\pcline[offset=12pt]{|<->|}(P3)(P4)
\ncput*[nrot=:U]{120}
\pspolygon[linestyle=none,fillstyle=vlines](P2)(P3)(P4)(P5)
\pswedge[linestyle=none,fillstyle=solid,fillcolor=white](P6){30}{270}{90}
\pswedge[linestyle=none,fillstyle=solid,fillcolor=white](P7){30}{270}{90}
\psarc(P6){30}{270}{90}
\psarc(P7){30}{270}{90}
\psdot(P6)
\psdot(P7)
\end{pspicture}
\end{figure}
\end{document}
Выход
Вопрос
Код выше, похоже, является неправильным способом создания фигуры. Я думаю, \pscustom
это правильный путь, но я не могу понять, как его использовать; как мне создать фигуру «лучшим» способом с помощью PSTricks? (Я бы очень хотел увидеть, как это делается, а не просто получить комментарий об использовании того или иного.)
решение1
Две рамки и две дуги или \pscustom
:
\documentclass{article}
\usepackage{pstricks-add}
\begin{document}
\psset{unit=1pt}
\begin{pspicture}(240,140)
\psframe[dimen=middle](216,120)
\psframe[fillstyle=vlines,linestyle=none](186,0)(216,120)
\psarc[fillstyle=solid,fillcolor=white](186,30){30}{-90}{90}
\psarc[fillstyle=solid,fillcolor=white](186,90){30}{-90}{90}
\psdots(186,30)(186,90)
\pcline[offset=12pt]{|<->|}(0,120)(216,120) \ncput*{216}
\pcline[offset=12pt]{|<->|}(216,120)(216,0) \ncput*[nrot=:U]{120}
\end{pspicture}
\begin{pspicture}(240,140)
\psframe[dimen=middle](216,120)
\pscustom[fillstyle=vlines,hatchcolor=red]{%
\psarc(186,30){30}{-90}{90}
\psarc(186,90){30}{-90}{90}
\psline(186,120)(216,120)(216,0)
}
\psdots(186,30)(186,90)
\pcline[offset=12pt]{|<->|}(0,120)(216,120) \ncput*{216}
\pcline[offset=12pt]{|<->|}(216,120)(216,0) \ncput*[nrot=:U]{120}
\end{pspicture}
\end{document}
Так как \psframe
рисует замкнутый контур (требуется для правильного отсечения), его также можно добавить в качестве последнего компонента, \pscustom
если используется функция отсечения:
\documentclass{article}
\usepackage{pstricks-add}% http://tug.org/PSTricks/main.cgi/
\begin{document}
\begin{figure}
\psset{unit=1pt}
\begin{pspicture}(240,140)
\psclip{\psset{linestyle=solid}
\pscustom{
\psarc(186,30){30}{-90}{90}
\psarc(186,90){30}{-90}{90}
\psframe[dimen=middle](216,120)
}
}
\psframe[fillstyle=vlines,linestyle=none](186,0)(216,120)
\endpsclip
\psdots(186,30)(186,90)
\pcline[offset=12pt]{|<->|}(0,120)(216,120) \ncput*{216}% Top dimension
\pcline[offset=12pt]{|<->|}(216,120)(216,0) \ncput*[nrot=:U]{120}% Right dimension
\end{pspicture}
\end{figure}
\end{document}
Это также работает из-за структуры и способа \psframe
рисования (против часовой стрелки от середины слева).
решение2
Я пытаюсь улучшить существующие ответы.
- Спецификатор стрелки
|<->|
следует изменить на ,|<*->|*
чтобы|
кончики стрелок были правильно выровнены. - Лучше передать
dimen=middle
его глобально\pscustom
, чем локально указывать его для каждой команды, которая имеетdimen=outer
значение по умолчанию. Так как обрезанная область рисуется после обводки контура клиппера, в общем случае необходимо снова обвести контур клиппера после обрезки.
Если вы хотите понять, что я имею в виду, я добавил
hatchcolor=red,hatchsep=1pt
к вырезке\psframe
в редактировании Вернера. Первоначально настройка Вернера былаhatchcolor=black
такова, что это было незаметно, но теперь, с изменением цвета, «дефект» визуально очевиден, как показано ниже.Вот почему после стрижки необходимо провести повторную шлифовку.
Следует избегать использования
unit=1pt
, поскольку навигационная сетка становится беспорядочной.
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node}
\def\Path[#1]{%
\pscustom[dimen=middle,#1]{
\psarc(186,30){30}{-90}{90}
\psarc(186,90){30}{-90}{90}
\psframe(216,120)
}\ignorespaces
}
\begin{document}
\psset{unit=1pt,linewidth=3pt}
\begin{pspicture}(240,140)
\psclip{\Path[linestyle=none]}
\psframe[fillstyle=vlines,hatchcolor=red,hatchsep=1pt,linestyle=none](186,0)(216,120)
\endpsclip
\Path[]
\psdots(186,30)(186,90)
\pcline[offset=12pt]{|<*->|*}(0,120)(216,120) \ncput*{216}% Top dimension
\pcline[offset=12pt]{|<*->|*}(216,120)(216,0) \ncput*[nrot=:U]{120}% Right dimension
\end{pspicture}
\end{document}