我的论文中有几个表格。我希望将它们都缩小一点,缩小到常规尺寸的约 85%。
有很多关于如何使用 来做到这一点的帖子\resizebox
,但它们都使用\textwidth
以下内容作为基础:
\begin{table}[htbp]
\centering
\resizebox{0.85\textwidth}{!}{
\caption{Table caption}
\begin{tabular}{|c|c|c|c|}
\hline
$t_0~(MeV\cdot fm^3 ) $ & $t_3~(MeV\cdot fm^6)$ & $v_0/\mu~(MeV\cdot fm)$ & $1/\mu~(fm)$\\
\hline
$$ -497.726 & $17270$ & $-166.924$ & $0.45979$\\
\hline
\end{tabular}
}
\end{table}
但是使用此代码,它会将表格缩放到文本宽度的 85%。这很好,但我有多个不同宽度的表格,我需要它们都具有相同的字体大小,这样看起来才不会太荒谬。如果我对每个表格都使用上述代码,所有表格的宽度都会相同,这意味着自然宽度的表格字体大小会较小,而自然宽度较窄的表格字体大小会很大。
有没有办法使用\resizebox
相对于表格自然大小的大小,而不是\textwidth
?
答案1
你可以使用
\resizebox{0.85\width}{<contents>}
因为在这种情况下\width
指的是的宽度<contents>
。
无论如何,这不应该包含标题,因为标题应该在整个文档中具有相同的大小。此外,您无法真正控制结果。
最好使用字体大小命令。可以按照 操作\tabcolsep
,网站上有几个示例。
\documentclass{article}
\usepackage{graphicx}
\usepackage{siunitx,booktabs,caption}
\sisetup{inter-unit-product=\ensuremath{\cdot}}
\begin{document}
\begin{table}[htbp]
\centering\footnotesize
\caption{Table caption}
\begin{tabular}{
S[table-format=-3.3]
S[table-format=5.0]
S[table-format=-3.3]
S[table-format=1.5]
}
\toprule
{$t_0$ (\si{\mega\eV\femto\meter\cubed})} &
{$t_3$ (\si{\mega\eV\femto\meter\tothe{6}})} &
{$v_0/\mu$ (\si{\mega\eV\femto\meter})} &
{$1/\mu$ (\si{\femto\meter})} \\
\midrule
-497.726 & 17270 & -166.924 & 0.45979\\
-497.726 & 17270 & -166.924 & 0.45979\\
-497.726 & 17270 & -166.924 & 0.45979\\
\bottomrule
\end{tabular}
\end{table}
\end{document}
我使用siunitx
,而不是数学模式(这是错误的),作为单位,并正确格式化数据。
答案2
makecell
如果您使用(允许单元格中的换行符)和siunitx
对齐数字数据,则无需调整表格大小。此外,如果您仅使用水平规则,您将获得更专业的表格booktabs
。`标题已加载,以便为标题提供合理的垂直间距多于表。
\documentclass[12pt,leqno]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{siunitx, makecell, caption, booktabs}
\DeclareSIUnit \fm {\femto\meter}
\begin{document}
\begin{table}[!htbp]
\centering\sisetup{table-format=-3.3}
\setcellgapes{6pt}\makegapedcells
\caption{Table caption}
\begin{tabular}{|S|S[table-format=5]|S|S[table-format=1.5]|}
\hline
{\makecell{$t_0 $ \\ (\si{\MeV\cdot \fm^3 })}} & {\makecell{$t_3 $\\\si{(MeV\cdot fm^6)}}} & {\makecell{$v_0/\mu $\\(\si{\MeV\cdot \fm})}} & {\makecell{$1/\mu$\\(\si{\fm})}} \\
\hline
-497.726 & 17270 & -166.924 & 0.45979 \\
\hline
\end{tabular}
\end{table}
\begin{table}[!htbp]
\centering\sisetup{table-format=-3.3}
\caption{Table caption}
\begin{tabular}{SS[table-format=5]SS[table-format=1.5]}
\toprule
{\makecell{$t_0 $ \\ (\si{\MeV\cdot \fm^3 })}} & {\makecell{$t_3 $\\\si{(MeV\cdot fm^6)}}} & {\makecell{$v_0/\mu $\\(\si{\MeV\cdot \fm})}} & {\makecell{$1/\mu$\\(\si{\fm})}} \\
\midrule
-497.726 & 17270 & -166.924 & 0.45979 \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
答案3
如果我理解正确,你所面临的问题并不是表格材料太宽,而是太高了也就是说,它不会全部适合垂直在页面上。如果这个理解是正确的,请学习如何使用该longtable
环境。
longtable
下面显示了您的代码对设置的修改。它还使用包\si
的宏siunitx
根据国际认可(和要求!)的标准排版科学单位,并使用包的线条绘制宏booktabs
使表格具有“开放”的外观。
无论如何,应该尽量避免仅仅为了适合页面而缩放(实际上是缩小)整个表格。
\documentclass{article}
\usepackage{siunitx,booktabs,array,longtable}
\newcolumntype{C}{>{$}c<{$}} % automatic math-mode version of "c"
\begin{document}
\begin{longtable}{CCCC}
%%% define headers and footers
\caption{Table caption}\label{tab:long}\\
\toprule
t_0 & t_3 & v_0/\mu & 1/\mu\\[0.5ex]
(\si{\mega\eV\femto\meter\cubed}) & (\si{\mega\eV\femto\meter\tothe{6}}) &
(\si{\mega\eV\femto\meter}) & (\si{\femto\meter})\\
\midrule
\endfirsthead
%%
\multicolumn{4}{l}{(Table \ref{tab:long}, continued)}\\
\toprule
t_0 & t_3 & v_0/\mu & 1/\mu\\[0.5ex]
(\si{\mega\eV\femto\meter\cubed}) & (\si{\mega\eV\femto\meter\tothe{6}}) &
(\si{\mega\eV\femto\meter}) & (\si{\femto\meter})\\
\midrule
\endhead
%%
\midrule
\multicolumn{4}{r}{(continued on following page)}\\
\endfoot
%%
\bottomrule
\endlastfoot
%%% body of longtable
-497.726 & 17270 & -166.924 & 0.45979\\
\end{longtable}
\end{document}
答案4
正如您所看到的,调整表格大小会导致文档中的字体不一致,而这并不能很好地替代良好的表格设计。不幸的是,您的示例tabular
不是极简working
文档,但猜测这是一个标准article
类(默认边距、字体大小等),表格占用的文本宽度不到 85%,因此在这种情况下最好的解决办法就是什么也不做(当然,仅在此方面,不要遗漏垂直规则、数学模式中的单位等)。
如果您确实需要改变表格的自然宽度,请注意,您可以通过多种方式固定最大宽度,例如使用p{}
列和/或使用tabular*
环境(注意星号)或相应包的tabularx
和tabulary
环境,而不改变字体大小。
一般来说,为了在固定的表格宽度内容纳一些较大的内容,最好的选择是:
- 重新设计表格(可能是最好的选择)。
- 更改列之间的分隔(即
\tabcolsep
)。 - 允许多行单元格(您已经使用
p{}
、tabularx
和tabulary
列实现了这一点,在其他情况下,\parbox
在单元格内使用。) - 作为最后的手段,使用
\small
或 甚至\foonotesize
,但在整个文档中尽可能一致地这样做。如果这还不够,请放弃使用较小字体的诱惑,再次回到第 1 点。
接下来是一个使用 的示例tabulary
。为简单起见,使用宏 制作了表格和显示最大允许宽度的虚线。请注意,第一个表格的宽度与使用正常宽度(小于 85% 文本宽度)\taby
的宽度完全相同,但使用,您可以将其放大到 85% 并换行标题,或者将其缩小到 70% 而不缩小字体。只有在标题必须是一行的情况下,70% 的宽度才需要较小的字体。tabular
\tabcolsep
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs,tabulary,fp}
% just for the example
\parindent0pt\parskip1em
% just for lazyness
\let\Sc\textsuperscript
\def\taby#1{% Argument is the maximum table width
\FPeval{\result}{round(#1*100,0)}
\makebox[#1\textwidth]{\dotfill \result{} \%\dotfill}\par
\begin{tabulary}{#1\textwidth}{*4{C}}
\toprule
$t_0$ (MeV·fm\Sc3) &
$t_3$ (MeV·fm\Sc6) &
$v_0/\mu$ (MeV·fm) &
$ 1/\mu$ (fm)\\\midrule
$-$497.726 &
17270 &
166.924 &
0.45979\\\bottomrule
\end{tabulary}
\par}
\begin{document}\centering
\taby{.85}
{\tabcolsep.9em\taby{.85}}
{\tabcolsep1em\taby{.85}}
\taby{.75}
{\footnotesize\tabcolsep1em \taby{.75}}
\end{document}