“xkeyval”鍵不適用於在投影機中設定“fragile”選項

“xkeyval”鍵不適用於在投影機中設定“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

一般來說,「不要這樣做」是最好的答案。您的方法有兩個問題,其中一個出現在此處,其中一個出現在您修復第一個問題後!

眼前的問題是,像大多數可選參數一樣,beamer這裡不是尋找“擴展為 的東西” fragile,而是尋找文本fragile。因此,發生的情況是\cmdabc@mf@options無法將其識別為可選fragile,並且文字(或其中一些!)最終出現在幻燈片內。

如果我們解決這個問題,第二個更大的問題就會出現,例如在測試案例中透過簡單的硬編碼fragile到您的範例中

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

然後,它會因內部錯誤而完全終止。這裡的原因是,對於脆弱的幻燈片,beamer需要進行一些依賴行尾存在的專門解析。在您的「包裝」版本中,行尾已透過 TeX 標記化變成空格,因此beamer無法找到指令的結尾。這會導致錯誤。與任何逐字記錄的抓取一樣,您確實必須非常警惕隱藏標記文字。

相關內容