La poliglosia ucraniana no se hará amiga del paquete Cleveref

La poliglosia ucraniana no se hará amiga del paquete Cleveref

Tengo la siguiente configuración:

% !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}

Produce los siguientes errores:

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

Si configuro el idioma principal en inglés, funciona según lo previsto. ¿Como arreglarlo? Intenté encontrar una respuesta en texdoc pero no sirvió de nada.

Respuesta1

Es mejor cargar los paquetes primero y luego realizar la configuración.

Desafortunadamente, sin embargo, cleverefpara Ucraniano no funciona directamente con Unicode, porque depende de comandos LICR como \cyra, \CYRAetc. Sin embargo, podemos hacer la conversión explotando el t2aenc.dfuarchivo, pero a la inversa. Sólo defino los personajes simples.

\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}

Una línea típica t2aenc.dfutiene la forma

\DeclareUnicodeCharacter{0401}{\CYRYO}

así que lo defino \CYRYOcomo el personaje en la posición U+0401, cortesía de \char_generate:nn. Líneas como

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

se ignoran: sólo se consideran aquellos en los que el segundo argumento es \cyr...o .\CYR...

ingrese la descripción de la imagen aquí

información relacionada