![Longtable 在 html 输出中显示额外的单元格](https://linux22.com/image/403189/Longtable%20%E5%9C%A8%20html%20%E8%BE%93%E5%87%BA%E4%B8%AD%E6%98%BE%E7%A4%BA%E9%A2%9D%E5%A4%96%E7%9A%84%E5%8D%95%E5%85%83%E6%A0%BC.png)
在 HTML 中,我的表格在标题行下方和底行左侧单元格下方有额外的单元格。
\begin{longtable}{ | p{2.0cm} | *{5}{>{\raggedright\arraybackslash}p{3.5cm} |} }
\hline
\b{Columnhead} & \b{Columnhead} & \b{Columnhead} & \b{Columnhead} &
\b{Columnhead}\\
\hline \endhead
Cell &
Cell \newline
Line \newline
Line \newline
Line - line n &
Cell &
Cell &
Cell \\
\hline
Cell &
Cell \newline
Line \newline
Line \newline
Line - line n &
Cell &
Cell &
Cell \\
\hline
\end{longtable}
答案1
你没有发布完整的mwe
,所以我构建了一个:
\documentclass{article}
\usepackage{array,longtable}
\begin{document}
some text before
\begin{longtable}{ | p{2.0cm} | *{4}{>{\raggedright\arraybackslash}p{3.5cm} |} }
\hline
\b{Columnhead} & \b{Columnhead} & \b{Columnhead} & \b{Columnhead} &
\b{Columnhead} \\
\hline \endhead
Cell &
Cell \newline
Line \newline
Line \newline
Line - line n &
Cell &
Cell &
Cell \\
\hline
Cell &
Cell \newline
Line \newline
Line \newline
Line - line n &
Cell &
Cell &
Cell \\
\hline
\end{longtable}
misplaced cells
\end{document}
我想说的是,多出的一列是因为您在样本中定义了 6 列,但每行只使用了 5 列。由于tex4ht
使用 CSS 绘制边框,因此它还会在这个空列周围绘制边框。
要删除空行,可以使用make4ht
构建文件。将以下代码保存为build.lua
:
local domfilter = require "make4ht-domfilter"
local process = domfilter {function(dom)
local is_empty_row = function(row)
local not_empty = false
local element_count = 0
-- ignore hline rows
local row_class = row:get_attribute("class")
if row_class == "hline" or row_class == "cline" then return false end
-- detect if the row contain only one empty child
for _,child in ipairs(row:get_children() or {}) do
if child:is_element() then
element_count = element_count + 1
-- empty rows contain only one element, it is not empty otherwise
if element_count > 1 then return false end
-- detect if it contains only whitespace
not_empty = child:get_text():gsub("%s","") ~= "" or not_empty
end
end
-- print("element count", element_count, not_empty)
return element_count == 1 and not_empty == false
end
for _, tbl in ipairs(dom:query_selector("table")) do
-- find the empty rows
for _, row in ipairs(tbl:query_selector("tr")) do
if is_empty_row(row) then row:remove_node() end
end
end
return dom
end}
Make:match("html$", process)
它使用 LuaXML 库来处理所有<table>
元素并从表中删除所有空行。
我会使用的另一个修复方法是纠正水平线的渲染。试试这个mycfg.cfg
文件:
\Preamble{xhtml}
\Css{tr.hline, tr.hline td, tr.cline, tr.cline td{padding:0;}}
\Css{tr.hline hr, tr.cline hr{border:none;border-top:1px solid black;}}
\begin{document}
\EndPreamble
使用以下方式编译
make4ht -c mycfg.cfg -e build.lua filename.tex
结果如下: