Почему pdflatex записывает в toc-файл \cyr-commands даже при кодировке документа utf8?

Почему pdflatex записывает в toc-файл \cyr-commands даже при кодировке документа utf8?

Почему pdflatex(но не lualatex) пишет в toc-file \cyr-commands даже с utf8кодировкой документа вместо обычных кириллических букв? Как это предотвратить? Мне интересно решение с переопределением book.clsкоманд. Я переопределил , \addcontentsline{toc}{part}{\unexpanded\expandafter{{#1}}}%но это не дало результата.

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

Tocвыглядит как

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

решение1

Вы можете попробовать с \detokenize.

Для использования с hyperref: необходимы оба \texorpdfstringи \phantomsectionв патче \@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}

Содержимое toc-файла:

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

и с hyperref:

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

решение2

В принципе, по крайней мере, разные части документа могут использовать разные входные кодировки, поэтому механизм был разработан таким образом, чтобы всегда записывать вспомогательные файлы в нейтральной по отношению к кодировке LICRразметке ASCII.

На практике, особенно если вы используете UTF-8, для всего документа используется одна кодировка, но UTF-8 и поддержка UTF-8 в LaTeX появились на несколько лет раньше, чем поддержка кодировки для файлов toc.

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