LoginSignup
8
8

More than 5 years have passed since last update.

自由度の高いネスト環境を newenvironment で作る

Last updated at Posted at 2012-09-02

Beamer で、block 環境 + itemize 環境のネストとかが激しいことになってやってられなくなったので、block 環境 + (他の環境) という新しい環境を作りたくなった。やりたいことのイメージはこんな感じ:

expected-custom-environment.tex
\begin{bblock}{itemize}
\item block 環境の下に itemize 環境をネストしたのと同じ
\end{bblock}

ただでさえ frame 環境やら column 環境やら入り乱れてるので、ネストは一段でも浅くしたいところ。書いてるものがスライドなだけに、途中で気が変わって itemize だった所を enumerate にしたくなったりするし、こう書ければかなりの労力削減が見込める(ホンマか)。

# ちなみに block 環境のタイトルをいつも設定し忘れちゃうんだけど、困ったことに \begin{block} hoge \end{block} みたいなのを渡すと platex 先生はスタックが足りないヨ!って怒ってくる。意味が分からない。オプションにして省略時は空ってしてくれればいいのに。

しかし、普通に \newenvironment しようとしてもこれは上手く行かない。

bad-newenvironment.tex
\newenvironment{bblock}[2][]%
{ \pause \begin{block}{#1} \begin{#2} }
{ \end{#2} \end{block} }

実は、引数を使えるのは BEGIN 側のみで END 側では引数を使えないらしい。ということで、どうしても END 側で引数を使いたい場合、無理やり変数に突っ込んで退避させとくという割と無理やりな回避策が。

custom-nested-environment.tex
\makeatletter
\newenvironment{bblock}[2][]%
{\def\@bblocktmp{#2}%
 \pause \begin{block}{#1} \begin{\@bblocktmp} }
{ \end{\@bblocktmp} \end{block} }
\makeatother 
use-custom-nested-environment.tex
\begin{frame}
\begin{bblock}[タイトルでっせ]{itemize}
\item どうでもいいですが pause コマンドも入れてるのはタダの好みなので
\item いらなきゃ消してください
\item 0は自然数
\end{bblock}

\begin{bblock}{enumerate}
\item タイトルの部分を書き忘れても怒られない!大勝利!
\end{bblock}
\end{frame}

あまり綺麗じゃないけどとりあえずこれで妥協…… あとこれで文書が論理的に綺麗になるかというとそれも微妙なので、bblock は補助にしてそれを使って更に \newenvironment{theorem} みたいなことしてくといいかも?

精進精進〜

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8