使用 etoolbox 包自动调整框大小

使用 etoolbox 包自动调整框大小

我有数百张使用 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}

在此处输入图片描述

你知道可能会出什么问题,不是吗?表格应该绝不放大或缩小。当并非所有表格都超出文本宽度时,这一点更加明显。好吧,可以添加一个测试来查看表格是否“狭窄”,但无论如何我不会走这条路,所以我就此打住。

相关内容