Warum schreibt PDFLatex auch bei der Dokumentkodierung UTF-8 \Cyr-Befehle in die TOC-Datei?

Warum schreibt PDFLatex auch bei der Dokumentkodierung UTF-8 \Cyr-Befehle in die TOC-Datei?

Warum schreibt pdflatex(aber nicht lualatex) Befehle in die TOC- \cyrDatei, selbst wenn utf8die Dokumentkodierung statt der normalen kyrillischen Buchstaben verwendet wird? Wie kann ich das verhindern? Ich interessiere mich für eine Lösung mit der Neudefinition book.clsvon Befehlen. Ich habe sie neu definiert, \addcontentsline{toc}{part}{\unexpanded\expandafter{{#1}}}%aber es hat kein Ergebnis gebracht.

% !TeX program = pdflatex
% !TeX encoding = utf8
% !TeX spellcheck = uk_UA
% !BIB program = bibtex8

\documentclass[12pt]{book}

\usepackage[a4paper]{geometry}

\usepackage[utf8]{inputenc}
\usepackage[T2A,T1]{fontenc}
\usepackage[ukrainian]{babel}

\usepackage{indentfirst}
\usepackage{misccorr}

\makeatletter
\def\@part[#1]#2{%
    \thispagestyle{empty}
    \addcontentsline{toc}{part}{\unexpanded\expandafter{{#1}}}%
    {\centering
        \interlinepenalty \@M
        \normalfont
        \Huge \sffamily\bfseries #1\par}%
    \@endpart
}
\makeatother

\begin{document}
\tableofcontents
\part{Перша}

іва
\part{Друга}
іфавіфав
\end{document}

Tocsieht aus wie

\select@language {ukrainian}
\contentsline {part}{{\IeC {\CYRP }\IeC {\cyre }\IeC {\cyrr }\IeC {\cyrsh }\IeC {\cyra }}}{3}
\contentsline {part}{{\IeC {\CYRD }\IeC {\cyrr }\IeC {\cyru }\IeC {\cyrg }\IeC {\cyra }}}{7}

Antwort1

Sie können es mit versuchen \detokenize.

Zur Verwendung mit hyperref: benötigt man sowohl von \texorpdfstringals auch \phantomsectionim Patch von \@part.

\documentclass[12pt]{book}

\usepackage[a4paper]{geometry}

\usepackage[T2A,T1]{fontenc}

\usepackage[utf8]{inputenc}

\usepackage[ukrainian]{babel}

\usepackage{indentfirst}
\usepackage{misccorr}

% update for hyperref compatibility

\makeatletter
\def\@part[#1]#2{%
    \thispagestyle{empty}%
    \phantomsection
    \addcontentsline{toc}{part}{\texorpdfstring{\detokenize{#1}}{#1}}%
    {\centering
        \interlinepenalty \@M
        \normalfont
        \Huge \sffamily\bfseries #1\par
    }%
    \@endpart
}
\makeatother

\usepackage[pdfencoding=auto]{hyperref}

\begin{document}
\tableofcontents
\part{Перша}

іва
\part{Друга}
іфавіфав
\end{document}

Inhalt der TOC-Datei:

\select@language {ukrainian}
\contentsline {part}{Перша}{3}
\contentsline {part}{Друга}{7}

und mit hyperref:

\select@language {ukrainian}
\contentsline {part}{Перша}{3}{section*.2}
\contentsline {part}{Друга}{7}{section*.3}

Antwort2

Zumindest prinzipiell können verschiedene Teile des Dokuments unterschiedliche Eingabekodierungen verwenden, daher wurde der Mechanismus so konzipiert, dass Zusatzdateien immer in der kodierungsneutralen LICRASCII-Auszeichnung geschrieben werden.

In der Praxis wird, insbesondere wenn Sie UTF-8 verwenden, eine einzige Kodierung für das gesamte Dokument verwendet, aber UTF-8 und die UTF-8-Unterstützung für LaTeX sind einige Jahre jünger als der Entwurf der Kodierungsunterstützung für Inhaltsverzeichnisdateien.

verwandte Informationen