l3keys2e 带有重音的选项:\UseTextAccent...\@curr@enc 错误

l3keys2e 带有重音的选项:\UseTextAccent...\@curr@enc 错误

下面的expl3类,提供了一个选项(mykeywordl3keys2e,效果非常好:

\begin{filecontents*}{myclass.cls}
\RequirePackage{l3keys2e}
\RequirePackage{expl3}
\ExplSyntaxOn
\ProvidesExplClass
  {myclass}
  {2019/01/05}
  {0.1}
  {
    My Nice Class.%
  }
\NeedsTeXFormat{LaTeX2e}
\LoadClass { report }
\RequirePackage[utf8]{inputenc} % Useless nowadays
%
\tl_set:Nn \l__myclass_my_keyword_tl {Café}
\keys_define:nn { myclass }
{
  mykeyword .tl_set:N = \l__myclass_my_keyword_tl,%
}%
\ProcessKeysOptions { myclass }
\AtEndDocument{\l__myclass_my_keyword_tl}
\end{filecontents*}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass{myclass}
% \documentclass[mykeyword=Bar]{myclass}
% \documentclass[mykeyword=Café]{myclass}
\begin{document}
Foo and
\end{document}

可以看出:

  1. 默认值选项包含重音符号(“Café”),这没有问题,
  2. 可以为此选项赋予一些值,例如“Bar”,
  3. 一些价值观不能可以给此选项赋值,例如“Café”(实际上,与默认值相同!),更一般地,任何包含重音的值。在这种情况下,编译失败并出现以下错误:

! 未定义控制序列。\UseTextAccent ...up @firstofone \let @curr@enc \cf@encoding @use@text@en...

我该如何修复此问题?

编辑

作为一种解决方法,可以在不是级别\documentclass而是在“设置”命令中使用此选项,如以下 MWE 所示:

\begin{filecontents*}{myclass.cls}
\RequirePackage{l3keys2e}
\RequirePackage{xparse}
\ExplSyntaxOn
\ProvidesExplClass
  {myclass}
  {2019/01/05}
  {0.1}
  {
    My~Nice~Class.%
  }
\NeedsTeXFormat{LaTeX2e}
\LoadClass { report }
\RequirePackage[utf8]{inputenc}
%
\tl_set:Nn \l__myclass_my_keyword_tl {Café}
\keys_define:nn { myclass }
{
  mykeyword .tl_set:N = \l__myclass_my_keyword_tl
}%
\NewDocumentCommand \myclasssetup { m } {
  \keys_set:nn { myclass } { #1 }
}

\ProcessKeysOptions { myclass }
\AtEndDocument{\l__myclass_my_keyword_tl}
\end{filecontents*}

\documentclass{myclass}
\myclasssetup{mykeyword=blé}
\begin{document}
Foo and
\end{document}

答案1

这是一个非常普遍的问题,例如:

\RequirePackage{xstring}
\StrBehind*{Café}{f}[\var]

确实生成,使用 pdflatex:

This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2018/Arch Linux) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./b.tex
LaTeX2e <2018-12-01>
(/usr/share/texmf-dist/tex/generic/xstring/xstring.sty
(/usr/share/texmf-dist/tex/generic/xstring/xstring.tex))
! Undefined control sequence.
\UseTextAccent ...up \@firstofone \let \@curr@enc 
                                                  \cf@encoding \@use@text@en...
l.2 \StrBehind*{Café}{f}
                         [\var]
!  ==> Fatal error occurred, no output PDF file produced!

最簡單解决方法是使用 XeLaTeX。

答案2

要解决此问题,请在使用任何重音之前使用包 [T1]fontenc。pdflatex在 Linux 中运行时,这不会造成特别大的问题,但在使用 MacTeX 的 Mac Mojave 上运行时,这很重要。

\RequirePackage[T1]{fontenc}
\ProvidesClass{myclass}[Using accent: Café]

此答案基于丹尼斯·比图泽斯评论。

相关内容