![如何将附录(原样)保留在目录中,但在报告中将标题大写](https://linux22.com/image/316095/%E5%A6%82%E4%BD%95%E5%B0%86%E9%99%84%E5%BD%95%EF%BC%88%E5%8E%9F%E6%A0%B7%EF%BC%89%E4%BF%9D%E7%95%99%E5%9C%A8%E7%9B%AE%E5%BD%95%E4%B8%AD%EF%BC%8C%E4%BD%86%E5%9C%A8%E6%8A%A5%E5%91%8A%E4%B8%AD%E5%B0%86%E6%A0%87%E9%A2%98%E5%A4%A7%E5%86%99.png)
我正在使用report
,我需要将章节标题全部大写(包括附录),但不将其显示在目录中。例如,它应该在论文中显示为“附录 A”,在目录中显示为“附录 A”,而不是“附录 A”。我似乎已经修复了常规章节,但似乎无法弄清楚如何修复附录。
我可以只更改\appendixname
为 APPENDIX,但这样它在目录中就会全部大写(我不希望这样)。更改\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
使用中\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*
类似附录。