文本适合线宽,仅缩小

文本适合线宽,仅缩小

我经常会遇到 AVM/表格有点太大的情况,习惯\resizebox将所有内容放在一行中。现在,如果linewidth进行更改(从 切换twocolumnonecolumn),则会导致文本变大。

\newcommand{\oneline}[1]{\resizebox{\linewidth}{!}{#1}}

有没有什么方法可以达到相同的结果,但又不需要扩大盒子?

答案1

下面的例子将内容放在一个盒子里(无论如何都是这样做的\resizebox),测量宽度并\resizebox在必要时应用:

\documentclass{article}
\usepackage{graphicx}

\newcommand*{\restrictlinewidthbox}[1]{%
  \begingroup
    \sbox0{#1}%
    \ifdim\wd0>\linewidth
      \resizebox{\linewidth}{!}{\copy0}%
    \else
      \copy0 %
    \fi
  \endgroup
}

\setlength{\parindent}{0pt}

\begin{document}

\restrictlinewidthbox{\rule{10mm}{10mm}}

\restrictlinewidthbox{\rule{2\linewidth}{10mm}}

\end{document}

结果

大卫·卡莱尔的绝招

\resizebox{\ifdim\width>\linewidth\linewidth\else\width\fi}{!}{\rule{10mm}{10mm}}

如果使用自然数,也会应用调整大小\width。例如,在这种情况下,结果pdflatex是缩放因子为 ,1.00005而不是1

舍入误差\resizebox

的计算\resizebox不太精确。特别是框可能比指定的要大一点。以下变体将舍入误差贡献到框的左侧和右侧:

\newcommand{\restrictlinewidthbox}[1]{%
  \begingroup
    \sbox0{\ignorespaces#1\unskip}%
    \leavevmode
    \ifdim\wd0>\linewidth
      \hbox to\linewidth{%
        \hss\resizebox{\linewidth}{!}{\copy0 }\hss
      }%
    \else
      \copy0 %
    \fi
  \endgroup
}

问题“与图形/中心环境交互的垂直空间”我的答案那里。

答案2

\resizebox{\ifdim\width>\linewidth\linewidth\else\width\fi}{!}{#1}}

可能有效

答案3

使用adjustbox

\documentclass{article}
\usepackage{graphicx,adjustbox}

\newcommand*{\restrictlinewidthbox}[1]{%
  \adjustbox{max width=\linewidth}{#1}%
}

\setlength{\parindent}{0pt}

\begin{document}

\restrictlinewidthbox{\rule{10mm}{10mm}}

\restrictlinewidthbox{\rule{2\linewidth}{10mm}}

\end{document}

(对于图片,我添加了带有的框线geometry,源中未显示。)

在此处输入图片描述

当然,您可以\adjustbox直接使用或以其环境形式使用:

\begin{adjustbox}{max width=\linewidth}
<material>
\end{adjustbox}

相关内容