TikZ:“剪辑问题”

TikZ:“剪辑问题”

我有以下代码

\documentclass{report}
\usepackage{tikz}
\usetikzlibrary{intersections}

\begin{document}
bla bla bla

\begin{tikzpicture}
\def\r{1}; % radius
\def\a{80}; % 1st angle
\def\b{170} % 2nd angle
\pgfmathsetmacro\px{\r/cos(\a)}
\pgfmathsetmacro\qy{\r/cos(\b-90)}

\coordinate (p) at (\px,0);
\coordinate (p1) at (2*\a:\px);
\coordinate (p2) at (-2*\a:\px);
\coordinate (q1) at (0,\qy);
\coordinate (q2) at (2*\b-90:\qy);
\path[name path=lineup] (p)-- (p1);
\path[name path=linedown] (p)-- (p2);
\path[name path=lineleft] (q1)-- (q2);

\draw[name intersections={of=lineup and lineleft,by={r1}}];
\draw[name intersections={of=linedown and lineleft,by={r2}}];

\draw (0,0) circle [radius=\r];
\draw (0,0) -- (\a:\r);
\draw (0,0) -- (-\a:\r);
\draw (0,0) -- (\b:\r);
\draw (p) -- (r1) -- (r2) -- cycle;
\end{tikzpicture}

bla bla bla
\end{document}

这给了我下面的图片。pdf

如你所见,三角形的上方和下方有很多空白区域。这是因为三角形的左角(代码中的 r1 和 r2)是虚拟线段(代码中的 lineup、linedown 和 lineleft)的交点。

问题:我怎样才能让 Tikz 在计算窗口大小时忽略这些虚拟线段?我尝试使用 \clip 进行一些操作,但没有成功。

请注意,我的图片取决于三个参数 \r、\a 和 \b,这些参数我在 tikzpicture 的开头定义。我不希望剪辑具有某个任意值,而该值仅对应于特定的参数选择。

答案1

坐标pp1p2q1以及q2使用它们的路径比您实际绘制的内容要大。PGF 仍将它们视为图片的一部分,因此图片的边界框会相应放大。

对于您来说,最简单的解决方案是将整个部分(包括name intersections辅助路径)放在带有选项的范围内overlay。这样整个范围就不会被视为边界框的一部分。

\begin{scope}[overlay]
  \coordinate (p) at (\px,0);
  \coordinate (p1) at (2*\a:\px);
  \coordinate (p2) at (-2*\a:\px);
  \coordinate (q1) at (0,\qy);
  \coordinate (q2) at (2*\b-90:\qy);
  \path[name path=lineup] (p)-- (p1);
  \path[name path=linedown] (p)-- (p2);
  \path[name path=lineleft] (q1)-- (q2);

  \path[name intersections={of=lineup and lineleft,by={r1}}];
  \path[name intersections={of=linedown and lineleft,by={r2}}];
\end{scope}

尽管name intersections路径未声明所需边界框之外的坐标,因此不需要位于 内scope,但由于name path键在本地起作用,因此更容易包含它们。(还有global name path。)


您也可以\pgfresetboundingbox按照所说的使用(它的作用是),但是您应该确保它之前没有任何东西突出到最终边界框之外。

相关内容