Украинская полиглоссия не подружится с пакетом CleverEf

Украинская полиглоссия не подружится с пакетом CleverEf

У меня следующая настройка:

% !TeX program = lualatex

\documentclass[11pt]{report}
\usepackage{polyglossia}

\setmainfont{CMU Serif}
\setsansfont{CMU Sans Serif}
\setmonofont{CMU Typewriter Text}


\setmainlanguage{Ukrainian}
\setotherlanguages{english, russian}

\usepackage[demo]{graphicx}

\usepackage{hyperref}
\usepackage{cleveref}

\begin{document}
    \begin{figure}[tbp]
        \centering
        \includegraphics{file}
        \caption{caption}
        \label{fig:tag}
    \end{figure}
        
    На \cref{fig:tag} зображено чорний квадрат.
\end{document}

Выдает следующие ошибки:

polycref.tex|27 error| Undefined control sequence.
polycref.tex|27 error| Undefined control sequence.
polycref.tex|27 error| Undefined control sequence.

Если я устанавливаю основной язык на английский, то он работает как задумано. Как это исправить? Я пытался найти ответ на texdoc, но это не помогло.

решение1

Лучше всего сначала загрузить пакеты, а затем выполнить настройку.

К сожалению, cleverefдля украинского языка не работает напрямую с Unicode, поскольку он опирается на команды LICR, такие как \cyra, \CYRAи т. д. Однако мы можем выполнить преобразование, эксплуатируя файл t2aenc.dfu, но в обратном порядке. Я определяю только простые символы.

\documentclass[11pt]{report}
\usepackage{polyglossia}
\usepackage{hyperref}
\usepackage[ukrainian]{cleveref}

\setmainlanguage{ukrainian}
\setotherlanguages{english, russian}

\setmainfont{CMU Serif}
\setsansfont{CMU Sans Serif}
\setmonofont{CMU Typewriter Text}

% convert \cyr... and \CYR... to Unicode
\ExplSyntaxOn
\group_begin:
\cs_set:Npn \DeclareUnicodeCharacter #1 #2
 {
  \bool_lazy_or:nnT
   { \str_if_eq_p:ee { cyr } { \str_range:nnn { #2 } { 2 } { 4 } } }% \cyr...
   { \str_if_eq_p:ee { CYR } { \str_range:nnn { #2 } { 2 } { 4 } } }% \CYR...
   { \cs_gset:Npe #2 { \char_generate:nn { "#1 } { 11 } } }
 }
\file_input:n { t2aenc.dfu }
\group_end:
\ExplSyntaxOff


\begin{document}

\begin{figure}[tbp]
\centering

\fbox{This is a figure}

\caption{caption}
\label{fig:tag}

\end{figure}
        
На \cref{fig:tag} зображено чорний квадрат.

\end{document}

Типичная строка t2aenc.dfuимеет вид

\DeclareUnicodeCharacter{0401}{\CYRYO}

поэтому я определяю, \CYRYOчто это будет символ в позиции U+0401, любезно предоставленный \char_generate:nn. Такие строки, как

\DeclareUnicodeCharacter{0400}{\@tabacckludge`\CYRE}

игнорируются: рассматриваются только те, где второй аргумент — \cyr...или .\CYR...

введите описание изображения здесь

Связанный контент