Der Schlüssel „xkeyval“ funktioniert nicht zum Festlegen der Option „fragile“ in Beamer

Der Schlüssel „xkeyval“ funktioniert nicht zum Festlegen der Option „fragile“ in Beamer

Ich versuche, ein benutzerdefiniertes Makro einzurichten, um Rahmen in meinen Präsentationen zu erstellen. Beim Versuch, die Optionen festzulegen, die ich mithilfe xkeyvaldes gesamten Makros an den Rahmen übergeben kann, funktioniert es jedoch nicht mehr.

Wie kann ich die Option mit einem definierten Makro an den Rahmen übergeben fragile? Können Sie außerdem erklären, warum das nicht funktioniert?

\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}

Bildbeschreibung hier eingeben

Antwort1

Im Großen und Ganzen ist „Tun Sie das nicht“ die beste Antwort. Ihr Ansatz hat zwei Probleme, von denen eines hier auftritt und eines, wenn Sie das erste Problem beheben!

Das unmittelbare Problem ist, dass beamerhier wie bei den meisten optionalen Argumenten nicht nach etwas gesucht wird, das sich zu erweitern lässt fragile, sondern nach dem Text fragile. Was also passiert, ist, dass \cmdabc@mf@optionsnicht als optionales erkannt wird fragileund der Text (oder ein Teil davon!) in der Folie landet.

Das zweite, viel größere Problem entsteht, wenn wir das beheben, zum Beispiel in einem Testfall, indem wir einfach fragilein Ihr Beispiel fest codieren

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

Dies bricht dann vollständig mit einem internen Fehler ab. Der Grund hierfür ist, dass bei fragilen Folien beamereine spezielle Analyse durchgeführt wird, die auf das Vorhandensein von Zeilenenden angewiesen ist. In Ihrer „zusammengefassten“ Version wurden die Zeilenenden durch TeX-Tokenisierung in Leerzeichen umgewandelt, sodass beamerdas Ende der Befehle nicht gefunden werden kann. Das führt zu dem Fehler. Wie bei jeder wörtlichen Erfassung müssen Sie wirklich vorsichtig sein.sehrVorsicht beim Ausblenden des Markierungstextes.

verwandte Informationen