Longtable 在 html 输出中显示额外的单元格

Longtable 在 html 输出中显示额外的单元格

在 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

结果如下:

在此处输入图片描述

相关内容