You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Beamer/Latex技术问询:如何通过索引获取\part的名称

解决方案:在Beamer循环中获取Part名称并显示

当然可以!你只需要借助一些LaTeX工具来获取对应part的名称,下面给你两种实用的解决方案,都能完美实现你的需求:

方案1:使用nameref包(推荐,直观易维护)

这个方案通过给每个part添加标签,再用nameref引用标签对应的part名称,操作简单且不易出错。

步骤1:加载必要的包

在导言区添加:

\usepackage{nameref}
\usepackage{totcount} % 你原代码中用到的\totvalue需要这个包

步骤2:自动给Part添加标签(可选,省去手动操作)

如果不想手动给每个part加标签,可以用etoolbox包自动完成:

\usepackage{etoolbox}
\pretocmd{\part}{\label{part:\thepart}}{}{}

这样每次你使用\part{Part Title}时,LaTeX会自动生成形如part:1、part:2的标签。

步骤3:修改目录帧代码

把你原有的目录帧代码修改为:

\begin{frame}
\begin{multicols}{2}
\setcounter{tocdepth}{1}
\foreach\x in {1,...,\totvalue{part}}{%
    \vskip 0.4cm
    \textbf{\nameref{part:\x}} % 显示对应Part的名称,用加粗突出
    \tableofcontents[part=\x]% 显示该Part下的所有Section
}%
\setcounter{tocdepth}{2}
\end{multicols}
\end{frame}

方案2:直接调用Beamer内部命令(无需额外标签)

Beamer会把所有part的名称存储在内部变量中,你可以直接调用这些变量来获取名称,不需要额外添加标签,但需要用到\makeatletter/\makeatother来访问带@的内部命令。

修改后的目录帧代码:

\begin{frame}
\begin{multicols}{2}
\setcounter{tocdepth}{1}
\makeatletter % 允许访问带@的内部命令
\foreach\x in {1,...,\totvalue{part}}{%
    \vskip 0.4cm
    \textbf{\@nameuse{beamer@partnames@\x}} % 获取第x个Part的名称
    \tableofcontents[part=\x]%
}%
\makeatother % 恢复默认状态
\setcounter{tocdepth}{2}
\end{multicols}
\end{frame}

注意事项

  • 两种方案都能完美显示每个part的名称及其下属section,双栏布局保持不变。
  • 方案1更适合日常使用,因为标签的方式更直观,后续如果调整part的顺序或编号,引用会自动更新;方案2则省去了标签的步骤,适合喜欢精简代码的场景。

内容的提问来源于stack exchange,提问作者Jakub Peschel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:53:13