我在用
\resizebox{\columnwidth}{!}{% ... %}
通过缩小表格来将太宽的表格适合页面。
然而,我的问题是,如果表格小于列宽,它就会被放大,看起来非常丑陋,更重要的是,它会变得太长而无法容纳在页面上。
那么我该如何改变上述内容以缩小它或保持它不变,但不扩大它?
我需要类似的东西
\resizebox{min(\columnwidth,\originalwidth)}{!}{% ... %}
答案1
有了adjustbox
包,你可以说
\adjustbox{max width=\columnwidth}{...}
\columnwidth
根据文档,仅当超出时才会缩放内容:
一个很好的例子是,
max width=\textwidth
它会将大内容限制在文本宽度内,但不会影响较小的内容。
当然\textwidth
这只是举例而已,可以使用任何尺寸。
以下是一个例子:
\documentclass{article}
\usepackage{adjustbox,lipsum}
\begin{document}
\noindent\adjustbox{max width=\textwidth}{%
\begin{tabular}{p{.7\textwidth}}\lipsum[2]\end{tabular}}
\noindent\adjustbox{max width=\textwidth}{%
\begin{tabular}{p{1.5\textwidth}}\lipsum[2]\end{tabular}}
\end{document}
正如 Martin Scharrer 在评论中所建议的,在这种情况下,环境形式甚至会更加方便:
\documentclass{article}
\usepackage{adjustbox,lipsum}
\begin{document}
\begin{adjustbox}{max width=\textwidth}
\begin{tabular}{p{.7\textwidth}}\lipsum[2]\end{tabular}
\end{adjustbox}
\begin{adjustbox}{max width=\textwidth}
\begin{tabular}{p{1.5\textwidth}}\lipsum[2]\end{tabular}}
\end{adjustbox}
\end{document}
环境表单自动添加\noindent
。
答案2
这里有一个稍微不同的方法。这个想法是
- 把
tabular
环境放进盒子里 - 测量盒子
- 如果太宽则使用
resizebox
- 如果不是,则显示它
示例 1
\documentclass{article}
\usepackage[showframe=true]{geometry}
\usepackage{graphicx}
\newsavebox{\mybox}
\newenvironment{mytabularwrap}{\begin{lrbox}{\mybox}}
{\end{lrbox}%
\setbox0\hbox{\usebox\mybox}%
\ifdim\wd0<\textwidth
\usebox\mybox%
\else
\resizebox{\textwidth}{!}{\usebox\mybox}%
\fi
}
\begin{document}
hello world
\begin{mytabularwrap}
\begin{tabular}{cc}
1 & 2 \\
3 & 4
\end{tabular}
\end{mytabularwrap}
\noindent\begin{mytabularwrap}
\begin{tabular}{*{30}c}
1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10
\end{tabular}
\end{mytabularwrap}
\end{document}
如果你希望它自动执行tabular
,那么你可以使用etoolbox
,重要的行是
\BeforeBeginEnvironment{tabular}{\begin{mytabularwrap}}
\AfterEndEnvironment{tabular}{\end{mytabularwrap}}
示例 2
\documentclass{article}
\usepackage[showframe=true]{geometry}
\usepackage{graphicx}
\usepackage{etoolbox}
\newsavebox{\mybox}
\newenvironment{mytabularwrap}{\begin{lrbox}{\mybox}}
{\end{lrbox}%
\setbox0\hbox{\usebox\mybox}%
\ifdim\wd0<\textwidth
\usebox\mybox%
\else
\resizebox{\textwidth}{!}{\usebox\mybox}%
\fi
}
\BeforeBeginEnvironment{tabular}{\begin{mytabularwrap}}
\AfterEndEnvironment{tabular}{\end{mytabularwrap}}
\begin{document}
hello world
\begin{tabular}{cc}
1 & 2 \\
3 & 4
\end{tabular}
\noindent
\begin{tabular}{*{30}c}
1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10
\end{tabular}
\end{document}
不管怎样,我不建议这么做,原因正如大卫卡莱尔提到的那样。