我知道有一段代码可以将第 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
用于重新格式化目录中的章节。如果不重新格式化,则很难将长序数词放入目录行中。