我正在使用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>
这最重要的上面的输出部分是最终的空的行。有两个原因我想删除它:
- 使用屏幕阅读器阅读时,系统提示我上面的表格有 3 行 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