![使用 polyglossia、french 和 make4ht 时出错](https://linux22.com/image/427758/%E4%BD%BF%E7%94%A8%20polyglossia%E3%80%81french%20%E5%92%8C%20make4ht%20%E6%97%B6%E5%87%BA%E9%94%99.png)
polyglossia
使用该包、设置french
为默认语言并使用 进行编译时出现内存错误make4ht
。
以下是重现该错误的简单代码:
\documentclass{article}
\usepackage{polyglossia}
\setdefaultlanguage{french}
\title{Test: 123}
\begin{document}
\maketitle
\end{document}
错误信息是:
[ERROR] htlatex: ? 14 TeX capacity exceeded, sorry [main memory size=5000000].
[FATAL] make4ht-lib: Fatal error. Command htlatex returned exit code 1
我正在编译
make4ht -u -x test
答案1
TeX4ht 使用了一些技巧来支持 Unicode 输入。在 XeLaTeX 中,它使大多数字符处于活动状态。然后使用活动字符插入带有\special
Unicode 指令的命令。在这种情况下,它似乎与 Polyglossia 发生冲突,正如您从完整的错误消息中看到的那样:
! TeX capacity exceeded, sorry [main memory size=5000000].
\nobreakspace ...l {t4ht@+\string &{35}x00A0{59}}x
问题是 Polyglossia 和 XeTeX 也会激活一些字符。不知何故,它会导致内存溢出。对于你的情况,问题出在你标题中的冒号上\title{Test: 123}
。
为了解决这个问题,我们必须\nobreakspace
在 Polyglossia 定义活动字符时重新定义,这通过\french@punctuation
命令完成。
将以下代码保存为gloss-french.4ht
:
\pend:def\french@punctuation{\bgroup\let\nobreakspace\space}
\append:def\french@punctuation{\egroup}
\endinput
当您将 Polyglossia 与法语结合使用时,TeX4ht 会自动加载此文件。该\pend:def
命令执行重新定义的命令之前的代码,并\append:def
在命令结束后执行它。
然后您的示例就可以编译了,不会出现错误: