htlatex:表格末尾的额外行

htlatex:表格末尾的额外行

我正在使用htlatex它来制作旨在通过辅助技术阅读的 HTML。

在以下最小工作示例中:

\documentclass{article}
\begin{document}

Here is a table with 2 rows and 2 columns:
\begin{table}
  \begin{tabular}{ll}
    1 & 2 \\
    3 & 4 \\
 \end{tabular}
\end{table}

\end{document}

当我运行以下命令时

htlatex.exe tmp.tex

然后输出tmp.html如下

<table id="TBL-1" class="tabular" cellspacing="0"
        cellpadding="0">
          <colgroup id="TBL-1-1g">
            <col id="TBL-1-1">
            <col id="TBL-1-2">
          </colgroup>
          <tr style="vertical-align:baseline;" id="TBL-1-1-">
            <td style="white-space:nowrap; text-align:left;" id=
            "TBL-1-1-1" class="td11">1</td>
            <td style="white-space:nowrap; text-align:left;" id=
            "TBL-1-1-2" class="td11">2</td>
          </tr>
          <tr style="vertical-align:baseline;" id="TBL-1-2-">
            <td style="white-space:nowrap; text-align:left;" id=
            "TBL-1-2-1" class="td11">3</td>
            <td style="white-space:nowrap; text-align:left;" id=
            "TBL-1-2-2" class="td11">4</td>
          </tr>
          <tr style="vertical-align:baseline;" id="TBL-1-3-">
            <td style="white-space:nowrap; text-align:left;" id=
            "TBL-1-3-1" class="td11"></td>
          </tr>
        </table>

最重要的上面的输出部分是最终的空的行。有两个原因我想删除它:

  1. 使用屏幕阅读器阅读时,系统提示我上面的表格有 3 行 2 列;这是不正确的,它迫使我不必要地跳过一个空行
  2. 当使用nu html validator(进行验证时https://github.com/validator/validator)我被告知,除其他事项外:

错误:表格行宽为 1 列,小于使用列标记确定的列数 (2)

解决方法

我可以使用一些方法perl来删除最后一行,但我更希望有一个本机解决方案。

问题

我该如何配置htlatex以便不将最后的空行添加到环境html的输出中tabular

答案1

有两种方法。您可以保留最后一个\\命令,也可以使用make4ht过滤器。我认为tex4ht不能配置为检测空行。

过滤器如下所示:

local domfilter = require "make4ht-domfilter"

local process = domfilter{
  function(dom)
    for _, row in ipairs(dom:query_selector("tr")) do
      -- get row contents, strip all whitespace
      local text = row:get_text():gsub("%s*", "")
      -- remove empty nodes
      if text == "" then
        print "empty row"
        row:remove_node()
      end
    end
    return dom
  end
}

Make:match("html$", process)

它比 perl 脚本更长,但希望更具可读性。可以使用选项来要求它-e,或者当它与 TeX 文件同名时自动要求它,只是带有mk4扩展名。

make4ht -e buildfilename.mk4 tmp.tex

相关内容