TeX4ht 无法正确生成重音字符(下面带点)

TeX4ht 无法正确生成重音字符(下面带点)

我想使用 TeX4ht 从 LaTeX 生成 HTML 中的重音字符(带有下面的点)。这是我的 MWE.tex:

\documentclass{book} 
\begin{document}

\d{s}

\d{ŕ}   

\end{document}

我使用以下命令获取 HTML:

$ make4ht -l MWE.tex

TeX Live 2022 中的结果如下: ŕ 下缺少点

这不太正确:ŕ 下缺少一个点。生成的 HTML 如下所示:

<p class='noindent'>ṣ</p>
<p class='indent'><span class='accentd'>ŕ</span></p>

这还不算太糟。我使用 XSLT 实现了一个解决方法,即对 HTML 文件进行后处理,并用 Unicode 字符(使用“组合下方点” Unicode 字符)替换元素spanŕ&#x323;从而产生所需的结果。

现在,在更新我的系统(到 Ubuntu 23.10)后,我正在使用 Tex Live 2023。结果现在如下所示: 第二个字符是 x 的图片,下面有一个点

下方带点的 x 现在是图像而不是字符(而且是错误的字符:我想要的是 ŕ,而不是 x)。生成的 HTML 如下所示:

<p class='noindent'>ṣ</p>
<p class='indent'><img alt='ŕ.  ' class='d' src='accents0x.png' /></p>

对我来说,这是 Tex Live 2022 的明显倒退。

我的问题:

  1. 我能在 Tex Live 2023 中获得与 Tex Live 2022 相同的结果吗?(我可以使用我的解决方法轻松解决这个问题)。
  2. 有没有一种不需要使用任何变通方法的解决方案?这意味着:\d{s}转换为\d{ŕ}转换为ŕ&#x323;

答案1

由于数学模式中的问题,我不得不更改重音的处理方式。例如,$\widehat$ 不起作用。您可以使用此配置文件获取原始的重音处理方式:

\Preamble{xhtml}
\catcode`\:=11
      \Configure{accents}
        {\ifmmode \expandafter\mathord\fi
         {\leavevmode
\if !#1!\ht:special{t4ht@+&\#x#2;}%
\else \expandafter \ifx\csname U#2#1\endcsname\relax
    \ht:special{t4ht@+&{35}x#2;}%
\else
    \ht:special{t4ht@+&{35}x\csname U#2#1\endcsname;}%
\fi \fi x%
%
         \ht:special{t4ht@[}x\ht:special{t4ht@]}}}
        {\ifmmode \expandafter\mathord\fi
          {\HCode{<span class='accent#1'>}#3\HCode{</span>}}}
\catcode`\:=12
\begin{document}
\EndPreamble

它生成以下 HTML:

<!-- l. 5 --><p class='noindent'>ṣ
</p><!-- l. 7 --><p class='indent'>   <span class='accentd'>ŕ</span>
</p>

要添加下面的点,您可以使用此make4ht构建文件而不是 XSLT:

local domfilter = require "make4ht-domfilter"
local process = domfilter {
  function(dom)
    for _, el in ipairs(dom:query_selector(".accentd")) do
      local accent = el:create_text_node(utf8.char(803))
      el:add_child_node(accent)
    end
    return dom
  end
}

Make:match("html$", process)

它循环遍历accentd元素并添加组合点。使用以下方法编译:

$ make4ht -e build.lua -c config.cfg sample.tex

结果如下:

在此处输入图片描述

<!--  l. 5  --><p class='noindent'>ṣ
</p><!--  l. 7  --><p class='indent'>   <span class='accentd'>ṛ́</span>
</p>

相关内容