调整整个表格的大小以适应线宽,而不仅仅是表格

调整整个表格的大小以适应线宽,而不仅仅是表格

有没有办法调整整个table元素的大小?我知道有resizebox可以调整tabular元素大小的方法,如下所述:有没有办法可以稍微缩小表格(包括字体大小)以适合列边界?。但是,当我直接从 R 或 Stata 生成表格到 TeX 文件中(然后将其添加input到我的代码中)时,每次重新生成表格时,我都需要手动添加命令resizeboxtabular下面是我想要做的一个最简单(非工作但具有说明性)的示例:

\documentclass{article} 
\begin{document}

\resizebox{\linewidth}{!}{
\input{table.tex}
}
\end{document}

其中 table.tex 是一个仅包含表格的单独文件(该文件由统计软件生成):

\begin{table}[]
\begin{tabular}{cc}
X  & Y \\
Z & A
\end{tabular}
\end{table}

答案1

用于生成表格的程序和库的输出通常是可定制的。例如,在R包中xtable,您可以添加额外的环境,用于调整大小。

R代码:

library(xtable)
A = matrix(c('X','Y','Z','A'),nrow=2,byrow=TRUE)
print(xtable(A),
  include.rownames=FALSE,
  include.colnames=FALSE,
  hline.after=NULL,
  latex.environments=c("myresizeenv"))

包含命令输出的 LaTeX 代码xtable

\documentclass{article}
\usepackage{graphicx}
\usepackage{environ}
\NewEnviron{myresizeenv}{\resizebox{\linewidth}{!}{\BODY}}
\begin{document}

\begin{table}[ht]
\begin{myresizeenv}
\begin{tabular}{ll}
  X & Y \\ 
  Z & A \\ 
  \end{tabular}
\end{myresizeenv}
\end{table}

\end{document}

结果是一个巨大的 2x2 表:

在此处输入图片描述

请注意,此示例表明(正如另一个答案中所评论的那样),自动调整大小可能不是一个好主意,因为结果可能太大或太小(或总体上不一致)。

为了更加一致,xtable提供了一个scalebox密钥,它至少可以确保表格字体的大小相同(当然,如果对所有表格使用相同的比例因子)。

> print(xtable(A),include.rownames=FALSE,include.colnames=FALSE,hline.after=NULL,scalebox=0.8)
% latex table generated in R 3.4.4 by xtable 1.8-4 package
% Tue Jun 25 00:11:37 2019
\begin{table}[ht]
\centering
\scalebox{0.8}{
\begin{tabular}{ll}
  X & Y \\ 
  Z & A \\ 
  \end{tabular}
}
\end{table}

答案2

欢迎来到 TeX.SE!

首先,显然,扎尔科的评论适用:自动调整大小很容易导致输出不美观和/或不可读。我会从技术角度回答您的问题,但您应该考虑结果在印刷上是否可接受。

环境table会产生一个浮点数,与之相反,tabular会创建一个框。调整浮点数的大小实际上没有意义,但调整框的大小却有意义。因此,让我们首先像table.tex这样更改:

\begin{tabular}{cc}
X & Y \\
Z & A
\end{tabular}
  • 有了此 和 ,main.tex除了必需的 之外保持不变\usepackage{graphicx},您的示例就可以正常工作。当然,您将不再有浮动。您还应该从中删除不需要的空格main.tex— 见下文。

  • 如果您想要保留浮动行为并保留环境table,请将其放在\resizebox命令周围,如下所示:

    \documentclass{article}
    \usepackage{graphicx}
    \begin{document}
    
    \begin{table}
      \resizebox{\linewidth}{!}{%
        \input{table.tex}%
      }% here, the percent sign could be removed (end of paragraph)
    \end{table}
    \end{document}
    

注意不需要的空格:当你写

\resizebox{\linewidth}{!}{
...

在调整大小的开头有一个空格(由行尾贡献)。更好的使用:

\resizebox{\linewidth}{!}{%

在某些地方,空格会被忽略(例如,在段落末尾 [TeX 添加隐式\unskip]、在垂直模式下或在\begin{table}或之后\begin{tabular}{...}),但并非所有地方都会忽略空格;在这种情况下,您会得到一个没有百分号的不需要的空格。您可以比较一下:

\documentclass{article}
\usepackage{graphicx}

\begin{document}
\noindent \resizebox{\linewidth}{!}{a}
\end{document}

接着就,随即:

\documentclass{article}
\usepackage{graphicx}

\begin{document}
\noindent \resizebox{\linewidth}{!}{
  a}
\end{document}

后者的输出结果中可以清晰地看到增加的空间(更a小,并且不再居中:左侧有一个单词间空格)。显然,由于 TeX 的输入处理规则,你可以用这个得到相同的结果:

...
\noindent \resizebox{\linewidth}{!}{ a}
...

我只使用了在之前带有换行符的版本,a因为这是示例中使用的输入样式(并且存在间距问题)。

答案3

我花了很多时间对此进行整理,因此我添加了一条评论来展示哪些方法有效或者我xtable在 R 中使用该包。

使用resizebox{}或用 定义新环境可以很好地调整表格大小,正如@Marijn 指出的那样。但是,除了简单情况外,resizebox{}它似乎效果不佳,因为自定义环境在 之前结束,而不是在 之后结束。因此添加诸如标题之类的内容会导致问题。xtablextable\end{table}\end{tabular}

其他人有著名的其他地方也存在此问题。

似乎最好的选择是使用参数scaleboxxtable并调整输出直到得到正确的大小。这就是软件包维护者推荐

相关内容