![使用 SVG 时,tex4ht 与表格内和表格外的数学运算发生冲突](https://linux22.com/image/381765/%E4%BD%BF%E7%94%A8%20SVG%20%E6%97%B6%EF%BC%8Ctex4ht%20%E4%B8%8E%E8%A1%A8%E6%A0%BC%E5%86%85%E5%92%8C%E8%A1%A8%E6%A0%BC%E5%A4%96%E7%9A%84%E6%95%B0%E5%AD%A6%E8%BF%90%E7%AE%97%E5%8F%91%E7%94%9F%E5%86%B2%E7%AA%81.png)
我发现使用 tex4ht 和 SVG 进行数学运算时存在问题。
我需要制作一个表格,并在其中放入数学运算。我发现表格内的相同数学运算与表格外的数学运算相比看起来很糟糕。经过一些调试,结果发现 tex4ht 需要以下配置来修复表格内的数学运算
\ifdefined\HCode
\Configure{$}{\PicMath}{\EndPicMath}{}
\Configure{PicMath}{}{}{}{class="math";align="absmiddle"}
\fi
我不知道这是为什么。下面是 MWE,显示了当缺少上述 tex4ht 配置时,表格内部与外部的数学差异:
\documentclass[11pt]{article}
\usepackage{amsmath,mathtools,amssymb}
\begin{document}
%\ifdefined\HCode
%\Configure{$}{\PicMath}{\EndPicMath}{}
%\Configure{PicMath}{}{}{}{class="math";align="absmiddle"}
%\fi
\begin{align*}
\left( x+y \left( x \right) \right) {\frac {d}{{d}x}}y \left( x \right) &=x-y \left( x \right)\\
{t}^{2}+4\,ty \left( t \right) + \left( 2\,{t}^{2}+2\,y \left( t \right) \right) {\frac {d}{{d}t}}y \left( t \right) &=0\\
t-2\,{{e}^{ty \left( t \right) }}\sin \left( 2\,t \right) +{{e}^{ty \left( t \right) }}\cos \left( 2\,t \right) y \left( t \right) + \left( -3+{{ e}^{ty \left( t \right) }}t\cos \left( 2\,t \right) \right) {\frac {d}{{\rm d}t}}y \left( t \right) &=0
\end{align*}
\begin{center}
\begin{tabular}{|c|c|}\hline
1&$ \left( x+y \left( x \right) \right) {\frac {\rm d}{{\rm d}x}}y \left( x \right) =x-y \left( x \right) $\\\hline
2&$3\,{t}^{2}+4\,ty \left( t \right) + \left( 2\,{t}^{2}+2\,y \left( t \right) \right) {\frac {\rm d}{{\rm d}t}}y \left( t \right) =0$\\\hline
3&$2\,t-2\,{{\rm e}^{ty \left( t \right) }}\sin \left( 2\,t \right) +{{\rm e}^{ty \left( t \right) }}\cos \left( 2\,t \right) y \left( t \right) + \left( -3+{{\rm e}^{ty \left( t \right) }}t\cos \left( 2\,t \right) \right) {\frac {\rm d}{{\rm d}t}}y \left( t \right) =0$\\\hline
\end{tabular}
\end{center}
\end{document}
然后编译
rm -f *.svg
make4ht -ul -f html5+dvisvgm_hashes foo.tex "htm,pic-align,p-width,svg"
make4ht -ul -f html5+dvisvgm_hashes foo.tex "htm,pic-align,p-width,svg"
显然,表格单元格内的数学运算不正确。基线存在大量错位,并且一些字母之间的间距在很多地方都很狭窄。下面是上述相同代码的结果,但删除了代码上的注释后\ifdefined
,它现在处于活动状态:
现在表格内的数学运算是正确的。它看起来就像外面的数学运算一样。
那么,你可能会问,那么为什么不保留\ifdefined
代码在那里,问题就解决了,对吗?
但实际问题来了。
保留\ifdefined
其中的代码来修复数学问题,会在其他地方引发大问题。
现在 tex4ht 将不再接受表格的固定宽度列p-width
。我需要有固定宽度的列,因为实际的表格会变得太宽(它有其他列,这里没有显示)。如果不一直滚动,就很难在网页上看到表格。
所以现在当我想制作一个表格并例如让单元格宽度为 2 英寸时,它将无法工作。
\documentclass[11pt]{article}
\usepackage{amsmath,mathtools,amssymb}
\begin{document}
\ifdefined\HCode
\Configure{$}{\PicMath}{\EndPicMath}{}
\Configure{PicMath}{}{}{}{class="math";align="absmiddle"}
\fi
\begin{center}
\begin{tabular}{|p{1in}|p{2in}|}\hline
1&$ \left( x+y \left( x \right) \right) {\frac {\rm d}{{\rm d}x}}y \left( x \right) =x-y \left( x \right) $\\\hline
2&$3\,{t}^{2}+4\,ty \left( t \right) + \left( 2\,{t}^{2}+2\,y \left( t \right) \right) {\frac {\rm d}{{\rm d}t}}y \left( t \right) =0$\\\hline
3&$2\,t-2\,{{\rm e}^{ty \left( t \right) }}\sin \left( 2\,t \right) +{{\rm e}^{ty \left( t \right) }}\cos \left( 2\,t \right) y \left( t \right) + \left( -3+{{\rm e}^{ty \left( t \right) }}t\cos \left( 2\,t \right) \right) {\frac {\rm d}{{\rm d}t}}y \left( t \right) =0$\\\hline
\end{tabular}
\end{center}
\end{document}
现在
rm -f *.svg
make4ht -ul -f html5+dvisvgm_hashes foo.tex "htm,pic-align,p-width,svg"
tex4ht 只是忽略了p-width
。为了让宽度起作用,我必须删除代码\ifdefined
,如下所示:
\documentclass[11pt]{article}
\usepackage{amsmath,mathtools,amssymb}
\begin{document}
\begin{center}
\begin{tabular}{|p{1in}|p{2in}|}\hline
1&$ \left( x+y \left( x \right) \right) {\frac {\rm d}{{\rm d}x}}y \left( x \right) =x-y \left( x \right) $\\\hline
2&$3\,{t}^{2}+4\,ty \left( t \right) + \left( 2\,{t}^{2}+2\,y \left( t \right) \right) {\frac {\rm d}{{\rm d}t}}y \left( t \right) =0$\\\hline
3&$2\,t-2\,{{\rm e}^{ty \left( t \right) }}\sin \left( 2\,t \right) +{{\rm e}^{ty \left( t \right) }}\cos \left( 2\,t \right) y \left( t \right) + \left( -3+{{\rm e}^{ty \left( t \right) }}t\cos \left( 2\,t \right) \right) {\frac {\rm d}{{\rm d}t}}y \left( t \right) =0$\\\hline
\end{tabular}
\end{center}
\end{document}
现在p-width
有用了。但数学又变糟了。所以又回到原点。
我需要能够拥有固定宽度列的表格,同时让数学看起来与表格外的数学一样美观,并且仍然使用 SVG。但这存在冲突。
由于某种原因,当同时使用 SVG 和 make4ht 数学时,表格单元格内无法正确呈现\Configure{$}{\PicMath}{\EndPicMath}{}
。可能是 dvisvgm 的问题。我不知道。
有没有解决的办法?
我正在使用最新的 TL 2018,其中包含 make4ht 和 tex4ht 的最新更新。
答案1
该pic-tabular
选项要求将所有表格环境转换为图片。如果您只想转换其中一些表格,最好使用自定义环境,该环境会将随附的代码转换为图片。
它看起来像这样:
% file pictureenv.sty
\newenvironment{pictureenv}{}{}
\endinput
它需要 tex4ht 配置:
% pictureenv.4ht
\ConfigureEnv{pictureenv}{\Picture*{}}{\EndPicture}{}{}
使用示例:
\documentclass[11pt]{article}
\usepackage{amsmath,mathtools,amssymb}
\usepackage{pictureenv}
\begin{document}
\begin{align*}
\left( x+y \left( x \right) \right) {\frac {d}{{d}x}}y \left( x \right) &=x-y \left( x \right)\\
{t}^{2}+4\,ty \left( t \right) + \left( 2\,{t}^{2}+2\,y \left( t \right) \right) {\frac {d}{{d}t}}y \left( t \right) &=0\\
t-2\,{{e}^{ty \left( t \right) }}\sin \left( 2\,t \right) +{{e}^{ty \left( t \right) }}\cos \left( 2\,t \right) y \left( t \right) + \left( -3+{{ e}^{ty \left( t \right) }}t\cos \left( 2\,t \right) \right) {\frac {d}{{\rm d}t}}y \left( t \right) &=0
\end{align*}
\begin{center}
\begin{pictureenv}
\begin{tabular}{|p{1in}|p{2in}|}\hline
1&$ \left( x+y \left( x \right) \right) {\frac {\rm d}{{\rm d}x}}y \left( x \right) =x-y \left( x \right) $\\\hline
2&$3\,{t}^{2}+4\,ty \left( t \right) + \left( 2\,{t}^{2}+2\,y \left( t \right) \right) {\frac {\rm d}{{\rm d}t}}y \left( t \right) =0$\\\hline
3&$2\,t-2\,{{\rm e}^{ty \left( t \right) }}\sin \left( 2\,t \right) +{{\rm e}^{ty \left( t \right) }}\cos \left( 2\,t \right) y \left( t \right) + \left( -3+{{\rm e}^{ty \left( t \right) }}t\cos \left( 2\,t \right) \right) {\frac {\rm d}{{\rm d}t}}y \left( t \right) =0$\\\hline
\end{tabular}
\end{pictureenv}
\end{center}
\end{document}