Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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} みたいなことしてくといいかも?

精進精進〜

t_uda
主に JavaScript-er です。HTML5 力が足りていない。数学方面でよく C++ も書いていますがあまり詳しくないです。誰か私に RAII について教えてください。 Twitter とは距離を置いてそろそろ Qiita 活用してプログラミング生活にうちこみたいそんな今日この頃。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away