有没有办法调整整个table
元素的大小?我知道有resizebox
可以调整tabular
元素大小的方法,如下所述:有没有办法可以稍微缩小表格(包括字体大小)以适合列边界?。但是,当我直接从 R 或 Stata 生成表格到 TeX 文件中(然后将其添加input
到我的代码中)时,每次重新生成表格时,我都需要手动添加命令resizebox
。tabular
下面是我想要做的一个最简单(非工作但具有说明性)的示例:
\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
因为这是示例中使用的输入样式(并且存在间距问题)。