fancyhdr 和自动生成章节的烦人问题

fancyhdr 和自动生成章节的烦人问题

我遇到了一个恼人的小问题。我用它fancyhdr来自定义论文的标题,但根据软件包文档,它无法删除参考书目、索引等章节标题的“大写”,因为\MakeUppercase这些软件包明确给出了独立说明。它建议重新定义\thebibliography和搜索natbib.sty我发现

\providecommand{\MakeUppercase}{\uppercase}

然后在\bibsection重新定义中使用它。

我尝试了一段时间,试图\bibsection在我的序言中重新定义,但最终只会弄乱参考书目的标题。

此外,这不仅仅与参考书目有关:其他未编号的章节(实际上是所有章节)都受到此问题的影响。

对于手头的问题,我想出了一个有点儿解决方案是重新定义 \MakeUppercase:

\renewcommand{\MakeUppercase}{}

这解决了我的即时问题。但我对此不太满意,因为我可能需要在本文档或任何其他文档中使用大写字母。由于我总是在标题中使用小写字母,所以这可能是一个问题。

有什么更好的解决方案吗?我是否需要实际重新定义与各个方面、参考书目、索引、目录等相关的命令?

答案1

该命令\MakeUppercase是 LaTeX 的标准命令,在内核中定义,因此这里\providecommand永远不会执行,因为命令已经存在。我不记得我们是否\MakeUppercase在 1994 年首次发布 LaTeX2e 后添加了它;很有可能,如果是这样,这也许可以解释为什么曾经这样\providecommand做是有意义的。

作为一个通用命令,禁用它并不是正确的选择(紧急情况除外),因为它意味着任何每个地方的大写字母都被禁用,这可能不仅会导致在运行标题中删除它的期望效果,而且还会导致在仍然需要大写字母的地方也出现这种情况。

因此,正如 Ulrike 所说,更好的解决方案是使用不执行大写操作或支持自定义的类。LaTeX\MakeUppercase附带的类中硬性使用是不幸的,但出于兼容性原因,我们很久以前就决定(请参阅 ltnewsXX.pdf,不记得编号了),这些类不会因为设计有问题或缺少功能而更改。相反,应该提供更好、更灵活的类作为替代方案。这样的类是存在的,例如 KomaScript 类scrreprt.cls和许多其他类。

如果您打算禁用,\Makeuppercase那么您应该做些稍微不同的事:

\renewcommand\Makeuppercase[1]{#1}

使用参数的原因是,如果没有它,通常围绕其参数的参数括号将继续存在,并导致形成一个界定范围的组,并且可能(不太可能但可能)产生副作用。

答案2

在此答案中,我将给出重新定义命令(如\thebibliography或)的步骤\tableofcontents,以删除大写标题。如果您不想更改课程,我相信这是最好的解决方案。

这些命令是为每个类定义的。例如,在book.cls基础包的文件中,命令的定义\tableofcontents如下

\newcommand\tableofcontents{%
    \if@twocolumn
      \@restonecoltrue\onecolumn
    \else
      \@restonecolfalse
    \fi
    \chapter*{\contentsname
        \@mkboth{%
           \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
    \@starttoc{toc}%
    \if@restonecol\twocolumn\fi
    }

如果我想在标准书籍类的目录中使用小写标题,我只需要在书籍的序言中重新定义此命令,从\MakeUppercase标记中删除:

\makeatletter
\renewcommand\tableofcontents{%
    \if@twocolumn
      \@restonecoltrue\onecolumn
    \else
      \@restonecolfalse
    \fi
    \chapter*{\contentsname
        \@mkboth{%
           \contentsname}{\contentsname}}%
    \@starttoc{toc}%
    \if@restonecol\twocolumn\fi
    }
\makeatother

就是这样。我使用了目录,因为代码更短,但这也适用于其他类别和类似的未编号章节/部分,如参考书目、表格列表或图片列表。为了避免使序言杂乱,您可以将所有新定义放在.sty.

相关内容