Beamer TOC: Выравнивание номеров разделов по правому краю

Beamer TOC: Выравнивание номеров разделов по правому краю

Я пытаюсь использовать заглавные римские цифры (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}

введите описание изображения здесь

Связанный контент