简短问题
在 a\clip
和 a之后\pgfresetboundingbox
,边界框永久为(0,0)rectangle(0,0)
。如何打开边界框计算并获得一个相当小的边界框?
故事
下面的例子
\documentclass{article}
\usepackage{tikz}
\begin{document}
\tikz{
\clip circle(10);
\pgfresetboundingbox
\fill circle(10);
% \useasboundingbox(-10,-10)(10,10); % makes no difference
}
\end{document}
结果是
其中矩形是美国信纸的来源article
,圆心大约是普通文件的起点。这表明\pgfresetboundingbox
重置了边界框,正如预期的那样。然而,普通路径不会维修它。显式的 也不行\useasboundingbox
。
问题是:
在 a
\clip
和 a之后\pgfresetboundingbox
,
我该如何打开边界框的计算?
回想一下,在日常使用中,带有 的代码\pgfresetboundingbox
总是会给出比不带 的代码更小或相等的边界框\pgfresetboundingbox
。在上面的例子中,它确实给了我一个较小的边界框。(太小了)
因此我预计,如果我们能以某种方式开启计算,它不应该给出比没有更大的边界框\pgfresetboundingbox
。
换句话说,
在 a
\clip
和 a之后\pgfresetboundingbox
,
我该如何打开边界框的计算
,使得它是最小的 但包含所有可见的内容?
\tikz{
\clip(5,0)--(-4,-4)--(0,5)--cycle;
\pgfresetboundingbox
\fill(-5,0)--(4,4)--(0,-5)--cycle;
}
应该给我
隐藏部分在哪里
可能的应用
以下代码生成错误的右边框。(由于控制点)
\tikz{
\fill(0,-1)..controls(10,0)..(0,1);
}
如果我们可以应用一些剪辑就好了仅有的在右边界上。
% Caution! imaginary code
\tikz[clip right at x=7]{
\fill(0,-1)..controls(10,0)..(0,1);
}
通过插入来实现
\clip(-\maxdimen,-\maxdimen)rectangle(7,\maxdimen);
\pgfresetboundingbox
评论
如果连续发出两次剪辑,边界框应该更小。
答案1
我看到您在问题中添加了一些细节,但我已经完成了第一部分,所以我会发布它。我知道我可能必须更改一些内容才能让您“重复使用”剪辑,起初这个问题似乎暗示这是一次性的事情。
输出
显示形状
隐
代码
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\begin{document}
\tikz{
\useasboundingbox(-10,-10)(10,10);
\node[
anchor=east, %fill=yellow,
minimum height=25cm, minimum width=5cm,
isosceles triangle, rotate=45,
] (trifill) at (current bounding box.north east) {};
\node[
anchor=east, %draw, dashed,
minimum height=25cm, minimum width=5cm,
isosceles triangle, rotate=225
] (tridashed) at (current bounding box.south west) {};
\begin{scope}
\clip (trifill.apex) foreach \i in {left corner, right corner} {--(trifill.\i)} --cycle;
\clip (tridashed.apex) foreach \i in {left corner, right corner} {--(tridashed.\i)} --cycle;
\fill[black] (current bounding box.south west) rectangle (current bounding box.north east);
\end{scope}
}
\end{document}