我的应用程序会根据它记录的表格数据自动生成代码以供 pdflatex 处理。我无法对数据做出太多假设。有多少列以及它包含什么类型的数据取决于许多因素。表格中有很多无法分解的文本,例如数字序列号。通常有足够多的行来跨越多页(有时是数百页甚至数千页 - 我真心希望我的客户不会打印这些报告)。
在某些情况下,数据最终太宽而无法打印,并且我会收到以下警告:
Overfull \hbox (392.01555pt too wide) in alignment at lines 7--20
以下是生成此警告的代码示例:
\documentclass[10pt,letterpaper]{article}
\usepackage{longtable}
\begin{document}
\begin{longtable}{*{10}{l}}
Avg. Strength &
Date &
Error No. &
Lot No. &
Max. Strength &
Serial Number &
Speed &
Test Grip Position &
Unit &
personnel
\\
\hline
\endhead
1.12 &
27 Jun 2013 22:11:15 &
0 &
0000000000 &
1.78 &
00000000000000000000 &
11.8in./min. &
0.4in. &
lbf &
ADMINIST
\\
1.17 &
27 Jun 2013 22:13:01 &
51 &
0000000000 &
1.44 &
00000000000000000000 &
11.8in./min. &
0.4in. &
lbf &
ADMINIST
\\
1.51 &
27 Jun 2013 22:15:03 &
0 &
0000000000 &
2.18 &
00000000000000000000 &
11.8in./min. &
0.4in. &
lbf &
ADMINIST
\\
\end{longtable}
\end{document}
我喜欢乳胶包倾向于做出的判断,并且相信它们,而不是我自己对单元格宽度等的微观管理。我想要接受 longtable 对单元格宽度应该是多少的判断,然后分解表格,使其永远不会超出末端或调整其大小。
简而言之,有没有一种可以解决这个问题的方法,或者有其他人在遇到同样的问题时想出的一些代码?如果没有,是否可以编写一个可以做到这一点的包,而不必深入研究 tex 的神秘内部结构?我不是 tex 的人,我宁愿从 longtable 的功能开始,但要添加拆分(或以其他方式补偿过大的宽度)。
更新
以下是我想做的伪代码。我愿意(实际上更愿意)在我的应用程序端完成所有操作,只是我无法在我的代码中知道宽度是多少。
max_width = page.get_line_width()
for table in get_tables():
width = 0
sub_table = []
for col in table.cols():
if width + col.width() > max_width: # Not handling single col being too wide edge case
print_table(sub_table)
sub_table.clear()
width = 0
width += col.width()
sub_table.add(col)
if sub_table not empty:
print_table(sub_table)
答案1
所以基本上我的代码现在添加了
\typeout{width=\the\textwidth}
到 tex 文件,首先以草稿模式运行 latex(根据需要重新运行),然后使用正则表达式在输出中捕获文本宽度。它还捕获 .aux 文件的名称并加载该文件。生成的辅助文件包含 longtable 制作的尺寸。为什么你们这些 tex 专家没有告诉我这一点?我几乎是偶然发现的,而且我不懂 tex!如果真的无法在 tex 本身中进行拆分,那么这确实是我需要的唯一信息。
我希望这不是最好的答案,因为这是一个非常糟糕的答案。我必须为每个表运行 latex 才能获得 longtable 得出的宽度,而这可能会有数百个表。这是在尝试使用软件发布精简版 tex 发行版时遇到的许多其他问题。