如何隐藏 tikz 路径的一部分?

如何隐藏 tikz 路径的一部分?

我想只绘制路径的一部分。在我的特定情况下,我想将括号路径的最右侧部分隐藏在较大图片的一部分中。我目前的解决方案是在其上绘制一个矩形,但这真的很不方便。有更好的方法吗?

\documentclass[tikz,border=2pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\begin{document}
\begin{tikzpicture}
  \draw[decorate,decoration={brace}] (0,0) -- (5,0);
  \fill[white] (4,-1) rectangle (6,1);
\end{tikzpicture}
\end{document}

这会产生所需的结果(请注意括号右侧没有卷曲): 例子

答案1

如果您确实想隐藏括号的一部分(而不是绘制不平衡但完整的括号),那么剪辑可能是最简单的方法。对于您的 MWE,这非常简单。例如:

\documentclass[tikz,border=2pt]{standalone}
\usetikzlibrary{decorations.pathreplacing}
\begin{document}
\begin{tikzpicture}
  \path [clip] (0,-.5) rectangle (4,.5);
  \draw[decorate,decoration={brace}] (0,0) -- (5,0);
\end{tikzpicture}
\end{document}

夹式支架

注意,剪切区域指定要被剪切的区域显示- 该区域之外的任何内容都不会被绘制。

剪辑会影响剪辑命令范围内的所有内容。这可能不是您想要的...

假设您想要重现以下内容:

目标

你可以尝试这个:

\documentclass[tikz,border=2pt]{standalone}
\usetikzlibrary{decorations.pathreplacing}
\begin{document}
\begin{tikzpicture}
  \path [clip] (0,-.5) rectangle (4,.5);
  \draw[decorate,decoration={brace}] (0,0) -- (5,0);
  \path [draw, fill] foreach \i in {0,.5,1,...,5} {(\i,-.25) circle (.5pt)};
\end{tikzpicture}
\end{document}

但此代码将产生:

隐藏的东西太多了

这不是你想要的。

为了限制剪辑的效果,您可以使用来scope指定仅应应用剪辑的内容:

\documentclass[tikz,border=2pt]{standalone}
\usetikzlibrary{decorations.pathreplacing}
\begin{document}
\begin{tikzpicture}
  \begin{scope}
    \path [clip] (0,-.5) rectangle (4,.5);
    \draw[decorate,decoration={brace}] (0,0) -- (5,0);
  \end{scope}
  \path [draw, fill] foreach \i in {0,.5,1,...,5} {(\i,-.25) circle (.5pt)};
\end{tikzpicture}
\end{document}

产生了想要的结果:

正好

答案2

两种解决方案:

  • clip:绘图区域仅限于剪切区域。
  • aspect:支架的鼻部/尖端可通过选项移动aspect。优点是右侧不会被切断,而是可以正确结束。

带有白色套印、剪切和改变纵横比的示例文件(默认值为 0.5):

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\begin{document}
\begin{tikzpicture}
  \draw[decorate,decoration={brace}] (0,0) -- (5,0);
  \fill[white, overlay] (4,-.2) rectangle (6,1);
\end{tikzpicture}

\begin{tikzpicture}
  \begin{scope}
    \clip[overlay] (-1, -1) rectangle (4, 1);
    \draw[decorate,decoration={brace}] (0,0) -- (5,0);
  \end{scope}
\end{tikzpicture}

\begin{tikzpicture}
  \draw[decorate,decoration={brace, aspect=0.625}] (0,0) -- (4,0);
\end{tikzpicture}
\end{document}

结果

选项overlay会减少计算出的边界框,因为白色矩形或剪辑区域不应该对其产生影响。但是不可见的括号部分确实算数。根据大图中括号的位置,整体边界框可能需要修正。

可视化边界框的示例:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\setlength{\fboxsep}{0pt}
\setlength{\fboxrule}{.1pt}
\begin{document}
\fbox{\begin{tikzpicture}
  \draw[decorate,decoration={brace}] (0,0) -- (5,0);
  \fill[white,overlay] (4,-.2) rectangle (6,1);
\end{tikzpicture}}

\fbox{\begin{tikzpicture}
  \begin{scope}
    \clip[overlay] (-1, -1) rectangle (4, 1);
    \draw[overlay=false, decorate,decoration={brace}] (0,0) -- (5,0);
  \end{scope}
\end{tikzpicture}}

\fbox{\begin{tikzpicture}
  \draw[decorate,decoration={brace, aspect=0.625}] (0,0) -- (4,0);
\end{tikzpicture}}
\end{document}

结果

相关内容