使用 make4ht 进行编译时出错

使用 make4ht 进行编译时出错

我无法准确找到错误发生的位置,但我做了一个小例子来重现它。

示例文件为:

\documentclass{example}
\begin{document}
\keywords{ábaba \sep Abba2 \sep Ababa3}
\end{document}

使用以下示例模板:

\ProvidesClass{example}[2022/03/16 Example class]
\ProcessOptions\relax
\ExecuteOptions{}
\LoadClass{article}
\RequirePackage{mfirstuc}
% KEYWORDS % requires: mfirstuc
\def\sep{\unskip. }%
\newcommand{\capitalizekeywords}[2][\sep]{%
    \def\dolist##1{\expandafter\@dolist##1#1\@eol}%
    \def\@dolist##1#1##2\@eol{%
        \begingroup\setbox0=\hbox{##1\unskip}\ifdim\wd0=0pt\endgroup\else\endgroup\ignorespaces\makefirstuc{##1}\unskip\sep\fi%
    \ifx\@eol##2\@eol\else\@dolist##2\@eol\fi}%
    \dolist{#2}%
}
\newcommand{\keywords}[1]{%
    \emph{Keywords}: \capitalizekeywords{#1}\par
}

编译XeLaTeX工作正常,但make4ht崩溃并出现以下错误:

[ERROR]   htlatex: ./example.tex        3        Missing \endcsname inserted.
[ERROR]   htlatex: ./example.tex        3        Undefined control sequence.
[ERROR]   htlatex: ./example.tex        3        Undefined control sequence.[ERROR]   htlatex: ./example.tex        3        Undefined control sequence.
[ERROR]   htlatex: ./example.tex        3        Undefined control sequence.
[ERROR]   htlatex: ./example.tex        3        Use of \\capitalizekeywords doesn't match its definition.
[ERROR]   htlatex: ./example.tex        3        Use of \\capitalizekeywords doesn't match its definition.
[ERROR]   htlatex: ./example.tex        3        Use of \\capitalizekeywords doesn't match its definition.
[ERROR]   htlatex: ./example.tex        3        Argument of \@dolist has an extra }.[ERROR]   htlatex: ./example.tex        3        Paragraph ended before \@dolist was complete.[ERROR]   htlatex: ./example.tex        3        Extra \else.

注1:直接在文件中定义命令时.tex,不会产生错误。

注2:当第一个字符没有变音符号时,如:\keywords{abába \sep Abba2 \sep Ababa3},则不会出错。

答案1

尝试这个版本example.cls

\ProvidesClass{example}[2022/03/16 Example class]
\ProcessOptions\relax
\ExecuteOptions{}
\LoadClass{article}
%\RequirePackage{mfirstuc}
% KEYWORDS % requires: mfirstuc
\def\sep{\unskip. }%
\ExplSyntaxOn
\newcommand{\capitalizekeywords}[2][\sep]{%
    \def\dolist##1{\expandafter\@dolist##1#1\@eol}%
    \def\@dolist##1#1##2\@eol{%
      \begingroup\setbox0=\hbox{##1\unskip}\ifdim\wd0=0pt\endgroup\else\endgroup\ignorespaces\text_titlecase_first:n{##1}\unskip\sep\fi%
    \ifx\@eol##2\@eol\else\@dolist##2\@eol\fi}%
    \dolist{#2}%
}
\ExplSyntaxOff
\newcommand{\keywords}[1]{%
    \emph{Keywords}: \capitalizekeywords{#1}\par
}

它使用新的 LaTeX 内部命令text_titlecase_first:n。在这种情况下,它似乎工作得更好。示例文件可以使用 TeX4ht 支持的所有 LaTeX 引擎进行编译,不会出现运行时错误。使用 LuaLaTeX 和 LaTeX,您还将获得正确的大写单词。但是使用 XeLaTeX,您将无法获得重音字符的大写。这是由 TeX4ht 处理 XeLaTeX 中的重音字符的方式造成的,我不确定是否可以修复它。

使用 (LuaLaTeX) 的结果make4ht -l sample.tex

在此处输入图片描述

使用 (XeLaTeX) 的结果make4ht -x sample.tex

在此处输入图片描述

相关内容