在 LaTeX 文章中,\section*
行为如下:
\documentclass[12pt]{article} \begin{document}
\section*{Not numbered} \thesection % --> 0
\section{Numbered} \thesection % --> 1
\end{document}
然而,使用 beamer 时会发生以下情况:
\documentclass[12pt]{beamer} \begin{document}
\section*{Not numbered} \frame{\thesection} % --> 1
\section{Numbered} \frame{\thesection} % --> 2
\end{document}
这是为什么?我能纠正这个行为吗?
现在,我真正需要的是 beamer 的一个命令\secnr
,它在带星号的部分不打印任何内容,而在不带星号的部分打印正确的 -viz. documentclass article- 编号。因此,这需要:
- 修复 beamer 中编号错误的问题
- 测试
if
“当前部分是否已加星标...”
解决其中一个问题(或两个问题)的解决方案将非常受欢迎。
答案1
投影机以不同的方式实现\section*
。实际的节号保存在 (TeX) 计数器中,当找到\beamer@tocsectionnumber
时不会增加。\section*
解决您问题的一个可能方法是
\usepackage{etoolbox}
\newif\ifstarred
\def\secnr{}
\makeatletter
\pretocmd\beamer@@ssection{\gdef\secnr{}\global\starredtrue}{}{}
\patchcmd\beamer@section{by 1\relax}
{by 1\relax\xdef\secnr{\the\beamer@tocsectionnumber}\global\starredfalse}{}{}
\makeatother
这\secnr
按您的需要定义:在 a 中\section*
它扩展为无,而在 a 中\section
它扩展为节的编号。\ifstarred
条件在 a 之后为真\section*
,在 a 之后为假\section
。