请考虑以下示例:
\documentclass{article}
\usepackage{pstricks-add}
\def\side{%
\psline(-2,2)(-1,2)
\psarc(0,2){1}{180}{0}
\psline(1,2)(2,2)
\psline(-1,1)(0,2)(1,1)
}
\begin{document}
\def\length{60}
\psset{unit=79pt}
\begin{pspicture}(-2,-2)(2.15,2.15)
\multido{\iA=0+90,\iB=-2+1}{4}{%
\psset{offset=12pt,nrot=:U}
\rput{\iA}(0,0){\side}
\pcline[linestyle=dotted]{|<*->|*}(\iB,2)(!\iB\space 1 add 2)
\ncput*{\length\,cm}
\pcline[linestyle=dotted]{|<*->|*}(!2 \iB\space 1 add)(2,\iB)
\ncput*{\length\,cm}
}
\end{pspicture}
\end{document}
可以看出,曲线没有闭合。我该怎么做呢(或者至少让它看起来是闭合的;我不需要填充内部,所以让它看起来闭合其实就足够了)?
注意:如果有人有比已经提供的解决方案“更简单”的解决方案,我会很高兴看到它。
答案1
由于您不想填充由线段包围的区域,那么这linecap=1
将有所帮助!请注意,linecap
影响每条线的末端而不是角落(不要将其与混淆linejoin
)。有关详细信息,请linejoin
参阅我的奖励答案。
\documentclass{article}
\usepackage{pstricks-add}
\def\side{%
\psline(-2,2)(-1,2)
\psarc(0,2){1}{180}{0}
\psline(1,2)(2,2)
\psline(-1,1)(0,2)(1,1)
}
\begin{document}
\def\length{60}
\psset{unit=79pt,linecap=1}
\begin{pspicture}(-2,-2)(2.15,2.15)
\multido{\iA=0+90,\iB=-2+1}{4}{%
\psset{offset=12pt,nrot=:U}
\rput{\iA}(0,0){\side}
\pcline[linestyle=dotted]{|<*->|*}(\iB,2)(!\iB\space 1 add 2)
\ncput*{\length\,cm}
\pcline[linestyle=dotted]{|<*->|*}(!2 \iB\space 1 add)(2,\iB)
\ncput*{\length\,cm}
}
\end{pspicture}
\end{document}
奖励答案
但是如果您想改变连接线的角,那么使用linejoin
。
答案2
您必须绘制一条闭合曲线。直线是一条开放的曲线,您可以用\pscustom
和来闭合它\closepath
。\pscustom
也可以包括\multido
构造。请参阅以下示例以了解不同的方法:
\documentclass[pstricks, border=3pt]{standalone}
\usepackage{multido}
\begin{document}
\SpecialCoor
\begin{pspicture}(10,2)
\psset{linewidth=10\pslinewidth}
\psline(0,0)(2,0)(2,1)(0,1)(0,0)
\rput(3,0){%
\pscustom{%
\psline(0,0)(2,0)(2,1)(0,1)(0,0)
\closepath
}%
}%
\rput(6.5,0.8){%
\psline(1;-45)(1;45)
\psline(1;45)(1;135)
\psline(1;135)(1;225)
\psline(1;225)(1;315)
}
\rput(9,0.8){%
\pscustom{%
\moveto(1;-45)
\multido{\i=45+90}{4}{%
\psline(1;\i)
}%
\closepath
}%
}%
\end{pspicture}
\end{document}
得出:
您不能使用\rput
inside of\pscustom
来定位线条(目前不知道原因)。所以您需要更改部分\multido
。以下是您的文档的一部分,已更改为具有紧密曲线(也许有更优雅的方式):
\documentclass{article}
\usepackage{pstricks-add}
\begin{document}
\def\length{60}
\psset{unit=79pt}
\begin{pspicture}(-2,-2)(2.15,2.15)
\psset{offset=12pt,nrot=:U}
\pscustom{%
\moveto(2,2)
\multido{\iA=-90+-90,\iB=0+-90}{4}{%
\psarc(2;\iB){1}{!\iB\space 90 add}{!\iB\space 90 sub}
\rlineto(1;\iA)}
\closepath
}
\end{pspicture}
\end{document}