我花了一段时间才找到原因。当给出p{}
表格列宽并使用mathml
选项时,htlatex 会在生成的 HTML 表格中丢失宽度规格。
重现起来非常简单。下面是 .tex 文件和命令以及 HTML 输出。
我需要使用,mathml
因为我在 htlatex 配置中使用 mathjax 来在屏幕上呈现 Latex 数学。如果不使用,mathml
mathjax 就无法工作。所以这是一个大问题,因为现在我指定列宽的所有表格在 HTML 版本中都丢失了。
最小工作乳胶文件
\documentclass{article}%
\begin{document}
\begin{tabular}{|p{3in}|p{1in}|p{1in}|}\hline
blablablaaablabla&blablablaaablabla&blablablaaablabla
\\\hline
\end{tabular}
\end{document}
此命令有效
htlatex index.tex "htm,p-width"
此命令不是工作
htlatex index.tex "htm,mathml,p-width"
“p-width”选项很重要。请参阅这以供参考。它由 Eitan 于 2004 年添加,以支持 HTML 中的列宽。
再次,我必须使用 mathml,并且还需要有固定宽度列的表格,或者能够指定列宽。现在,如果我要使用 MathJax 和 htlatx 生成的 HTML,我无法同时做到这两点。
有人知道解决办法吗?
TL 2012 Debian 软件包。
附言:其实我宁愿不使用 Mathjax,但如果没有它,使用 .png 生成的数学看起来就不太好,而且我还没想出如何让它看起来更好。所以,也许我应该在这上面花更多时间。如果我可以让 htlatex 使用 .png 图像生成好的数学,那么我就不必使用 Mathjax,也不必使用该mathml
选项,问题就解决了。
答案1
以下是使用 使表格宽度自动显示在 HTML 文件中的一个小尝试mathml
。我使用了MathJax + HTML5在配置文件中与其余的宏一起。
带表格的 TeX 示例
\documentclass{article}
\begin{document}
\begin{tabular}{|p{3in}|p{1in}|p{1in}|}\hline
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
$B (x) =-x ^ 2 + 60x-500$
blablablaaablabla
blablablaaablabla
blablablaaablabla
&
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
$B (x) =-x ^ 2 $
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
&
blablablaaablabla
blablablaaablabla
blablablaaablabla
$B (x) =500$
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
\\\hline
\end{tabular}
\tabwidth{9in}
\begin{tabular}{|p{3in}|p{1in}|p{1in}|l|c|r|}\hline
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
$B (x) =-x ^ 2 + 60x-500$
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
&
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
&
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
blablablaaablabla
&
Test
&
Test
& Test
\\\hline
a & b & c & a & b & c\\\hline
\end{tabular}
\tabwidth{7in}
\begin{tabular}{lcr lcr lcr}\hline
One & Two & Three & Four & Five & Six & Seven & Eight & Nine \\\hline
\end{tabular}
\end{document}
配置文件(ht5mathjax-tbwd.cfg)
\Preamble{xhtml,mathml}
\Configure{VERSION}{}
\Configure{DOCTYPE}{\HCode{<!DOCTYPE html>\Hnewline}}
\Configure{HTML}{\HCode{<html>\Hnewline}}{\HCode{\Hnewline</html>}}
\Configure{@HEAD}{}
\Configure{@HEAD}{\HCode{<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1" />\Hnewline}}
\Configure{@HEAD}{\HCode{<meta charset="UTF-8" />\Hnewline}}
\Configure{@HEAD}{\HCode{<meta name="generator" content="TeX4ht
(http://www.cse.ohio-state.edu/\string~gurari/TeX4ht/)" />\Hnewline}}
\Configure{@HEAD}{\HCode{<link
rel="stylesheet" type="text/css"
href="\expandafter\csname aa:CssFile\endcsname" />\Hnewline}}
\Configure{@HEAD}{\HCode{<script type="text/javascript"\Hnewline
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"\Hnewline
></script>\Hnewline}}
\Configure{@HEAD}{\HCode{<style type="text/css">\Hnewline
.MathJax_MathML {text-indent: 0;}\Hnewline
</style>\Hnewline}}
\begin{document}
\EndPreamble
\catcode`\:11
\catcode`\@11
% Added to fix the opening and closing <p> tags
\Configure{HtmlPar}
{\EndP\HCode{<!--l. \the\inputlineno-->%
<p \csname a:!P\endcsname
class="no\ifHCond par\else indent\fi" \a:LRdir>}}
{\EndP\HCode{<!--l. \the\inputlineno-->%
<p \csname a:!P\endcsname
class="\ifdim \parindent=\z@ no\fi indent" \a:LRdir>}}
{{\Tg</p>}}
{{\Tg</p>}}%
{
\def\x:Em{%
\catcode`\p=12
\catcode`\t=12
\gdef\x:Em}
\x:Em#1pt{#1}
}
\tmp:dim=10em
\edef\ten:Em#1.#2//{#1}
\edef\ten:Em{\expandafter\ten:Em \the\tmp:dim//}
\newdimen\tmp::dim
\newdimen\tmp:::dim
\def\tabwidth#1{\tmp::dim=#1}
\tmp::dim=5in
\def\paAignType{p}
\let\VBorder\empty \let\AllColMargins\empty
\newcount\Tab:PCell
\newcount\Tab:PVoid
\newdimen\Tab:Wd
\newdimen\Tab::XWd
\newdimen\Tab:XWd
\Configure{halignTB}{%
\@ifundefined{abc@Wdth-TBL-\TableNo}
{}
{\tmp::dim=\csname abc@Wdth-TBL-\TableNo\endcsname}%
\Tab::XWd=\tmp::dim%
\expandafter\ifx\csname abc@WdGZ-TBL-\TableNo\endcsname\relax\else%
\advance\Tab::XWd by -\csname abc@WdGZ-TBL-\TableNo\endcsname%
\divide\Tab::XWd by \csname abc@PVoid-TBL-\TableNo\endcsname%
\fi%
%
\divide\tmp::dim by \ten:Em\relax
\tmp::dim=10\tmp::dim
\HCode{<table style="table-layout:fixed;width:\expandafter\x:Em \the\tmp::dim em"
}}{\HCode{>}\tmp::dim=5in}
\Configure{VBorder}
{\let\VBorder\empty \let\AllColMargins\empty%
\global\let\GROUPS\empty \HAssign\NewGroup = 0%
\Tab:Wd=0pt\HAssign\Tab:PCell = 0\HAssign\Tab:PVoid = 0%
\gHAdvance\Next:TableNo by 1 \global\let\TableNo=\Next:TableNo }
{\xdef\VBorder{\VBorder\ifnum \NewGroup> 0 \HCode{\Hnewline</colgroup>}\fi}
\HAssign\NewGroup = 0 \gdef\GROUPS{rules="groups"}}
{\Advance:\NewGroup by 1
\ifnum \NewGroup=1 \xdef\VBorder{\VBorder\HCode{\Hnewline<colgroup
id="TBL-\TableNo-\ar:cnt g">}}\fi
\@ifundefined{abc@TBL-\TableNo-\ar:cnt}{}
{%
\tmp:dim=\csname abc@TBL-\TableNo-\ar:cnt\endcsname%
\divide\tmp:dim by \ten:Em\relax
\tmp:dim=10\tmp:dim
}%
\ifx\paAignType\ch:class
\gHAdvance\Tab:PCell by 1%
\@ifundefined{abc@TBL-\TableNo-\ar:cnt}{}
{\advance\Tab:Wd by \csname abc@TBL-\TableNo-\ar:cnt\endcsname}%
\else
\gHAdvance\Tab:PVoid by 1%
\fi
\xdef\VBorder{\VBorder\HCode{\Hnewline\space<col\Hnewline\space\space id="TBL-\TableNo
-\ar:cnt"\Hnewline}
\HColAlign\HCode{\Hnewline}
\ifx\paAignType\ch:class
\HCode{ width="\expandafter\x:Em \the\tmp:dim em"\Hnewline}
\immediate\write\@auxout{\string\expandafter\string\gdef%
\string\csname\space abc@TBL-\TableNo-\ar:cnt\string%
\endcsname{\csname @testpach \ar:cnt\endcsname}}
\else
\@ifundefined{abc@WdLCR-TBL-\TableNo}
{\HCode{ width="1*"\Hnewline}}
{\HCode{ width="\csname abc@WdLCR-TBL-\TableNo\endcsname"\Hnewline}}%
\fi
\HCode{/>}}\xdef\AllColMargins{\AllColMargins1}}
{\xdef\AllColMargins{\AllColMargins 0}}
\Configure{halignTD} {}{}
{<}{\HCode{ style="white-space:nowrap; text-align:left;"}}
{-}{\HCode{ style="white-space:nowrap; text-align:center;"}}
{>}{\HCode{ style="white-space:nowrap; text-align:right;"}}
{^}{\HCode{ style="vertical-align:top; white-space:nowrap;"}}
{=}{\HCode{ style="vertical-align:baseline; white-space:nowrap;"}}
{|}{\HCode{ style="vertical-align:middle; white-space:nowrap;"}}
{_}{\HCode{ style="vertical-align:bottom; white-space:nowrap;"}}
{p}{\HCode{ style="white-space:wrap; text-align:left;"}}%
{m}{\HCode{ style="white-space:nowrap; text-align:left; vertical-align:middle;"}}
{b}{\HCode{ style="white-space:nowrap; text-align:left; vertical-align:baseline;"}}
{}
\def\putVBorder{\expandafter\put:VBorder\VBorder</>!*?: }
\def\put:VBorder#1</#2>#3!*?: {\def\:temp{#2}\ifx\:temp\empty
\VBorder%
\def\:temp{#1}\ifx\:temp\empty \else\ifnum \NewGroup> 0\HCode{\Hnewline</colgroup>}\fi\fi
\else \def\:temp{\put:VBorder#3!*?: }\expandafter\:temp\fi
\immediate\write\@auxout{\string\expandafter\string\gdef%
\string\csname\space abc@TBL-\TableNo\string%
\endcsname{\ar:cnt}}
\immediate\write\@auxout{\string\expandafter\string\gdef%
\string\csname\space abc@PCell-TBL-\TableNo\string%
\endcsname{\Tab:PCell}}
\immediate\write\@auxout{\string\expandafter\string\gdef%
\string\csname\space abc@PVoid-TBL-\TableNo\string%
\endcsname{\Tab:PVoid}}
\expandafter\ifx\csname abc@PCell-TBL-\TableNo\endcsname\relax%
\else%
\expandafter\ifnum\csname abc@PVoid-TBL-\TableNo\endcsname=0%
\immediate\write\@auxout{\string\expandafter\string\gdef%
\string\csname\space abc@Wdth-TBL-\TableNo\string%
\endcsname{\the\Tab:Wd}}
\fi%
\expandafter\ifnum\csname abc@PVoid-TBL-\TableNo\endcsname>0%
\immediate\write\@auxout{\string\expandafter\string\gdef%
\string\csname\space abc@WdGZ-TBL-\TableNo\string%
\endcsname{\the\Tab:Wd}}
\divide\Tab::XWd by \ten:Em\relax
\Tab::XWd=10\Tab::XWd
\immediate\write\@auxout{\string\expandafter\string\gdef%
\string\csname\space abc@WdLCR-TBL-\TableNo\string%
\endcsname{\expandafter\x:Em \the\Tab::XWd em}}%
\fi%
\fi%
}
\endinput
命令行
htlatex <filename> ht5mathjax-tbwd
了解问题
- cfg 写入
.aux
用于计算单元格的宽度。因此您需要至少运行两次该htlatex
命令。 - 如果表格仅包含具有
p{...}
值的单元格(例如tabular
我示例中的第一个),则无需\tabwidth{...}
在之前提供\begin{tabular}{...}
。配置文件本身将通过添加单元格宽度来计算宽度。如果任何单元格包含l,c,r
,则需要设置\tabwidth{...}
,否则当我们在浏览器中查看时,单元格将重叠。
希望这可以帮助。