¿Por qué pdflatex escribe en el archivo toc \cyr-commands incluso con codificación de documentos utf8?

¿Por qué pdflatex escribe en el archivo toc \cyr-commands incluso con codificación de documentos utf8?

¿Por qué pdflatex(pero no lualatex) escribe en comandos toc-file \cyrincluso con utf8codificación de documento en lugar de letras cirílicas normales? ¿Cómo prevenirlo? Estoy interesado en una solución con redefinición book.clsde comandos. Redefiní el \addcontentsline{toc}{part}{\unexpanded\expandafter{{#1}}}%pero no tiene resultado.

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

Tocparece

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

Respuesta1

Puedes probar con \detokenize.

Para usar con hyperref: se necesita tanto de \texorpdfstringcomo \phantomsectionen el parche de \@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}

Contenido del archivo toc:

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

y con hyperref:

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

Respuesta2

En principio, al menos diferentes partes del documento pueden utilizar diferentes codificaciones de entrada, por lo que el mecanismo fue diseñado para escribir siempre archivos auxiliares en el LICRmarcado ascii neutro de codificación.

En la práctica, especialmente si utiliza UTF-8, se utiliza una única codificación para todo el documento, pero UTF-8 y la compatibilidad con UTF-8 en LaTeX son algunos años más recientes que el diseño de compatibilidad con codificación para archivos toc.

información relacionada