有没有办法自动拆分 LaTeX 中过宽的表格

有没有办法自动拆分 LaTeX 中过宽的表格

我的应用程序会根据它记录的表格数据自动生成代码以供 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 发行版时遇到的许多其他问题。

相关内容