使图表(包括 2 个小页)的宽度与纸张相同

使图表(包括 2 个小页)的宽度与纸张相同

我有 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包(实际上都是我写的)。根据内容,您还可以使用adjustboxwidth=\linewidth-2\fboxsep-2\fboxrule,fbox来代替飞涨首先将内容调整到给定的宽度。但是,您似乎有一些文本内容,因此不建议这样做。

相关内容