
Я пытаюсь использовать заглавные римские цифры (I, II, ...) для представления каждого раздела в TOC моего проектора с его номером раздела. Следующий MWE в целом работает, но можно заметить, что римские цифры, а следовательно, и заголовки разделов, не выровнены. Вместо этого римские цифры выровнены по левому краю, а расстояние между номером раздела и заголовком фиксировано, таким образом, смещая разделы вправо в зависимости от ширины римской цифры.
[Во время создания этого MWE я хотел, чтобы второй раздел имел номер 25, чтобы лучше визуализировать проблему, так как XXV намного шире, чем I (по сравнению с II). Однако, несмотря на установку счетчика разделов на 24 и thesection
правильное установление на 25 в заголовке кадра, inserttocsectionnumber
команда в TOC выдает только 2
вместо 25
. Было бы хорошо, если бы существовало решение и для этой проблемы, то есть заставить TOC брать фактические номера разделов вместо того, что, как кажется, является его собственным счетчиком.]
\documentclass[t, sansserif, onlymath, 10pt]{beamer}%\mode<handout>
\makeatletter
\defbeamertemplate{section in toc}{sections numbered roman}{%
\@Roman\inserttocsectionnumber.\ %
\inserttocsection\par}
\renewcommand*{\numberline}[1]{%
\hb@xt@\@tempdima{\hfil#1 }%
}
\makeatother
\begin{document}
\setbeamertemplate{section in toc}[sections numbered roman]
\setbeamerfont{section in toc}{size=\normalsize, family = \sffamily}
\setbeamerfont{section in toc}{shape = \normalfont}
\begin{frame}
\frametitle{Overview}
\tableofcontents[currentsection]
\end{frame}
\section{section one}
\begin{frame}
\frametitle{xxx1 \thesection}
\end{frame}
\setcounter{section}{24}
\section{section two/twenty-five}
\begin{frame}
\frametitle{xxx2 \thesection}
\end{frame}
\setbeamercovered{transparent}
\begin{frame}
\frametitle{{Agenda}}
\begin{enumerate}[I.]
\item <1|handout: 1> { Overview} \\
\vspace{0.9cm}
\item <0|handout: 1> {sec1}\\
\vspace{0.9cm}
\item <0|handout: 1> {sec 2: }\\
\end{enumerate}
\end{frame}
\end{document}
Включение последнего слайда дает примерно то, как я хочу, чтобы выглядел результат (на самом деле, это то, откуда я пришел, но мне нужна автоматизация). Вы можете видеть, что при использовании пакета "enumerate" "перечисления" выровнены по правому краю, как и заголовки разделов.
В преамбуле документа код
\defbeamertemplate{section in toc}{sections numbered roman}{%
\@Roman\inserttocsectionnumber.\ %
\inserttocsection\par}
служит для использования римских цифр и вставки номеров разделов перед заголовками разделов, а также
\renewcommand*{\numberline}[1]{%
\hb@xt@\@tempdima{\hfil#1 }%
}
пытается выровнять число по правому краю, используя команду, взятую изВыравнивание чисел по правому краю в оглавлении , но это скорее касается выравнивания разделов и подразделов относительно друг друга, и приведенный выше фрагмент кода не решает эту задачу.
решение1
Быстрое решение:
поместите римскую цифру в рамку фиксированной ширины
\documentclass[t, sansserif, onlymath, 10pt]{beamer}%\mode<handout>
\makeatletter
\defbeamertemplate{section in toc}{sections numbered roman}{%
\makebox[0.8cm]{\hfill\@Roman\inserttocsectionnumber.}\space%
\inserttocsection\par
}
\makeatother
\begin{document}
\setbeamertemplate{section in toc}[sections numbered roman]
\begin{frame}
\frametitle{Overview}
\tableofcontents
\end{frame}
\section{section one}
\begin{frame}
\frametitle{xxx1 \thesection}
\end{frame}
\makeatletter
\beamer@tocsectionnumber=24
\makeatother
\section{section two/twenty-five}
\begin{frame}
\frametitle{xxx2 \thesection}
\end{frame}
\end{document}