正如标题所述,我试图绘制一个带圆角的矩形,然后决定需要装饰一下。好吧,结果看起来很棒,但并不是我想要的。a) 发生了什么?b) 我该如何正确操作?
\documentclass[a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}
\begin{document}
\begin{tikzpicture}[scale=2]
\draw[rounded corners=40mm,
decorate,decoration={snake,amplitude=5,segment length=30}]
(0,0) rectangle (5,5);
\end{tikzpicture}
\end{document}
答案1
更新 2022-08-24:https://tex.stackexchange.com/a/655154/86在装饰开始前禁用的方法不同,rounded corners
这可能是更好的整体方法。不过,下面的解释仍然有意义。
问题在于rounded corners
选项会应用于修饰的结果。因此,您需要在构建初始路径之后但在应用修饰之前将其关闭。这无法在键中完成,decoration
因为该选项实际上是在最初解析此键时(即在路径的开头)处理的。因此,放入/tikz/sharp corners
只会decoration
否定rounded corners
。
装饰路径是路径处理完成后要做的下一件事,因此很难在构建路径和装饰路径之间插入任何东西!但是,这是可能的,我将介绍两种方法。第一种方法是将构造分成两部分。首先,我们构造圆角矩形。我们不绘制它,而是保存它。然后我们用一个完全不同的命令来装饰它。这将构造与装饰分开,意味着rounded corners
当我们进行装饰时,选项的范围已经结束。
第二种方法有效,因为 TikZ(或 PGF)构建了一个路径就像它读到的那样,而不是将所有内容都留到最后。这意味着可以在路径中间插入选项,并让它们从该点开始生效(这仅适用于影响路径构造方式的选项,而不适用于影响路径渲染方式的选项(因此颜色不起作用))。我们基本上想rounded corners
在路径结束时关闭,所以我们这样做:在路径的末尾我们放置[sharp corners]
。然后在处理装饰时,我们不再将角落弄圆。
第二种方法更简单,但第一种方法更强大。事实上,这是我的库背后的想法spath
(仍然处于 alpha 阶段 - 事实上,查看这个答案的代码表明该库缺少一些基本部分):即路径可以定义和用过的在两个不同的地方。
综上所述,下面是代码(请注意,该\makeatletter ... \makeatother
部分仅适用于两种解决方案中的第一个):
\documentclass[a4paper]{article}
%\url{http://tex.stackexchange.com/q/38989/86}
\usepackage{tikz}
\makeatletter
\tikzset{
use path/.code={\pgfsyssoftpath@setcurrentpath{#1}}
}
\makeatother
\usetikzlibrary{decorations.pathmorphing}
\begin{document}
\begin{tikzpicture}
% First method: define and then use
\path[rounded corners=30mm,save path=\rectpath]
(0,0) rectangle (8,8);
\draw[use path=\rectpath,
decorate,decoration={snake,amplitude=5,segment length=5}] (0,0);
% Second solution: sharp corners at the end
\draw[rounded corners=30mm,
decorate,decoration={snake,amplitude=5,segment length=5}]
(0,9) rectangle +(8,8) [sharp corners];
\end{tikzpicture}
\end{document}
结果如下:
正如我在评论中所说,我希望即使他们修复了这个问题,他们也能提供一种将其重新打开的方法,因为原始图片 - 虽然不是你想要的 - 非常有趣!我特别喜欢装饰snake
变成的事实birds nest
。
看https://tex.stackexchange.com/a/655147/86如果尝试在to path