使用 polyglossia、french 和 make4ht 时出错

使用 polyglossia、french 和 make4ht 时出错

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 中,它使大多数字符处于活动状态。然后使用活动字符插入带有\specialUnicode 指令的命令。在这种情况下,它似乎与 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在命令结束后执行它。

然后您的示例就可以编译了,不会出现错误:

在此处输入图片描述

相关内容