如何在 tex4ht 中改进 SVG 的数学分辨率?

如何在 tex4ht 中改进 SVG 的数学分辨率?

make4ht 现在支持 mathjax 和 svg 进行数学运算。

我注意到,使用 mathjax 模式时浏览器中显示的数学运算看起来比使用 svg 进行数学运算时更清晰。

因此,这个问题是询问如何提高 svg 数学分辨率,以及如果需要,需要什么配置。我想使用 SVG 进行数学运算,但这种差异是我使用 tex4ht 编译为 mathjax 的原因之一。

为了显示这种差异,这里有一个 MWE 和用于编译它们的命令,以便您可以在浏览器上亲自看到我的意思。

\documentclass[11pt]{article}
\usepackage{amsmath}
\begin{document}

\[
\arctan\left(
\frac{2 \alpha  (a y+b x)+\beta }{a \alpha  
\sqrt{\frac{4 a \alpha  \gamma -a \beta ^2+4 \alpha  b c}{a^3 \alpha ^2}}}
\right)
\]
\end{document}

这是在 Chrome 浏览器中使用以下命令编译为 mathjax 后的样子(全部一行)

make4ht -ulm default foo.tex 
      "htm,mathjax,notoc*,p-width,charset=utf-8" " -cunihtf -utf8"

Mathematica 图形

使用以下命令编译后的效果如下(全部在一行上)

make4ht -ulm default -f html5+dvisvgm_hashes foo.tex 
        "html,pic-align,notoc*,p-width,svg"

Mathematica 图形

实际上,在上面我必须使用浏览器放大到 150% 甚至更多才能截取这些屏幕截图。在浏览器中放大 100% 后,可以更清楚地看到 mathjax 数学看起来比 svg 数学更清晰、更清晰、更易于阅读。svg math 更轻量还有。如果我可以像 mathjax 那样将其调暗,那么这应该会很有帮助。但我不知道该怎么做。

我知道如何增加生成的 SVG 数学的大小。这确实有点帮助。

以下是浏览器 100% 状态下两种情况的屏幕截图,并排显示,这样更容易看出区别

Mathematica 图形

仅供参考,这是 dvisvgm 生成的上述方程的 SVG 图像文件的标题

<?xml version='1.0' encoding='UTF-8'?>
<!-- This file was generated by dvisvgm 2.6.3 -->
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' 
 xmlns:xlink='http://www.w3.org/1999/xlink' width='160.406143pt' 
 height='47.409423pt' viewBox='124.191939 126.956513 160.406143 47.409423'>

我的问题是:tex4ht 生成的 SVG 数学公式是否可以看起来比现在更好?

使用 TL 2019

答案1

您可以更改字体、TeX 引擎或图像转换器。在此示例中,我将字体更改为 Latin Modern 并调整命令行。特别是,请确保您同时传入了svg生成矢量图形的选项和dvisvgm_hashes使用 执行此操作的选项dvisvgm

您似乎生成的是光栅图像,而不是矢量图像。我真的不知道您传入的哪个其他选项切换到了 PNG 输出。

使用 make4ht 或 htlatex

我向您的 MCVE 添加了一些命令,将字体更改为 Latin Modern 的 Type 1 版本,这更接近 MathJax 输出使用的字体:

\documentclass[11pt]{article}
\usepackage{amsmath}
\usepackage[T1]{fontenc}
\usepackage{lmodern, textcomp}
\begin{document}

\[
\arctan\left(
\frac{2 \alpha  (a y+b x)+\beta }{a \alpha  
\sqrt{\frac{4 a \alpha  \gamma -a \beta ^2+4 \alpha  b c}{a^3 \alpha ^2}}}
\right)
\]
\end{document}

(您也许可以删除textcomp。)

以下命令行应该适合您:

make4ht -ul -f html5+dvisvgm_hashes foo.tex "htm,svg"

当我最初发布时,我在 Windows 10 上的 TeX Live 2019 上遇到了一个错误。它应该会在下一次更新中修复,感谢@michal.h21!如果您需要一个临时的、次优的解决方法:

htlatex sx-svgout.tex "html,html5,htm,charset=utf-8,svg" "-cmozhtf -utf8"

您可能想进一步调整它。

这样就能生成更符合您要求的图形。这是 PNG 转换图,我可以将其上传到此网站。您可能需要在新选项卡中打开图像才能看到其全尺寸。

ht4latex 样本

它生成的 HTML 文件如下所示:

<!DOCTYPE html> 
<html lang="en-US" xml:lang="en-US" > 
<head><title></title> 
<meta  charset="utf-8" /> 
<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)" /> 
<meta name="viewport" content="width=device-width,initial-scale=1" /> 
<link rel="stylesheet" type="text/css" href="sx-svgout.css" /> 
<meta name="src" content="sx-svgout.tex"> 
</head><body 
>
   <center class="par-math-display" >
<img 
src="sx0x.svg" alt="      (                  )
         2α(ay + bx)+ β
arctan ( --∘--------2-----)
        aα  4aαγ-aa3βα2+4αbc
" class="par-math-display" ></center>
<!--l. 12--><p class="nopar" >  
</body> 
</html>

您也可以生成 MathML,但是您说您需要 HTM 文件,而不是 XHTML。

原始答案:生成 SVG 输出

我稍微修改了您的示例,以使用与 MathJax 相同的 OpenType 字体,并将其编译为独立图像而无需裁剪:

\documentclass[11pt, varwidth]{standalone}
\usepackage{amsmath}
\usepackage{unicode-math}
\begin{document}

\[
\arctan\left(
\frac{2 \alpha  (a y+b x)+\beta }{a \alpha  
\sqrt{\frac{4 a \alpha  \gamma -a \beta ^2+4 \alpha  b c}{a^3 \alpha ^2}}}
\right)
\]
\end{document}

使用 LuaLaTeX 将其编译为 PDF,然后使用将其从 PDF 转换为 SVG pdf2cairo -svg,得到的 SVG 看起来更像您的 Inkscape 示例。

这是将 SVG 转换为光栅图像后的结果,我可以将其发布到 TeX.SX。您可能需要在新选项卡中打开它才能看到其全尺寸。

拉丁现代数学样本

如果您需要 DVI 输出或向后兼容 NFSS,您仍然可以更改字体。\usepackage{unicode-math}用命令替换

\usepackage[T1]{fontenc}
\usepackage{lmodern, textcomp}

相关内容