是否可以创建一个框(无框架),这样即使其内容很大,也只会占用文本后面的一小部分空间。例如,无论 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 left
和trim 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
满足您的需求,尽管有一些复杂情况需要克服。在第一张图片中,我只是将一个大星形设置为内联。在第二张图片中,我使用宏\stackon
(stackengine
在长堆栈上使用 0pt 基线偏移)将星形覆盖在空间上。默认情况下,堆栈宽度是总宽度,在本例中是星形宽度。所以在第三次尝试中,我设置了\useanchorwidth
true,然后星形宽度就变成了空间的宽度。问题是,由于星形被设置后“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}