我有数百张使用 Stargazer 生成的 latex 表格。几乎所有这些表格都可以通过包装表格来纠正,例如 \resizebox{\textwidth}{!}{ \begin{tabular} ... \end{tabular}}。我已经尝试使用 stargazer 函数进行调整。
但是,回到 latex,我认为我可以简单地使用 etoolbox 包并应用 \BeforeBeginEnvironment{tabular}{\resizebox{\textwidth}{!}{} \AfterEndEnvironment{tabular}{}}。我希望每次 \begin 和 \end tabular 出现在我的代码中时,它都会自动相应地换行。但是,它没有起作用。我怀疑这是因为 latex 非常逐字地解释了 { 和 }。有什么建议吗?我不想手动修改每个单独的表格,因为我发现自己不得不经常重新生成表格。
答案1
你可能这样做,但如果出现问题,请不要怪我,因为tabular
内部使用了一些宏……你已经被警告了。
\documentclass{article}
\usepackage{graphicx}
\usepackage{lipsum}% for context
\newsavebox{\scaletabular}
\AddToHook{env/tabular/before}{%
\begin{lrbox}{\scaletabular}%
}
\AddToHook{env/tabular/after}{%
\end{lrbox}\resizebox{\textwidth}{!}{\usebox{\scaletabular}}%
}
\begin{document}
\lipsum[1][1-4]
\begin{table}[htp]
\centering
\begin{tabular}{cccccccccc}
111111 & 222222 & 333333 & 444444 & 555555 & 666666 & 77777777 & 88888888 & 999999 & 000000\\
111111 & 222222 & 333333 & 444444 & 555555 & 666666 & 77777777 & 88888888 & 999999 & 000000\\
111111 & 222222 & 333333 & 444444 & 555555 & 666666 & 77777777 & 88888888 & 999999 & 000000\\
111111 & 222222 & 333333 & 444444 & 555555 & 666666 & 77777777 & 88888888 & 999999 & 000000\\
\end{tabular}
\caption{Horrible table}
\end{table}
\lipsum[2][1-4]
\begin{table}[htp]
\centering
\begin{tabular}{cc}
AA & BB \\
CC & DD \\
\end{tabular}
\caption{Preposterously horrible table}
\end{table}
\lipsum[3][1-4]
\end{document}
你知道可能会出什么问题,不是吗?表格应该绝不放大或缩小。当并非所有表格都超出文本宽度时,这一点更加明显。好吧,可以添加一个测试来查看表格是否“狭窄”,但无论如何我不会走这条路,所以我就此打住。