`xkeyval` キーは、Beamer の `fragile` オプションの設定には機能しません

`xkeyval` キーは、Beamer の `fragile` オプションの設定には機能しません

プレゼンテーションにフレームを作成するためのカスタム マクロを設定しようとしています。ただし、フレームに渡すことができるオプションを設定しようとすると、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、テキスト (またはその一部) がスライド内に表示されることになります。

fragile2つ目の、より大きな問題は、例えばテストケースで例に単純にハードコーディングして修正した場合に発生します。

\begin{frame}[fragile]{\cmdabc@mf@title}

その後、内部エラーで完全に停止します。その理由は、脆弱なスライドでは、beamer行末の存在に依存する特殊な解析が行われるためです。「ラップアップ」バージョンでは、行末はTeXトークン化によってスペースに変換されているため、beamerコマンドの終了を見つけることができません。これがエラーの原因です。他の逐語的なグラブと同様に、とてもマーカーテキストを非表示にすることに注意します。

関連情報