我无法准确找到错误发生的位置,但我做了一个小例子来重现它。
示例文件为:
\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
: