平衡点
2026/06/22
_ Beamer での itemize 環境の下余白の制御[Computer] [TeX]
何がしたいか?
端的には, itemize で複数箇条書きをした際に 一つ目の箇条書きを「ブロック化」したい(下に余白を入れたい)ということ.
下の図は上記 URL から.
で, global に設定するのでも良いけれど, どうせなら frame 毎に挙動を切り替えたいよね, ということで.
コード
こんな感じ?
% ----------------------------------------------------------------------------
% itemize 環境の余白有無の切り替え
% ----------------------------------------------------------------------------
\makeatletter
\RequirePackage{xpatch}
\RequirePackage{etoolbox}
% 内部判定用のスイッチを定義し、デフォルトを「有効(true)」にする
\newif\if@globalcustommargin
\@globalcustommargintrue
\newif\if@usecustommargin
\DeclareOption{nocustommargin}{\@globalcustommarginfalse}
\ProcessOptions\relax
% ----------------------------------------------------------------------------
% Frame単位で切り替えるためのオプション(Beamer key)を定義
% フレームが始まる直前に、毎回設定をグローバル設定にリセット
\BeforeBeginEnvironment{frame}{%
\if@globalcustommargin
\@usecustommargintrue
\else
\@usecustommarginfalse
\fi
}
% \begin{frame}[nocustommargin] でそのフレームだけ無効化
\define@key{beamerframe}{nocustommargin}[true]{\@usecustommarginfalse}
% \begin{frame}[custommargin] でそのフレームだけ有効化
\define@key{beamerframe}{custommargin}[true]{\@usecustommargintrue}
% ----------------------------------------------------------------------------
% 長さの定義
\newlength{\my@beamer@itemsepi}\setlength{\my@beamer@itemsepi}{3ex}
\newlength{\my@beamer@itemsepii}\setlength{\my@beamer@itemsepii}{.2ex}
\newlength{\my@beamer@itemsepiii}\setlength{\my@beamer@itemsepiii}{.2ex}
\newcommand\setlistsep[3]{%
\setlength{\my@beamer@itemsepi}{#1}%
\setlength{\my@beamer@itemsepii}{#2}%
\setlength{\my@beamer@itemsepiii}{#3}%
}
% ----------------------------------------------------------------------------
% xpatch 本体
\newcommand{\my@beamer@setsep}{%
\if@usecustommargin
\ifnum\@itemdepth=1\relax
\setlength\itemsep{\my@beamer@itemsepi}%
\else
\ifnum\@itemdepth=2\relax
\setlength\itemsep{\my@beamer@itemsepii}%
\else
\ifnum\@itemdepth=3\relax
\setlength\itemsep{\my@beamer@itemsepiii}%
\fi\fi\fi
\fi
}
\xpatchcmd{\itemize}{\def\makelabel}{\my@beamer@setsep\def\makelabel}{}{}
\xpatchcmd{\beamer@enum@}{\def\makelabel}{\my@beamer@setsep\def\makelabel}{}{}
\makeatother
諸々の設定をまとめた「スタイル」を用意しているので
\usepackage[nocustommargin]{org-lualatex-beamer-lecture-settings-2026A}
とか
\usepackage{org-lualatex-beamer-lecture-settings-2026A}
で global な設定を切り替え.
\begin{frame}[fragile,custommargin]{大目標}
とか
\begin{frame}[fragile,nocustommargin]{大目標}
なんかで, フレーム毎の切り替え
という塩梅. とりあえず lualatex で Beamber なスライドを作成する時には使えている.
upTeX の場合は試していないけれど, 動くのかな.
[ツッコミを入れる]