章节编号为文本而非数字,但使用俄语(西里尔文)

章节编号为文本而非数字,但使用俄语(西里尔文)

我知道有一段代码可以将第 1 章显示为\documentclass{book}“第一章”甚至“第一章”。但我的问题是,我目前正在处理的文本是俄语(西里尔文)。所以Глава 1我需要将其显示为文本,而不是(第 1 章),即Глава Один(第一章)。

此外,我希望它是序数,而不是基数。换句话说,Глава Один我希望它显示为(第一章),而不是Глава Первая(第一章)。

有代码可以实现这一点吗?如果有,它也可以应用于 Parts(而不是罗马数字)吗?

答案1

如果您不会自动使用章节交叉引用(或将所有引用保留为主格),则可以使用以下代码。它定义了一个打印序数的自定义计数器表示,并将其用于章节。复杂的部分是将数字转换为相应的序数。该代码适用于最高 999 的章节号,并在目录中打印正确的章节号。我还没有检查它是否适用于除书籍以外的文档类别。

\documentclass[openany]{book}

\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}

\usepackage{tocloft}

\renewcommand\cftchappresnum{\chaptername\ }
\renewcommand\cftchapaftersnumb{\newline\normalfont}
\renewcommand\cftchapleader{\cftdotfill{1}}
\renewcommand\cftchappagefont{\normalfont}

\makeatletter

\newcommand{\ordinalrussian}[1]{%
  \@tempcnta=\number\value{#1}
  \protect\@print@tempcnta}

\newcommand{\@print@tempcnta}{%
\ifnum\@tempcnta <100
  \ifnum\@tempcnta <20
    \ifnum\@tempcnta >10
      \@tempcntb=\@tempcnta
      \divide\@tempcntb 10
      \multiply\@tempcntb 10
      \advance\@tempcnta -\@tempcntb
      \divide\@tempcntb 10
      \@printtens
    \else
      \@printones
    \fi
  \else
    \@tempcntb=\@tempcnta
    \divide\@tempcntb 10
    \multiply\@tempcntb 10
    \advance\@tempcnta -\@tempcntb
    \divide\@tempcntb 10
    \@printtwenties
    \ifnum\@tempcnta >0
      \ \@print@tempcnta
    \fi
  \fi
\else
  \@tempcntb=\@tempcnta
  \divide\@tempcntb 100
  \multiply\@tempcntb 100
  \advance\@tempcnta -\@tempcntb
  \divide\@tempcntb 100
  \@printhundreds
  \ifnum\@tempcnta >0
    \ \@print@tempcnta
  \fi
\fi}


\newcommand{\@printhundreds}{%
  \ifnum\@tempcnta = 0
    \ifcase\@tempcntb
      --\or
      сотая\or
      двухсотая\or
      трехсотая\or
      четырехсотая\or
      пятисотая\or
      шестисотая\or
      семисотая\or
      восьмисотая\or
      девятисотая\fi
  \else
    \ifcase\@tempcntb
      --\or
      сто\or
      двести\or
      триста\or
      четыреста\or
      пятьсот\or
      шестьсот\or
      семьсот\or
      восемьсот\or
      девятьсот\fi
  \fi}

\newcommand{\@printtwenties}{%
  \ifnum\@tempcnta = 0
    \ifcase\@tempcntb
      --\or
      --\or
      двадцатая\or
      тридцатая\or
      сороковая\or
      пятидесятая\or
      шестидесятая\or
      семидесятая\or
      восьмидесятая\or
      девяностая\fi
  \else
    \ifcase\@tempcntb
      --\or
      --\or
      двадцать\or
      тридцать\or
      сорок\or
      пятьдесят\or
      шестьдесят\or
      семьдесят\or
      восемьдесят\or
      девяносто\fi
  \fi}

\newcommand{\@printtens}{%
  \ifcase\@tempcnta
    десятая\or
    одиннадцатая\or
    двенадцатая\or
    тринадцатая\or
    четырнадцатая\or
    пятнадцатая\or
    шестнадцатая\or
    семнадцатая\or
    восемнадцатая\or
    девятнадцатая\fi
}

\newcommand{\@printones}{%
  \ifcase\@tempcnta
    нулевая\or
    первая\or
    вторая\or
    третья\or
    четвертая\or
    пятая\or
    шестая\or
    седьмая\or
    восьмая\or
    девятая\or
    десятая\fi
}

\makeatother

\renewcommand{\thechapter}{\ordinalrussian{chapter}}

\begin{document}
\tableofcontents

%\chapter{Заголовок \arabic{chapter}}

\loop\ifnum\value{chapter}<999
  \chapter{Заголовок \arabic{chapter}}
\repeat
\end{document}

tocloft用于重新格式化目录中的章节。如果不重新格式化,则很难将长序数词放入目录行中。

相关内容