![Beamer で条件付きでサブセクションを印刷する](https://rvso.com/image/298822/Beamer%20%E3%81%A7%E6%9D%A1%E4%BB%B6%E4%BB%98%E3%81%8D%E3%81%A7%E3%82%B5%E3%83%96%E3%82%BB%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E5%8D%B0%E5%88%B7%E3%81%99%E3%82%8B.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*{}
)、セクション名の後のダッシュは引き続き印刷されます。
サブセクション名が void かどうかをテストするにはどうすればよいでしょうか?
代わりに、\insertsubsection
空にするにはどうすればよいでしょうか?
MWE:
\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}
3 番目のフレームには、「aaa」のみが表示され、「aaa -」は表示されません。
アップデート: サブセクションがまだ定義されていない場合は\insertsubsection
は空ですが、 が\subsection*{}
発行された場合は マクロが に展開され\expandafter \hyperlink \subsectionlink
、サブセクションが空(\insertsubsectionhead
に展開される\hyperlink {Navigation\the \c@page }{}
)か、そうでないか(2 番目のフレームで に\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 の 2 番目の解決策に問題があったため、共有したいと思いました。
\subsecname
新しいセクションが作成されても、デフォルトでは削除されません。これを に置き換えると\insertsubsectionhead
、問題は解決しました。
\setbox0=\hbox{\insertsubsectionhead\unskip}\ifdim\wd0=0pt\else%
- \insertsubsectionhead%
\fi%
答え3
次の方法でサブセクションの終了を認識できないという問題がありました:
\ifx\insertsubsection\empty
SubSection を中括弧で制限すると動作するようになりました。
{
\subsection{SubSection Title}
<subsection frames>
}
<other frames>
条件は、そのサブセクションの内側と外側のフレーム間で正しく異なっていました