La clave `xkeyval` no funciona para configurar la opción `frágil` en el proyector

La clave `xkeyval` no funciona para configurar la opción `frágil` en el proyector

Estoy intentando configurar una macro personalizada para crear marcos en mis presentaciones. Sin embargo, cuando intenté configurar las opciones, puedo pasar al marco usando xkeyvaltoda la macro y deja de funcionar.

¿Cómo puedo pasar la fragileopción al marco usando una macro definida? Además, ¿puede explicar por qué no funciona?

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

ingrese la descripción de la imagen aquí

Respuesta1

En términos generales, "no hagas esto" es la mejor respuesta. Hay dos problemas con su enfoque, uno de los cuales aparece aquí y el otro aparece si soluciona el primero.

El problema inmediato es que, como la mayoría de los argumentos opcionales, beameraquí no se busca "algo que se expanda a" fragile, sino el texto fragile. Entonces, lo que sucede es que \cmdabc@mf@optionsno se reconoce como opcional fragiley el texto (¡o parte de él!) termina dentro de la diapositiva.

El segundo problema, mucho mayor, surge si lo solucionamos, por ejemplo, en un caso de prueba mediante una simple codificación fragileen su ejemplo.

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

Esto luego muere por completo con un error interno. La razón aquí es que con diapositivas frágiles, beamerse realiza un análisis especializado que se basa en la presencia de finales de línea. En su versión 'resumida', los finales de línea se han convertido en espacios mediante la tokenización TeX, por lo que beamerno puede encontrar el final de los comandos. Eso lleva al error. Al igual que con cualquier captura textual, realmente hay que sermuytenga cuidado de ocultar el texto del marcador.

información relacionada