プレゼンテーションにフレームを作成するためのカスタム マクロを設定しようとしています。ただし、フレームに渡すことができるオプションを設定しようとすると、xkeyval
マクロ全体が機能しなくなります。
fragile
定義されたマクロを使用してフレームにオプションを渡すにはどうすればよいですか? また、なぜ機能しないのか説明していただけますか?
\documentclass{beamer}
\usepackage{xkeyval}
\makeatletter
% Define the keys for the myframe (my)
\define@cmdkey[abc]{mf}{title}{}% title of the frame
\define@cmdkey[abc]{mf}{options}{}% options to the frame
\presetkeys[abc]{mf}{title=,options=}{}
\newcommand{\myframe}[3][]{%
\setkeys[abc]{mf}{#1}
\begin{frame}[\cmdabc@mf@options]{\cmdabc@mf@title}%
% my frame definition here
#2 #3
\end{frame}%
}
\makeatother
\begin{document}
% this works
\myframe[title=test]{test1}{test 2}
% this doesn't
\myframe[options=fragile,title=test]{test1}{test 2}
\end{document}
答え1
大まかに言えば、「これを行わない」が最善の答えです。あなたのアプローチには 2 つの問題があり、そのうちの 1 つはここで現れ、もう 1 つは最初の問題を修正すると現れます。
差し迫った問題は、ほとんどのオプション引数と同様に、beamer
はここで に展開される何か を探しているのではなくfragile
、テキスト を探していることfragile
です。そのため、 は\cmdabc@mf@options
オプションの として認識されずfragile
、テキスト (またはその一部) がスライド内に表示されることになります。
fragile
2つ目の、より大きな問題は、例えばテストケースで例に単純にハードコーディングして修正した場合に発生します。
\begin{frame}[fragile]{\cmdabc@mf@title}
その後、内部エラーで完全に停止します。その理由は、脆弱なスライドでは、beamer
行末の存在に依存する特殊な解析が行われるためです。「ラップアップ」バージョンでは、行末はTeXトークン化によってスペースに変換されているため、beamer
コマンドの終了を見つけることができません。これがエラーの原因です。他の逐語的なグラブと同様に、とてもマーカーテキストを非表示にすることに注意します。