为什么使用 tex4ht 时表格内的居中段落不起作用?

为什么使用 tex4ht 时表格内的居中段落不起作用?

我正在使用给出的解决方案如何使单元格文本垂直居中? Jimi Oke 的作品,对我来说很管用:

如果你还想让所有单元格内容在水平方向上向中心对齐

\begin{tabular}{ >{\centering\arraybackslash} m{4cm} >{\centering\arraybackslash} m{4cm} }
   ... & ... \\end{tabular}

在 pdf 中,它按预期显示。但是当使用 tex4ht 编译为 html 时,列不居中。这是 MWE

\documentclass[12pt,titlepage]{article}

\usepackage{amsmath}
\usepackage{array}
\begin{document} 
\begin{center}
\begin{tabular}{| >{\centering\arraybackslash} m{2.5in}| >{\centering\arraybackslash} m{1in}|>{\centering\arraybackslash} m{2.5in}|  }\hline
Original ode in $x,y$ coordinates & Canonical coordinates transformation & ODE in canonical coordinates\\\hline 
$y'=\frac{y}{x}+x$ &
&
$S'=R$\\
text
&
{$\!\begin{aligned}
x& \to R\\
y& \to RS 
\end{aligned} 
$}
&
text\\\hline 
\end{tabular}
\end{center}

\end{document}

使用 TL 2022 上的 lualatex 编译为 pdf 得到

在此处输入图片描述

使用以下方式编译为 html

make4ht -ulm default -a debug main.tex "mathjax,htm"

给出

在此处输入图片描述

这不是居中。我知道我可以使用c列居中,这在 tex4ht 中有效,但我需要使用上面问题中给出的解决方案,原因与上面给出的相同,即

如何使单元格文本垂直居中?

问题是:是否可以使用相同的乳胶代码使输出在 HTML 中居中​​?

tex4ht 生成的原始 HTML 是

<!DOCTYPE html> 
<html lang='en-US' xml:lang='en-US'> 
<head><title></title> 
<meta charset='utf-8' /> 
<meta content='TeX4ht (https://tug.org/tex4ht/)' name='generator' /> 
<meta content='width=device-width,initial-scale=1' name='viewport' /> 
<link href='main.css' rel='stylesheet' type='text/css' /> 
<meta content='main.tex' name='src' /> 
<script>window.MathJax = { tex: { tags: "ams", }, }; </script> 
 <script async='async' id='MathJax-script' src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml-full.js' type='text/javascript'></script>  
</head><body>
<div class='center'>
<!-- l. 60 --><p class='noindent'>
</p>
<div class='tabular'> <table class='tabular' id='TBL-1'><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></td><td></td><td></td></tr><tr id='TBL-1-1-' style='vertical-align:baseline;'><td class='td11' id='TBL-1-1-1' style='white-space:nowrap; text-align:left; vertical-align:middle;'> <!-- l. 62 --><p class='noindent'>Original ode in \(x,y\) coordinates           </p></td>
                                        <td class='td11' id='TBL-1-1-2' style='white-space:nowrap; text-align:left; vertical-align:middle;'> <!-- l. 62 --><p class='noindent'>Canonical 
coordinates 
transformation </p></td>
                                                          <td class='td11' id='TBL-1-1-3' style='white-space:nowrap; text-align:left; vertical-align:middle;'> <!-- l. 62 --><p class='noindent'>ODE in canonical coordinates        </p></td>
</tr><tr class='hline'><td></td><td></td><td></td></tr><tr id='TBL-1-2-' style='vertical-align:baseline;'><td class='td11' id='TBL-1-2-1' style='white-space:nowrap; text-align:left; vertical-align:middle;'> <!-- l. 63 --><p class='noindent'>\(y'=\frac {y}{x}+x\)                               </p></td>
<td class='td11' id='TBL-1-2-2' style='white-space:nowrap; text-align:left; vertical-align:middle;'> <!-- l. 64 --><p class='noindent'>             </p></td>
<td class='td11' id='TBL-1-2-3' style='white-space:nowrap; text-align:left; vertical-align:middle;'> <!-- l. 65 --><p class='noindent'>\(S'=R\)                              </p></td>
</tr><tr id='TBL-1-3-' style='vertical-align:baseline;'><td class='td11' id='TBL-1-3-1' style='white-space:nowrap; text-align:left; vertical-align:middle;'> <!-- l. 66 --><p class='noindent'>text                                           </p></td>
<td class='td11' id='TBL-1-3-2' style='white-space:nowrap; text-align:left; vertical-align:middle;'> <!-- l. 68 --><p class='noindent'>\(\!\begin {aligned} x&amp; \to R\\ y&amp; \to RS \end {aligned} \)             </p></td>
<td class='td11' id='TBL-1-3-3' style='white-space:nowrap; text-align:left; vertical-align:middle;'> <!-- l. 74 --><p class='noindent'>text                                          </p></td>
</tr><tr class='hline'><td></td><td></td><td></td></tr></table>                                                         </div></div>
 
</body> 
</html>

TL2022。

答案1

您可以稍微简化一下您的文档:

\documentclass[12pt,titlepage]{article}

\usepackage{amsmath}
\usepackage{array}
\newcommand\centercell{\centering\arraybackslash}
\newcolumntype{C}{>{\centercell} m}
\begin{document} 
\begin{center}
\begin{tabular}{| C{2.5in}| C{1in}| C{2.5in}|  }\hline
Original ode in $x,y$ coordinates & Canonical coordinates transformation & ODE in canonical coordinates\\\hline 
$y'=\frac{y}{x}+x$ &
&
$S'=R$\\
text
&
{$\!\begin{aligned}
x& \to R\\
y& \to RS 
\end{aligned} 
$}
&
text\\\hline 
\end{tabular}
\end{center}

\end{document}

我声明了一个新的命令、\centercellC列类型:

\newcommand\centercell{\centering\arraybackslash}
\newcolumntype{C}{>{\centercell} m}

由于这一点,您可以用更简单的方式声明表格:

 \begin{tabular}{| C{2.5in}| C{1in}| C{2.5in}|  }\hline

编辑:

您也可以尝试这个配置文件:

\Preamble{xhtml}


\catcode`\:=11
\makeatletter
\Configure{halignTD} {}{}
   {m}{\HCode{ style="white-space:wrap; text-align:center; vertical-align:middle;"}\Protect\a:HColWidth}
   {}

  \Configure{HColWidth}
     {\ifnum\HRow=1% output CSS only on the first row, to prevent duplication
      \tmp:dim=\HColWidth \divide\tmp:dim by \f@size\relax
      \Css{\#TBL-\TableNo\space td:nth-child(\HCol)% CSS selects ID of the current table column
          {width: \strip@pt\tmp:dim em;}}
     \fi}


\makeatother
\catcode`\:=12

\begin{document}
\EndPreamble

它使用说明符m声明列与中心对齐,并保存列宽。结果如下:

在此处输入图片描述


原始答案:

然后,您可以\centercell在 TeX4ht 中重新定义命令以插入用于对齐更改的 CSS 指令:

\Preamble{xhtml}
\renewcommand\centercell{%
\Css{\#TBL-\TableNo-\HRow-\HCol, \#TBL-\TableNo-\HRow-\HCol p{text-align: center !important;}}%
\centering\arraybackslash}

\begin{document}
\EndPreamble

重点是:

 \Css{\#TBL-\TableNo-\HRow-\HCol, \#TBL-\TableNo-\HRow-\HCol p{text-align: center !important;}}%

获取每个表格单元格的唯一 ID后\#TBL-\TableNo-\HRow-\HCol,您就可以定义对齐方式。我们需要使用!important,因为所有表格单元格都已设置对齐方式。

结果如下:

在此处输入图片描述

相关内容