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