我有 2 个并排的小页面,如下所示:
\begin{figure}
\centering
\fbox{
\begin{minipage}[t]{0.48\linewidth}%
\begin{minipage}[t]{0.48\linewidth}%
left part
\end{minipage}
\end{minipage}\hfill
\begin{minipage}[t]{0.48\linewidth}%
\begin{minipage}[t]{0.48\linewidth}%
right part
\end{minipage}
\end{minipage}}
\captionof{figure}{An example program}\label{fig:An example program}
\end{figure}
现在整体的宽度figure
比纸张的宽度短一点。我想让它们确切地相同。
谁能告诉我可以改变哪个参数来实现这一点?
答案1
使用\framebox
而不是\fbox
。
\begin{figure}
\centering
\framebox[1\linewidth][t]{%
\begin{minipage}[t]{0.48\linewidth}%
\begin{minipage}[t]{1\linewidth}%
left part is going to be very big sentence that goes into two lines
\end{minipage}%
\end{minipage}\hfill
\begin{minipage}[t]{0.48\linewidth}%
\begin{minipage}[t]{1\linewidth}%
right part is going to be very big sentence that goes into two lines
\end{minipage}%
\end{minipage}}%
\captionof{figure}{An example program}\label{fig:An example program}
\end{figure}
编辑:根据 Martin 关于使用\framebox
和逐字文本/catcode 更改材料的评论,此代码将按预期使用\fbox
\begin{figure}
\centering
\fbox{%
\begin{minipage}[t]{1\linewidth-2\fboxsep-2\fboxrule}%
\begin{minipage}[t]{0.48\linewidth}%
left part right part is going to be very big sentence that goes into two lines
\end{minipage}\hfill
\begin{minipage}[t]{0.48\linewidth}%
right part right part is going to be very big sentence that goes into two lines
\end{minipage}
\end{minipage}}
\captionof{figure}{An example program}\label{fig:An example program}
\end{figure}
但是,你必须使用
\usepackage{calc} % as per Stephan's advice.
以使其正常工作。
PS. 如果您希望将其扩展到纸张宽度(您真的想这样做吗?),则必须使用几何将边距减小到零。
我认为您可以简单地使用\caption
内部figure
环境(而不是\captionof
使用外部\figure
环境)
答案2
您需要删除后面的空格\fbox{
:
\fbox{%
其次,替换0.48\linewidth
为
0.5\linewidth-\fboxsep-\fboxrule
意思是扣除水平增加的空间量\fbox
。
calc
如果您还没有加载该包,那么您需要加载它。
正如 Harish Kumar 所注意到的,\linewidth
在内部是“本地计算的” minipage
,所以如果您不想的话就不要重复应用它(为什么您要嵌套小页面?)
再次举个例子,做了一些修改并删除了一些不必要的东西:
\begin{figure}
\centering
\fbox{%
\begin{minipage}[t]{0.5\linewidth-\fboxsep-\fboxrule}%
left part
\end{minipage}\hfill
\begin{minipage}[t]{0.5\linewidth-\fboxsep-\fboxrule}%
right part
\end{minipage}}
\captionof{figure}{An example program}\label{fig:An example program}
\end{figure}
答案3
其他答案会告诉您如何强制框架宽度。但是,如果框架只是为了调试,或者只是出于兴趣,因为其他答案中没有提到它;那么为什么你的两个边缘minipages
没有被强制到页面边缘,是因为\hfill
它们之间的没有效果,并且与\hspace{0pt}
\fbox
(如\mbox
或\hbox
)将其内容设置为相同自然宽度和\hfill
粘连,尽管 拉伸 具有自然宽度 0pt。通过使用\framebox
(或只是删除\fbox
),TeX 试图将线设置为指定的宽度,因此 隐含的拉伸\hfill
被允许将 推开minipages
。
答案4
\framebox{<width>}{<content>}
您可以使用而不是 来强制使用具有给定内容宽度的框架\fbox{<content>}
。它首先将内容放置在给定宽度的水平框中,然后在其周围绘制框架。文本宽度由 或 给出\textwidth
(\linewidth
后者受包括引号在内的列表式环境的影响)。如果您希望框架正好是文本宽度,则需要从该值中减去框架规则宽度和间隔两次(每边一次)。
我不确定你为什么要使用 double minipages
,所以我没有在这里做任何更改。请注意,我%
在尾随后额外添加了一个{
,以避免出现虚假空格,并将其更改为\caption
。
\begin{figure}
\centering
\framebox{\dimexpr\linewidth-2\fboxsep-2\fboxrule\relax}{%
\begin{minipage}[t]{0.48\linewidth}%
\begin{minipage}[t]{0.48\linewidth}%
left part
\end{minipage}
\end{minipage}\hfill
\begin{minipage}[t]{0.48\linewidth}%
\begin{minipage}[t]{0.48\linewidth}%
right part
\end{minipage}
\end{minipage}}
\caption{An example program}\label{fig:An example program}
\end{figure}
请注意,将\framebox
内容读取为宏参数,因此您不能使用逐字或 catcode 更改其中的材料。如果您想要这样做,您需要\Framebox
使用realboxes
包或\adjustbox{minipage=\linewidth-2\fboxsep-2\fboxrule,fbox}
(也可用作adjustbox
环境)来自adjustbox
包(实际上都是我写的)。根据内容,您还可以使用adjustbox
键width=\linewidth-2\fboxsep-2\fboxrule,fbox
来代替飞涨首先将内容调整到给定的宽度。但是,您似乎有一些文本内容,因此不建议这样做。