如何绘制带圆角的装饰矩形?

如何绘制带圆角的装饰矩形?

正如标题所述,我试图绘制一个带圆角的矩形,然后决定需要装饰一下。好吧,结果看起来很棒,但并不是我想要的。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

相关内容