在专家的帮助下表格中还有另一个图片对齐问题。希望文本从单元格顶部开始。未居中现在,使用时,我可以让文本和图像一起显示在长表中的正确位置lualatex
。
但是当我使用 make4ht 编译为 HTML 时,相同的解决方案不起作用。所以这个问题是问如何才能使结果在 HTML 和 PDF 中显示相同。这是一个 MWE。问题似乎是valign=t
fromadjustbox
在 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
给出预期的输出
编译同一个文件,make4ht foo4.tex
得到如下结果
我希望文本位于顶部,就像在 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;"
然后它就起作用了!
但是,我无法找出正确的 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}
产生以下结果: