我正在使用给出的解决方案如何使单元格文本垂直居中? 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& \to R\\ y& \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}
我声明了一个新的命令、\centercell
和C
列类型:
\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
,因为所有表格单元格都已设置对齐方式。
结果如下: