平衡点


2026/06/22

_ Beamer での itemize 環境の下余白の制御[Computer] [TeX

何がしたいか?

端的には, itemize で複数箇条書きをした際に 一つ目の箇条書きを「ブロック化」したい(下に余白を入れたい)ということ.

下の図は上記 URL から.

1つ目のitemizeの下に良い感じに余白を入れる

で, 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 の場合は試していないけれど, 動くのかな.


連絡先など

portrait

最近の日記

一覧

Back to Top ▲