我正在嘗試設定自訂巨集來在簡報中建立框架。但是,當我嘗試設定選項時,我可以使用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
無法找到指令的結尾。這會導致錯誤。與任何逐字記錄的抓取一樣,您確實必須非常警惕隱藏標記文字。