Die ukrainische Polyglossie wird sich mit dem Cleveref-Paket nicht anfreunden

Die ukrainische Polyglossie wird sich mit dem Cleveref-Paket nicht anfreunden

Ich habe folgendes Setup:

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

Es treten die folgenden Fehler auf:

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

Wenn ich die Hauptsprache auf Englisch einstelle, funktioniert es wie vorgesehen. Wie kann ich das Problem beheben? Ich habe versucht, eine Antwort auf Texdoc zu finden, aber es hat nicht geholfen.

Antwort1

Am besten laden Sie zuerst die Pakete und führen dann das Setup durch.

Leider clevereffunktioniert Ukrainisch nicht direkt mit Unicode, da es auf LICR-Befehlen wie usw. basiert \cyra. \CYRAWir können die Konvertierung jedoch mithilfe der t2aenc.dfuDatei durchführen, allerdings in umgekehrter Reihenfolge. Ich definiere nur die einfachen Zeichen.

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

Eine typische Zeile in t2aenc.dfuhat die Form

\DeclareUnicodeCharacter{0401}{\CYRYO}

also definiere ich \CYRYOes als das Zeichen an Position U+0401, mit freundlicher Genehmigung von \char_generate:nn. Zeilen wie

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

werden ignoriert: nur diejenigen, bei denen das zweite Argument entweder \cyr...oder ist \CYR..., werden berücksichtigt.

Bildbeschreibung hier eingeben

verwandte Informationen