简短问题

简短问题

简短问题

在 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}

相关内容