在 htlatex 中使用 mathml 会导致生成的 html 中丢失表格 p 宽度规范

在 htlatex 中使用 mathml 会导致生成的 html 中丢失表格 p 宽度规范

我花了一段时间才找到原因。当给出p{}表格列宽并使用mathml选项时,htlatex 会在生成的 HTML 表格中丢失宽度规格。

重现起来非常简单。下面是 .tex 文件和命令以及 HTML 输出。

我需要使用,mathml因为我在 htlatex 配置中使用 mathjax 来在屏幕上呈现 Latex 数学。如果不使用,mathmlmathjax 就无法工作。所以这是一个大问题,因为现在我指定列宽的所有表格在 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

了解问题

  1. cfg 写入.aux用于计算单元格的宽度。因此您需要至少运行两次该htlatex命令。
  2. 如果表格仅包含具有p{...}值的单元格(例如tabular我示例中的第一个),则无需\tabwidth{...}在之前提供\begin{tabular}{...}。配置文件本身将通过添加单元格宽度来计算宽度。如果任何单元格包含l,c,r,则需要设置\tabwidth{...},否则当我们在浏览器中查看时,单元格将重叠。

希望这可以帮助。

相关内容