使用 tex4ht 时长表中文本和图像的垂直对齐问题

使用 tex4ht 时长表中文本和图像的垂直对齐问题

在专家的帮助下表格中还有另一个图片对齐问题。希望文本从单元格顶部开始。未居中现在,使用时,我可以让文本和图像一起显示在长表中的正确位置lualatex

但是当我使用 make4ht 编译为 HTML 时,相同的解决方案不起作用。所以这个问题是问如何才能使结果在 HTML 和 PDF 中显示相同。这是一个 MWE。问题似乎是valign=tfromadjustbox在 tex4ht 中没有效果,而在 pdf 中却有效果。

\documentclass[12pt]{article}
\usepackage{mwe}%loads graphicx
\usepackage[export]{adjustbox} 
\usepackage{longtable}
\begin{document}

\begin{longtable}[c]{|p{1in}|p{3in}|p{1in}|}\hline 
Test A&\vspace{0pt}\includegraphics[width=3in,valign=t]{example-image-a}&TestB\\\hline
\end{longtable}
\end{document}

使用编译lualatex foo4.tex给出预期的输出

Mathematica 图形

编译同一个文件,make4ht foo4.tex得到如下结果

Mathematica 图形

我希望文本位于顶部,就像在 PDF 中显示的那样。

既然valign=t在 tex4ht 中显然不起作用,那么在 tex4ht 中还有哪些其他选项可以执行相同的操作?如何最好地解决这个问题?我需要一些 CSS 特殊配置吗?

生成的 HTML 代码是

<!DOCTYPE html> 
<html lang="en-US" xml:lang="en-US" > 
<head><title></title> 
<meta  charset="iso-8859-1" /> 
<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)" /> 
<meta name="viewport" content="width=device-width,initial-scale=1" /> 
<link rel="stylesheet" type="text/css" href="foo4.css" /> 
<meta name="src" content="foo4.tex" /> 
</head><body 
>
<a 
 id="x1-2r1"></a>   <!--l. 8--><div class="longtable"> <table id="TBL-1" class="longtable" 
cellspacing="0" cellpadding="0"  
><colgroup id="TBL-1-1g"><col 
id="TBL-1-1" /></colgroup><colgroup id="TBL-1-2g"><col 
id="TBL-1-2" /></colgroup><colgroup id="TBL-1-3g"><col 
id="TBL-1-3" /></colgroup>
<tr 
class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-1-1-"><td  style="white-space:normal; text-align:left;" id="TBL-1-1-1"  
class="td11">
<!--l. 8--><p class="noindent" >Test A          </p></td><td  style="white-space:normal; text-align:left;" id="TBL-1-1-2"  
class="td11">
<!--l. 8--><p class="noindent" ><img 
src="example-image-a.png" alt="PIC"  
width="216" height="162"  />                                                  </p></td><td  style="white-space:normal; text-align:left;" id="TBL-1-1-3"  
class="td11">
<!--l. 8--><p class="noindent" >TestB           </p></td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-1-2-"><td  style="white-space:normal; text-align:left;" id="TBL-1-2-1"  
class="td11">            </td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-1-3-"><td  style="white-space:normal; text-align:left;" id="TBL-1-3-1"  
class="td11">            </td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-1-4-"><td  style="white-space:normal; text-align:left;" id="TBL-1-4-1"  
class="td11">
<!--l. 9--><p class="noindent" >            </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-1-5-"><td  style="white-space:normal; text-align:left;" id="TBL-1-5-1"  
class="td11">
<!--l. 9--><p class="noindent" >            </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-1-6-"><td  style="white-space:normal; text-align:left;" id="TBL-1-6-1"  
class="td11">              </td><td  style="white-space:normal; text-align:left;" id="TBL-1-6-2"  
class="td11">                                         </td><td  style="white-space:normal; text-align:left;" id="TBL-1-6-3"  
class="td11"></td></tr>
   </table></div>

</body> 
</html>

更新

我发现如果我手动编辑 HTML 并替换

 <tr  style="vertical-align:baseline;"

  <tr   style="vertical-align: top;" 

然后它就起作用了!

Mathematica 图形

但是,我无法找出正确的 CSS 来添加到我的 .cfg 中,以便告诉 tex4ht 使用此样式tr。所以我只需要弄清楚这部分。

我已经添加

  \Css{tr {vertical-align:top;}}

添加到我的 .cfg,但没有任何效果。生成的 HTML 仍然显示<tr style="vertical-align:baseline;"。所以我现在不知道如何覆盖它,也不知道 tex4ht 设置在哪里vertical-align:baseline更改它!

在 tex4ht 中修改 CSS 样式是一项非常复杂的业务,因为有太多类,我不知道要修改哪一个。

2019 年

答案1

在这种情况下,我们需要摆脱 所有表行的属性vertical-align中插入的默认设置style,然后在 CSS 中为当前行插入正确的垂直对齐方式。

我们可以修补用于行垂直对齐的命令adjustbox。我们将使用这些命令插入必要的 CSS 代码。文件adjustbox.4ht

\NewConfigure{AdjustboxValignTop}{1}
\NewConfigure{AdjustboxValignMiddle}{1}
\NewConfigure{AdjustboxValignCenter}{1}
\NewConfigure{AdjustboxValignBottom}{1}
\pend:def\adjbox@valign@t{\a:AdjustboxValignTop}
\pend:def\adjbox@valign@t{\a:AdjustboxValignTop}
\pend:def\adjbox@valign@T{\a:AdjustboxValignTop}
\pend:def\adjbox@valign@M{\a:AdjustboxValignMiddle}
\pend:def\adjbox@valign@m{\a:AdjustboxValignMiddle}
\pend:defI\adjbox@valign@c{\a:AdjustboxValignCenter}
\pend:def\adjbox@valign@b{\a:AdjustboxValignBottom}
\pend:def\adjbox@valign@B{\a:AdjustboxValignBottom}
\Hinput{adjustbox}

可以在文件中插入 CSS 指令.cfg

\Preamble{xhtml}

\Configure{halignTR}{}
\Configure{AdjustboxValignTop}{\Css{\#TBL-\TableNo-\HRow-{vertical-align:top;}}}
\Configure{AdjustboxValignMiddle}{\Css{\#TBL-\TableNo-\HRow-{vertical-align:middle;}}}
\Configure{AdjustboxValignCenter}{\Css{\#TBL-\TableNo-\HRow-{vertical-align:middle;}}}
\Configure{AdjustboxValignBottom}{\Css{\#TBL-\TableNo-\HRow-{vertical-align:bottom;}}}
\begin{document}
\EndPreamble

禁止\Configure{halignTR}{}插入元素style的属性<tr>

\Configure{AdjustboxValignTop}{\Css{\#TBL-\TableNo-\HRow-{vertical-align:top;}}}

并且此配置的变体用于 CSS 声明。\#TBL-\TableNo-\HRow-包含id当前行。

以下示例:

% https://tex.stackexchange.com/q/490873/2891
\documentclass[12pt]{article}
\usepackage{mwe}%loads graphicx
\usepackage[export]{adjustbox} 
\usepackage{longtable}
\begin{document}

\begin{longtable}[c]{|p{1in}|p{3in}|p{1in}|}\hline 
Test A&\vspace{0pt}\includegraphics[width=3in,valign=t]{example-image-a}&TestB\\\hline
test d & \includegraphics[width=3in]{example-image-a}& test f\\\hline
test d & \includegraphics[width=3in,valign=b]{example-image-a}& test f\\\hline
\end{longtable}
\end{document}

产生以下结果:

在此处输入图片描述

相关内容