Enumitem 自定义列表不适用于多语种

Enumitem 自定义列表不适用于多语种

我想在使用 enumitem 和 polyglossia 时创建自定义列表。

latexmk main正在运行

main.tex

\documentclass[12pt, a4paper]{report}
\usepackage{polyglossia}
\setmainlanguage{czech}
\usepackage{enumitem}
\newlist{enumfp}{enumerate}{1}
\setlist[enumfp]{label=\textbf{FP-\arabic*},ref=FP-\arabic*}

\begin{document}
\begin{enumfp}
    \item A
    \item B
    \item C
\end{enumfp}
\end{document}

产生此输出

! Missing number, treated as zero.
<to be read again> 
                   \c@- 
l.10     \item A
                
? 
! Missing number, treated as zero.
<to be read again> 
                   \c@- 
l.11     \item B
                
? 
! Missing number, treated as zero.
<to be read again> 
                   \c@- 
l.12     \item C
                
? 
[1] (main.aux) )

但是,只要我删除 polyglossia 包并设置 mainlanguage,文档就可以毫无问题地生成。

.latexmkrc

$pdf_mode = 5;
$xelatex = "xelatex --shell-escape %O %S";
$xdvipdfmx = "xdvipdfmx -z 0 -o %D %O %S";
$dvi_mode = 0;
$postscript_mode = 0;
$hash_calc_ignore_pattern{'timestamp'} = '^';

答案1

捷克语文件包含代码,该代码会提前查看连字符以实现特殊的连字符规则。使用 XeLaTeX 时,这相当脆弱(您的代码使用 luaLaTeX 运行)。

您可以在连字符和以下 \arabic 之间添加一些内容来保护连字符:

\setlist[enumfp]{label=\textbf{FP-{}\arabic*},ref=FP-\arabic*}

或者

\setlist[enumfp]{label=\textbf{FP-\relax\arabic*},ref=FP-\arabic*}

答案2

问题在于-标签内的连字符。Polyglossia 将其替换为其他内容。使用hyphenat\hyp{}解决了该问题。

\documentclass[12pt, a4paper]{report}
\usepackage{polyglossia}
\setmainlanguage{czech}
\usepackage{hyphenat}
\usepackage{enumitem}
\newlist{enumfp}{enumerate}{1}
\setlist[enumfp]{label=\textbf{FP\hyp{}\arabic*},ref=FP\hyp{}\arabic*}

\begin{document}
\begin{enumfp}
    \item A
    \item B
    \item C
\end{enumfp}
\end{document}

相关内容