是否可以创建一个具有固定尺寸的盒子,而不管其内容有多大?

是否可以创建一个具有固定尺寸的盒子,而不管其内容有多大?

是否可以创建一个框(无框架),这样即使其内容很大,也只会占用文本后面的一小部分空间。例如,无论 tikz 图片有多大,如果将其放入文本流中,它仅占用 1cm x 1cm 的大小。


更新:为了澄清这些困惑,我打算画一个方框,视觉上很大,但只占据文本流的一小部分空间。例如,像下图中的星星:

在此处输入图片描述

答案1

您可以使用\raisebox来设置框的高度(和深度)并minipage设置其宽度。例如,

\raisebox{0pt}[1cm][0pt]{%
  \begin{minipage}{1cm}%
    % Your content goes here.
  \end{minipage}%
}

将制作一个高出基线 1 厘米、宽 1 厘米的框。有关更多信息,请参阅这一页

答案2

正如 Ryan Reich 指出的那样,您可以使用该overlay键来tikz忽略路径/图片内容。

从此以后,您有许多选择,不必涉及tikz。但这里有两个“基于 tikz”的想法:

首先,您可以使用 trim lefttrim right键来设置宽度(不确定PGF这些键出现在哪个版本中)以及baseline使用键来垂直对齐图片。

\useasboundingbox但是,使用中的命令可以获得更好的控制tikzpicture,我将其整理在一个picture corners键中:

\documentclass[border=0.25in]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}

\tikzset{%
    star in text/.style={
        shape=star,
        draw,
        minimum size=1cm,
        star point ratio=2,
    },
    picture width/.style={
        trim left=-#1/2, 
        trim right=#1/2,
    },
    picture corners/.style args={#1 and #2}{
        execute at end picture={
            \useasboundingbox #1 rectangle #2;
        }
    }
}
\begin{document}


\begin{minipage}{0.5in}
\centering

ab\tikz[picture width=1ex, baseline=-0.5ex]\node[overlay, star in text]{};cd

\vskip0.5in

ab\tikz[picture corners={(-0.5ex, -0.5ex) and ++(1ex, 1ex)}]\node[overlay, star in text]{};cd


\vskip0.5in

ab\tikz[picture corners={[draw] (-0.5cm, -0.5cm) and ++(0.5cm, 0.5cm)}]\node[overlay, star in text]{};cd

\vskip0.5in

ab\tikz[picture corners={[draw] (-0.5cm, 0cm) and ++(0.5cm, 0.5cm)}]\node[overlay, star in text]{};cd

\vskip0.5in

ab\tikz[picture corners={[draw] (0cm, 0cm) and ++(0.5cm, 0.5cm)}]\node[overlay, star in text]{};cd

\vskip0.5in

ab\tikz[picture corners={[draw] (0cm, -0.5cm) and ++(0.5cm, 0.5cm)}]\node[overlay, star in text]{};cd

\end{minipage}
\end{document}

在此处输入图片描述

答案3

命令\resizebox图形包可以“调整”现有框的大小,使其成为指定水平和垂直长度的新框。若要保留其中一个调整后的长度未指定,请提供!参数。

以下示例显示了如何将“大框”(宽 4 厘米、高 3 厘米的黑色矩形)“放入”新的、宽度设置为 1 厘米的较小框中。当然,在实践中,您可以\bigbox用真正的图表、图形、表格等来替换它。

在此处输入图片描述

\documentclass{article}
\usepackage{graphicx}
\newcommand{\bigbox}{\rule{4cm}{3cm}} % just a big black rectangle
\begin{document}
The small box containing the big box: \resizebox{1cm}{!}{\bigbox}

For reference, the big box: \bigbox
\end{document}

答案4

\useanchorwidth该包的参数旨在stackengine满足您的需求,尽管有一些复杂情况需要克服。在第一张图片中,我只是将一个大星形设置为内联。在第二张图片中,我使用宏\stackonstackengine在长堆栈上使用 0pt 基线偏移)将星形覆盖在空间上。默认情况下,堆栈宽度是总宽度,在本例中是星形宽度。所以在第三次尝试中,我设置了\useanchorwidthtrue,然后星形宽度就变成了空间的宽度。问题是,由于星形被设置“ab”,它会覆盖它。

在最终结果中,我反转了堆叠的顺序,也就是说,我将其堆叠ab~cd在星号的顶部,因此它不会覆盖“ab”;但是,整体宽度是星号(锚点)的宽度,因此我必须将其重新堆叠在宽度为的空白规则之上,ab~cd以实现正确的间距。

\documentclass{article}
\usepackage{MnSymbol}
\usepackage{graphicx}
\usepackage{stackengine}
\usepackage{xcolor}
\usepackage{calc}
\def\stacktype{L}
\def\bigstar{\scalebox{3.5}{\raisebox{-0.3ex}{\color{yellow}$\largestar$}}}
\begin{document}
Inline: ab\bigstar cd

Stackon (w/ width): ab\stackon[0pt]{~}{\bigstar}cd

\renewcommand\useanchorwidth{T}
stackon (useanchorwidth): ab\stackon[0pt]{~}{\bigstar}cd

double stackon (useanchorwidth): \stackon[0pt]{\rule{\widthof{ab~cd}}{0ex}}{%
  \stackon[0pt]{\bigstar}{ab~cd}}

\end{document}

在此处输入图片描述

相关内容