使用 memoir class 和 hyperref 将所有 ToC 条目变为大写

使用 memoir class 和 hyperref 将所有 ToC 条目变为大写

我需要更新我组织的样式文件以使其hyperref兼容。它使用memoir类并要求所有目录条目都大写:

全大写目录

带有回忆录和超链接的小写目录以及memoir课程文档(第 162 页)课堂上没有内置的方法可以做到这一点,但我能够调整 Gonzalo Medina 的答案如何使目录中的章节名称大写?获得以下 MWE。此解决方案适用于我组织的其他样式文件,但仅将顶层 ( section) 全部大写。

\documentclass{memoir}
\usepackage{textcase}
\usepackage{hyperref}

\renewcommand{\thesection}{\arabic{section}}
\setcounter{tocdepth}{4}
\setcounter{secnumdepth}{4}

\makeatletter
\let\oldcontentsline\contentsline
\def\contentsline#1#2{%
    \expandafter\ifx\csname l@#1\endcsname\l@section
    \expandafter\@firstoftwo
    \else
    \expandafter\@secondoftwo
    \fi
    {%
        \oldcontentsline{#1}{\MakeTextUppercase{#2}}%
    }{%
        \oldcontentsline{#1}{#2}%
    }%
}
\makeatother
\begin{document}
    
    \tableofcontents
    \section{A test section $a=b$}\label{sec:test}
    \subsection{A test subsection}\label{sec:test2}
    \section{Another test section with a reference:~\ref{sec:test}}
    \subsection{A subsection with a reference~\ref{sec:test2}}
    \subsubsection{A subsubsection}
    \paragraph{A paragraph}
    
\end{document}

上述代码片段的输出

我对代码片段的工作原理了解不够,无法对其进行修改以使其他级别也全部大写。上面的示例一直到paragraph,这可能是我需要的 ToC 的最多级别,但因为它是我组织的样式文件,所以我想学习如何将其实现到所需的深度级别。有人可以提供任何帮助吗?如果有任何不同,出于其他原因,我们的样式文件需要使用 LuaLaTeX。

相关内容