%20%D0%B2%20%D0%BE%D0%B3%D0%BB%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B8%2C%20%D0%BD%D0%BE%20%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C%20%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BE%D0%BA%20%D0%B7%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D0%BC%20%D0%B2%20%D0%BE%D1%82%D1%87%D0%B5%D1%82%D0%B5.png)
Я использую report
и мне нужно, чтобы заголовки глав были заглавными (включая Приложение), но не в Оглавлении. Например, вместо "Приложение А" должно быть написано "ПРИЛОЖЕНИЕ А" внутри статьи и "Приложение А" в Оглавлении. Кажется, я исправил обычные главы, но не могу понять, как исправить Приложение.
Я могу просто изменить \appendixname
на APPENDIX, но тогда в TOC он будет отображаться как полностью заглавный (чего я бы предпочел не делать). Изменение определения \appendix
класса отчета, похоже, имеет тот же эффект (я полагаю, потому что это по сути просто переопределение \@chapapp
):
\renewcommand{\appendix}{\par
\setcounter{chapter}{0}%
\setcounter{section}{0}%
\gdef\@chapapp{APPENDIX}% modified from \appendixname
\gdef\thechapter{\@Alph\c@chapter}}
Мне удалось исправить проблему с обычной главой, оставив \chaptername
все как есть и жестко закодировав CHAPTER вместо использования \@chapapp
следующего (который был частью исходного шаблона — я его не создавал, поэтому не совсем понимаю, что все это делает):
\def\@chapter[#1]#2{
\ifnum \c@secnumdepth >\m@ne
\refstepcounter{chapter}%
\typeout{CHAPTER\space\thechapter.} % originally used \@chapapp
\addcontentsline{toc}{chapter}%
{\@chapapp\space {\thechapter}: {#1}}
\else
\addcontentsline{toc}{chapter}{#1}%
\fi
\chaptermark{#1}%
\addtocontents{lof}{\protect\addvspace{10\p@}}%
\addtocontents{lot}{\protect\addvspace{10\p@}}%
\if@twocolumn
\@topnewpage[\@makechapterhead{#2}]%
\else
\@makechapterhead{#2}%
\@afterheading
\fi
}
Честно говоря, я не понимаю, почему \uppercase
не работает следующее, но слово «Глава» пишется не с заглавной буквы\@chapapp
(это также было в оригинальном шаблоне) ивсе ещепоявляется в файле стилей после вышеприведенного (названия глав имеютвсегдабыли написаны ЗАГЛАВНЫМИ БУКВАМИ, просто без префикса «Глава x:»).
\def\@makechapterhead#1{%
\vspace*{-20\p@}%
{\parindent \z@ \raggedright \normalfont
\interlinepenalty\@M
\ifnum \c@secnumdepth >\m@ne
\centering \large\bfseries
\uppercase{\@chapapp\space \thechapter: #1}
\fi
\vskip 20\p@
}
}
решение1
Решение без жесткого кодирования или .cls
прямого редактирования файла:
Автор статьи был прав в своем предположении о \@makechapterhead
:
\def\@makechapterhead#1{%
\vspace*{50\p@}%
{\parindent \z@ \raggedright \normalfont
\ifnum \c@secnumdepth >\m@ne
\huge\bfseries \@chapapp\space \thechapter
\par\nobreak
\vskip 20\p@
\fi
\interlinepenalty\@M
\Huge \bfseries #1\par\nobreak
\vskip 40\p@
}}
Строка с \@chapapp
действительно печатает Chapter
(или Приложение), за которым следует номер главы.
Чтобы получить эту заглавную букву, необходимо использовать \MakeUppercase{\@chapapp}
, а не \uppercase
.
Вместо того, чтобы редактировать report.cls
код, лучше использовать \xpatchcmd
, искать строку \huge\bfseries\@chapapp..
и заменять ее соответствующим кодом с помощью \MakeUppercase
.
Однако это следует делать только после \appendix
, поэтому добавьте этот патч к \appendix
using \xapptocmd{\appendix}{...}
(см. код, пожалуйста)
\documentclass{report}
\usepackage{xpatch}
\makeatletter
\xapptocmd{\appendix}{%
\xpatchcmd{\@makechapterhead}{%
\huge\bfseries \@chapapp\space \thechapter
}{%
\huge\bfseries \MakeUppercase{\@chapapp}\space \thechapter
}{\typeout{Patching \@makechapterhead succeeded}}{\typeout{Patching failed}}% Patching ends
}{\typeout{Appending succeeded}}{\typeout{Appending failed}}
\makeatother
\begin{document}
\chapter{First}
\appendix
\chapter{Appendix 1}
\end{document}
Обратите внимание, что мой код не работает для \chapter*
приложений типа -.