目前,折纸图是使用矢量绘图程序(如 inkscape)制作的,然后使用 pdf 工具进行组合。现在,我想知道这个过程是否可以自动化。至少,将步骤放置在页面上(中间可能有符号),如以下示例所示:
(图片来源)
但是,应该可以实现不同的布局,例如
(图片来源)
在以圆形显示外部图像使用 TikZ 以圆形显示图像。使用类似的想法,如果我知道图像应放置位置的坐标,我就可以运行一个页面:
\documentclass{article}
\usepackage{tikz,graphicx}
\begin{document}
\begin{tikzpicture}
\foreach \i in {1,...,8}
\node at (somex, somey) {
% uses the fact that all images are of the form 'img' + number
\includegraphics[width=2cm]{img\i}
};
\end{tikzpicture}
\end{document}
但是,它应该能够给出图片列表(img1,...,imgn)和每页图片数量,然后所有内容都应按相应方式放置。理想情况下,应该有如下环境或命令:
\diagrampage{<number of images on page>}{<type of path>}
\diagram{<total number of images>}{<images per page>}{<type of path>}
问题: 如何实现?欢迎提供任何帮助/链接/建议/软件包。将其变成样式类是个好主意吗?一个大问题是自动确定台阶的坐标。
有关的:折纸包
答案1
更新:未对曲线进行参数化。
\documentclass{article}
\usepackage{tikz} % picture taken from www.marmots.org
\usetikzlibrary{decorations.markings}
\tikzset{mark four/.style={postaction={decorate,decoration={markings,
mark=at position 0.02 with {\coordinate (#1-1);},
mark=at position 0.35 with {\coordinate (#1-2);},
mark=at position 0.65 with {\coordinate (#1-3);},
mark=at position 0.98 with {\coordinate (#1-4);}
}}}}
\begin{document}
\begin{tikzpicture}
\draw[line width=15pt,gray!20,mark four=first] plot[smooth,tension=1.5]
coordinates {(6,0) (-6,4) (6,8) (0,10) (-4,9.5)};
\foreach \X [count=\Y]in {4,...,1}
{\node at (first-\Y){\includegraphics[width=2cm]{img-\X}};}
\end{tikzpicture}
\clearpage
\hspace*{-3cm}
\begin{tikzpicture}
\draw[line width=15pt,gray!20,mark four=second] plot[smooth,tension=1.5]
coordinates {(-6,0) (6,4) (-6,8) (0,12) (4,14)};
\foreach \X [count=\Y]in {5,...,8}
{\node at (second-\Y){\includegraphics[width=2cm]{img-\X}};}
\end{tikzpicture}
\end{document}
您也可以加载 hobby 库来绘制曲线,但对于大多数用途来说,内置库smooth plot
可能就足够了。您也可以将带有图片的节点直接放在mark four
样式中。
如果将曲线参数化,那就非常简单了。我构建了两个类似于您的屏幕截图的示例。我没有您的折纸,所以我只是从土拨鼠恢复基金会网站上拍了一些照片。策略是采用旋转的正弦曲线,并通过添加与曲线参数的某些正或负幂相匹配的部分来稍微变形末端\x
。
\documentclass{article}
\usepackage{tikz} % picture taken from www.marmots.org
\begin{document}
\begin{tikzpicture}
\draw[line width=15pt,gray!20] plot[domain=1:4,variable=\x,samples=200]
({-5*sin(160*\x+180)+6/\x^2},{12*\x-0.27*\x*\x*\x+5/\x^2});
\foreach \y [count=\x] in {4,...,1}
{ \node[label=below:img-\y] at
({-5*sin(160*\x+180)+6/\x^2},{12*\x-0.27*\x*\x*\x+5/\x^2}) {
\includegraphics[width=2cm]{img-\y}
};}
\end{tikzpicture}
\clearpage
\begin{tikzpicture}
\draw[line width=15pt,gray!20] plot[domain=1:4,variable=\x,samples=200]
({5*sin(160*\x+120)-3/\x^2},{7*\x+5/\x^2});
\foreach \x [evaluate={\y=int(4+\x)}] in {1,...,4}
{ \node[label=below:img-\y] at
({5*sin(160*\x+120)-3/\x^2},{7*\x+5/\x^2}) {
\includegraphics[width=2cm]{img-\y}
};}
\end{tikzpicture}
\end{document}