TL 十月更新后,tex4ht 中的 hyperref 问题非常严重

TL 十月更新后,tex4ht 中的 hyperref 问题非常严重

这似乎是在我昨晚在 Linux 上更新 TL 2020 之后发生的。

现在,当使用 tex4ht 将其中包含的相同 Latex 文件构建url{}为 HTML 时,所有 URL 都乱套了,单击任何 URL 都会出现找不到页面的错误。

使用lualatex编译的PDF没有问题。

实际情况是这样的

   https://mathematica.stackexchange.com/landing/r/digest?cta=question&id=234780 

现在在生成的 HTML 中显示为

<a class='url' 
  href='https://mathematica.stackexchange.com/landing/r/digest cta=question&amp;id;=234780'>
<span class='rm-lmtt-12'>

注意结尾处的差异。

以下是 MWE 和生成 HTML 的命令

\documentclass[12pt]{book}
\usepackage{hyperref}
\begin{document}

\url{https://mathematica.stackexchange.com/landing/r/digest?cta=question&id=234780}

\end{document}

使用编译

make4ht -ulm default -a debug foo4.tex "mathjax,htm"

在本次 TL 更新之前没有出现过这样的问题。我查看了 OCT 更新之前编译的 HTML 页面,那里的 URL 是正确的。这里是从本次更新之前编译的 HTML 页面源代码中随机复制的

 https://mathematica.stackexchange.com/landing/r/digest?cta=question&#x0026;id=234240

还有人遇到过这个问题吗?有解决方法吗?

文件列表:

 *File List*
    book.cls    2020/04/10 v1.4m Standard LaTeX document class
    bk12.clo    2020/04/10 v1.4m Standard LaTeX file (size option)
hyperref.sty    2020-05-15 v7.00e Hypertext links for LaTeX
 ltxcmds.sty    2020-05-10 v1.25 LaTeX kernel commands for general use (HO)
   iftex.sty    2020/03/06 v1.0d TeX engine tests
pdftexcmds.sty    2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO)
infwarerr.sty    2019/12/03 v1.5 Providing info/warning/error messages (HO)
  keyval.sty    2014/10/28 v1.15 key=value parser (DPC)
kvsetkeys.sty    2019/12/15 v1.18 Key value parser (HO)
kvdefinekeys.sty    2019-12-19 v1.6 Define keys (HO)
pdfescape.sty    2019/12/09 v1.15 Implements pdfTeX's escape features (HO)
 hycolor.sty    2020-01-27 v1.10 Color options for hyperref/bookmark (HO)
letltxmacro.sty    2019/12/03 v1.6 Let assignment for LaTeX macros (HO)
 auxhook.sty    2019-12-17 v1.6 Hooks for auxiliary files (HO)
kvoptions.sty    2020-10-07 v3.14 Key value format for package options (HO)
  pd1enc.def    2020-05-15 v7.00e Hyperref: PDFDocEncoding definition (HO)
 intcalc.sty    2019/12/15 v1.3 Expandable calculations with integers (HO)
etexcmds.sty    2019/12/15 v1.7 Avoid name clashes with e-TeX commands (HO)
     url.sty    2013/09/16  ver 3.4  Verb mode for urls, etc.
  bitset.sty    2019/12/09 v1.3 Handle bit-vector datatype (HO)
bigintcalc.sty    2019/12/15 v1.5 Expandable calculations on big integers (HO)
atbegshi.sty    2020/08/17 v1.0a Emulation of the original atbegshi package
with kernel methods
 hluatex.def    2020-05-15 v7.00e Hyperref driver for luaTeX
   puenc.def    2020-05-15 v7.00e Hyperref: PDF Unicode definition (HO)
stringenc.sty    2019/11/29 v1.12 Convert strings between diff. encodings (HO)
atveryend.sty    2020/08/19 v1.0a Emulation of the original atvery package
with kernel methods
rerunfilecheck.sty    2019/12/05 v1.9 Rerun checks for auxiliary files (HO)
uniquecounter.sty    2019/12/15 v1.4 Provide unlimited unique counter (HO)
l3backend-luatex.def    2020-09-24 L3 backend support: PDF output (LuaTeX)
  ts1cmr.fd    2019/12/16 v2.5j Standard LaTeX font definitions
 nameref.sty    2019/09/16 v2.46 Cross-referencing by name of section
refcount.sty    2019/12/15 v3.6 Data extraction from label references (HO)
gettitlestring.sty    2019/12/15 v1.6 Cleanup title references (HO)

答案1

您已经发现这种情况只发生在 上make4ht。它使用 LuaXML 库来清理生成的 HTML 代码。它解析 XML 实体的方式似乎存在错误。它尝试将命名实体转换为 Unicode 字符。它误认为&id是命名实体。由于它找不到id和 任何 Unicode 字符之间的映射,因此它返回原始实体。但问题来了,它附加了分号。所以您的 url 来自:

https://mathematica.stackexchange.com/landing/r/digest?cta=question&id=234780 

https://mathematica.stackexchange.com/landing/r/digest?cta=question&id;=234780

在处理过程中,会&变成&amp;,但虚假的分号仍然存在。实际错误是&id被解析为 HTML 实体。只有 和 之间的文本才&应该;被解析为实体。该问题已在 LuaXML 的开发版本中修复,应该很快就会上传到 CTAN。在此期间,您可以将更新的文件放在luaxml-实体.lua到包含您的文档的目录。

它应该产生正确的结果:

<a class='url' href='https://mathematica.stackexchange.com/landing/r/digest?cta=question&amp;id=234780'><span class='cmtt-12'>https://mathematica.stackexchange.com/landing/r/digest?cta=question&amp;id=234780</span></a>

相关内容