动机
我有一个文档,里面画了虚线。最终,我想将它用于需要以虚线方式切割线条的激光切割项目。
在蒂克兹,我用特殊的样式定义路径(直线、圆弧等):
在序言中:
\tikzset{LaserCutterOutlineCut/.style={dash pattern=on 20pt off 1 pt}}%
\newcommand*{\LaserCutterLineWidth}{0.04cm}
在图中(假设(x1,y1)
和(x2,y2)
点如上定义):
\draw[style=LaserCutterOutlineCut,line width=\LaserCutterLineWidth] (x1,y1) rectangle (x2,y2);
问题
当我运行pdflatexmk
TexShop 时,它会创建一个看起来很棒的 PDF。当我在 Adobe Illustrator 中导入 PDF 时,路径是一条带有适当虚线的单一路径。但是,当我将其导出为激光切割机可以使用的其他格式时,激光切割机将其视为一条单一的实线路径 - 虚线元数据被剥离。
我的问题
有没有办法强制蒂克兹根据指定的虚线样式将给定的虚线路径渲染为一系列路径,而不是将其渲染为单条路径?
如果不存在,我可以想到一个解决方法:可以编写一个或多个包装函数并重新定义原始函数,以便每当绘制rectangle
或arc
或circle
(ETC.) 以虚线样式绘制,它会调用包装函数。然后包装函数会在 for 循环中迭代,并绘制一系列路径。不幸的是,这所需的语法超出了我目前的理解的几个步骤。
答案1
我不知道是否存在虚线装饰,但border
带有虚线装饰的angle=0
行为会像直线段一样。
\documentclass[tikz, border=1cm]{standalone}
\usetikzlibrary {decorations.pathreplacing}
\tikzset{LaserCutterOutlineCut/.style={decoration={border, angle=0, amplitude=20pt, segment length=21pt}, decorate, line width=0.04cm}}
\begin{document}
\begin{tikzpicture}
\draw[LaserCutterOutlineCut] (0,0) rectangle (3,2);
\end{tikzpicture}
\end{document}
为了避免过度调整,可以使用后装饰和分段矩形:
\documentclass[tikz, border=1cm]{standalone}
\usetikzlibrary {decorations.pathreplacing, decorations.pathmorphing}
\tikzset{LaserCutterOutlineCut/.style={
decoration={border, angle=0, amplitude=20pt, segment length=21pt, post length=14pt, post=lineto},
line width=0.04cm,
}}
\begin{document}
\begin{tikzpicture}
\newcommand{\segmentrect}[3]{
decorate{ #1 -- ++ (#2,0) }
decorate{ -- ++ (0,#3) }
decorate{ -- ++ ({-(#2)},0) }
decorate{ -- #1 }
}
\draw[LaserCutterOutlineCut] \segmentrect{(0,0)}{3}{2};
\end{tikzpicture}
\end{document}