缩小表格以适合页面,或保持原样

缩小表格以适合页面,或保持原样

我在用

\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

这里有一个稍微不同的方法。这个想法是

  1. tabular环境放进盒子里
  2. 测量盒子
  3. 如果太宽则使用resizebox
  4. 如果不是,则显示它

示例 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}

不管怎样,我不建议这么做,原因正如大卫卡莱尔提到的那样。

相关内容