비머에서 `fragile` 옵션을 설정하는 데 `xkeyval` 키가 작동하지 않습니다.

비머에서 `fragile` 옵션을 설정하는 데 `xkeyval` 키가 작동하지 않습니다.

프레젠테이션에서 프레임을 만들기 위해 사용자 정의 매크로를 설정하려고 합니다. 그러나 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

크게 보면 '이렇게 하지 마세요'가 가장 좋은 대답입니다. 접근 방식에는 두 가지 문제가 있습니다. 그 중 하나는 여기에 표시되고 다른 하나는 첫 번째 문제를 수정하면 표시됩니다!

즉각적인 문제는 대부분의 선택적 인수와 마찬가지로 beamer여기에서 '로 확장되는 항목을 찾는 것이 아니라 fragile텍스트를 찾고 있다는 것입니다 fragile. 따라서 \cmdabc@mf@options선택 사항으로 인식되지 않고 fragile텍스트(또는 그 중 일부!)가 슬라이드 내부에 표시됩니다.

두 번째로 훨씬 더 큰 문제는 예를 들어 테스트 케이스에서 fragile예제에 간단히 하드 코딩하여 문제를 해결하면 발생합니다.

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

그러면 내부 오류로 인해 완전히 종료됩니다. 그 이유는 깨지기 쉬운 슬라이드의 경우 beamer줄 끝의 존재에 의존하는 일부 전문적인 구문 분석을 수행하기 때문입니다. 'wrapped-up' 버전에서는 줄 끝이 TeX 토큰화에 의해 공백으로 바뀌었으므로 beamer명령 끝을 찾지 못합니다. 이로 인해 오류가 발생합니다. 말 그대로 잡는 것과 마찬가지로, 당신은 정말로매우마커 텍스트를 숨기지 않도록 주의하세요.

관련 정보