make4ht 和 tex4ht 的排版问题——数学字符的字距似乎太近

make4ht 和 tex4ht 的排版问题——数学字符的字距似乎太近

我真的很喜欢make4httex4ht,因为它们终于让我在生成网页时保留了所有工具。我遇到的一个小问题与数学模式下某些字符的字距调整有关。因此,如果我有一张tikz图片,我得到的东西看起来就像这样。

在下图中,您可以看到角色sigma距离矢量的框架太近,并且下支撑也与数组有一点偏离。

在此处输入图片描述

在相应的 pdf 输出中,这些问题不存在。现在我可以添加一些空格或其他东西作为解决方法,但我想检查一下我是否做错了什么或有什么简单的修复方法。这可能是某种 CSS 问题吗?

请注意,如果有帮助的话,我可以提供更多示例。

更新

我附上了一个完整的示例。这是重现该问题的代码。

首先,这是我使用的命令字符串:

make4ht -d html -f html5+latexmk_build -s mydevfile.tex 

这里是myconfig.cfg

\Preamble{xhtml,mathjax}
\Configure{@BODY}{\IgnorePar
\HCode{\detokenize{\(}}
\special{t4ht*<mymacros.tex}
\HCode{\detokenize{\)}}
\par
}
\begin{document}
\EndPreamble

文件mymacros.tex

\def\RRRR{{\bf R}}
\newcommand\bface[1]{{\mathbf #1}}
\newcommand\grid[3]{
  \begin{tikzpicture}[baseline=(current bounding box)]
    \foreach \x in {1,...,#2} {
      \foreach \y in {1,...,#1} {
        \draw[fill=#3, color=#3] ($(0.4*\x, 0.4*\y)$) circle[radius=0.15cm];
      }
    }
    \draw (0.2, 0.2) rectangle ($(0.4*#2, 0.4*#1) + (0.2, 0.2)$);
  \end{tikzpicture}
}
\renewcommand{\vec}[1]{\mathbf{#1}}

文件mymacros.sty

\ProvidesPackage{mymacros}
\input{mymacros.tex}
\endinput

最后,这是一个最小的乳胶文档mydevfile.tex

\documentclass[12pt, a4paper, oneside, headinclude, footinclude]{article}

\ifdefined\HCode
  \def\pgfsysdriver{pgfsys-dvisvgm4ht.def}
\fi 

\usepackage{tikz}
\usetikzlibrary{shapes.multipart, positioning, decorations.markings,
  arrows.meta, calc, fit}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{mymacros}

\title{\normalfont\spacedallcaps{My doc}}
\author{\spacedlowsmallcaps{kb}} 
\date{\today\\version 0.1}
\begin{document} 

\pagestyle{scrheadings} 
\maketitle 
\setcounter{tocdepth}{2}
\tableofcontents 

\section*{First Section}

\[
  \RRRR = \bface{x}
\]
Some simple text.


\[
  \underbrace{\grid{10}{1}{red}}_{\mathbf{\hat{x}}} =
  \sigma \left( \underbrace{\grid{10}{5}{blue}}_{\mathbf{u}^\top}
    \sigma \left( \underbrace{\grid{5}{2}{blue}}_{\mathbf{w}^\top} 
      \sigma \left(\underbrace{\grid{2}{5}{blue}}_{\mathbf{U}}
        \sigma\left( \underbrace{\grid{5}{10}{blue}}_{\mathbf{V}}
          \underbrace{\grid{10}{1}{red}}_{x}\right)\right) \right) \right)
\]
\end{document}

现在图片看起来像这样: 在此处输入图片描述

答案1

看起来您想结合两种方法来显示数学:我猜您想使用 MathJax 进行内联数学运算,使用 SVG 图片来显示数学运算。问题是大多数数学环境和命令都被重新定义为在 MathJax 模式下输出传递给它们的文字 LaTeX 代码。这意味着\grid使用 TikZ 的命令无法工作,因为 MathJax 不支持 TikZ。

要配置\[ ... \]生成图片,您可以尝试以下配置文件:

\Preamble{xhtml,mathjax}
% don't redefine \left and \right
\def\fixmathjaxsec#1{}
\Configure{[]}
   {\bgroup%
       \protect\csname nested:math\endcsname%
       \PicDisplay%
       $$\everymath{}\everydisplay{}}
   {$$\EndPicDisplay \egroup \ShowPar \par{\HCondtrue\noindent}%
}

\begin{document}
\EndPreamble

我使用了\Configure{[]}默认 HTML 配置中的命令。重要的命令是\PicDisplay\EndPicDisplay,它们将包含的内容转换为图像。其余命令处理段落和数学嵌套。其中一件重要的事情是\def\fixmathjaxsec#1{}。此命令的原始版本重新定义了传递给它的命令以产生文字输出。它用于\left\right命令,因为它们在部分中使用时会导致一些问题。我们需要防止这种情况发生。请记住,您不应该在部分中使用\left\right,否则您会收到错误。

结果如下:

在此处输入图片描述

相关内容