我正在尝试为演示文稿中的所有章节标题和框架标题添加标题大写。如果我只使用编号章节,则一切都会按预期工作,但带星号的章节无法以相同的方式重新定义。
梅威瑟:
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{titlecaps}
\title{slides test}
\author{me}
\institute{}
\date{}
\usetheme{metropolis}
\makeatletter
\let\oldsection\section
\def\section#1{\oldsection{\titlecap{#1}}}
\let\oldframetitle\frametitle
\def\frametitle#1{\oldframetitle{\titlecap{#1}}}
\makeatother
\begin{document}
\maketitle
\section{Introduction section}
\begin{frame}{First Frame}
Hello, world!
\end{frame}
\section*{Numberless section}
\begin{frame}{New frame}
I can add title caps to frame titles and regular sections but not starred sections.
\end{frame}
\end{document}
生产
我正在通过重置章节计数器和打印没有章节编号的目录来解决这个问题,但我想知道如何让它正常工作。
答案1
问题是\section
可以采用星号选项,这意味着它本身不带任何参数,但随后调用星号/取消星号版本做提出论点。你必须重新创建这个逻辑。
就像 OP 的代码一样,\section
强制采取的参数成为*
选项,而不是随后的所需参数。
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{titlecaps}
\title{slides test}
\author{me}
\institute{}
\date{}
\usetheme{metropolis}
\makeatletter
\let\oldsection\section
\renewcommand\section{%
\@ifstar
{\Altsecstar}%
{\Altsecnostar}%
}
\newcommand\Altsecstar[1]{\oldsection*{\titlecap{#1}}}
\newcommand\Altsecnostar[1]{\oldsection{\titlecap{#1}}}
\let\oldframetitle\frametitle
\def\frametitle#1{\oldframetitle{\titlecap{#1}}}
\makeatother
\begin{document}
\maketitle
\tableofcontents
\section{Introduction section}
\begin{frame}{First Frame}
Hello, world!
\end{frame}
\section*{Numberless section}
\begin{frame}{New frame}
I can add title caps to frame titles and regular sections but not starred sections.
\end{frame}
\end{document}