![Условно печатать подраздел в Beamer](https://rvso.com/image/298822/%D0%A3%D1%81%D0%BB%D0%BE%D0%B2%D0%BD%D0%BE%20%D0%BF%D0%B5%D1%87%D0%B0%D1%82%D0%B0%D1%82%D1%8C%20%D0%BF%D0%BE%D0%B4%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%20%D0%B2%20Beamer.png)
Я перенес шаблон моего университета из PowerPoint в Beamer и добавил код для отображения разделов (и подразделов, если они есть) в заголовке.
Вот фрагмент кода, который я поместил в headline
шаблон для этой цели:
\begin{beamercolorbox}[wd=0.6\paperwidth,ht=0.1\beamer@PoliMI@headheight]{section in head/foot}%
\usebeamerfont{section in head/foot}\par%
\vfill\strut\insertsectionhead%
\ifx\insertsubsection\empty\else%
~--~\insertsubsectionhead%
\fi%
\strut\par%
\end{beamercolorbox}\\%
Однако при «выходе» из подраздела (выдаче \subsection*{}
) тире после названия раздела все равно печатается.
Как проверить, является ли имя подраздела недействительным?
Как альтернатива, как сделать его \insertsubsection
пустым?
МВЭ:
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}\normalfont
\usepackage[T1]{fontenc}
\setbeamertemplate{navigation symbols}{}
\setbeamertemplate{headline}{%
\begin{beamercolorbox}[wd=0.6\paperwidth,ht=0.016\paperwidth]{section in head/foot}%
\usebeamerfont{section in head/foot}%
\par\vfill\strut\insertsectionhead%
\ifx\insertsubsection\empty\else~--~\insertsubsectionhead%
\fi\strut\par%
\end{beamercolorbox}%
}
\begin{document}
\section{aaa}
\begin{frame}~\end{frame}
\subsection{bbb}
\begin{frame}~\end{frame}
\subsection*{}
\begin{frame}~\end{frame}
\end{document}
В третьем кадре должно быть только «aaa», а не «aaa -».
ОБНОВЛЯТЬ: Если подраздел еще не определен, \insertsubsection
то он пуст, тогда как если \subsection*{}
выдается , макрос расширяется в \expandafter \hyperlink \subsectionlink
, либо подраздел пуст ( \insertsubsectionhead
расширяется до \hyperlink {Navigation\the \c@page }{}
), либо нет ( \insertsubsectionhead
расширяется до \hyperlink {Navigation\the \c@page }{bbb}
во втором кадре).
решение1
Я заменил фрагмент кода на
\ifx\insertsubsection\empty\else%
\ifdefempty{\subsecname}{\relax}{%
~--~\insertsubsectionhead%
}%
\fi
и ЭТО РАБОТАЕТ!!!
К сожалению, требуется etoolbox
загрузка пакета...
РЕДАКТИРОВАТЬ:
\setbox0=\hbox{\subsecname\unskip}\ifdim\wd0=0pt\else%
~--~\insertsubsectionhead%
\fi%
также работает и не требует etoolbox
.
Я не знаю, является ли это "более чистым" решением.
решение2
Я не могу комментировать, но у меня возникли проблемы со вторым решением @Astrinus, и я все равно хотел бы поделиться ими.
\subsecname
не удаляется по умолчанию при создании нового раздела. Замена его на \insertsubsectionhead
сработала, чтобы решить эту проблему для меня.
\setbox0=\hbox{\insertsubsectionhead\unskip}\ifdim\wd0=0pt\else%
- \insertsubsectionhead%
\fi%
решение3
У меня возникли проблемы с распознаванием конца подраздела:
\ifx\insertsubsection\empty
Заключив Подраздел в фигурные скобки, мы сделали это работоспособным:
{
\subsection{SubSection Title}
<subsection frames>
}
<other frames>
Условие правильно различалось между кадрами внутри и снаружи этого Подраздела