使用宏替换代码块(Beamer)

使用宏替换代码块(Beamer)

当我使用 Beamer 包时,我经常使用代码块。

\RequirePackage{etoolbox}
\documentclass[handout, 14pt]{beamer}
\usecolortheme{seahorse}

\begin{document}

# Start of the block
\def\name{OOP Features}
\section[OOP]{\name}
\begin{frame}[fragile]{}%
\begin{center}%
\usebeamerfont*{frametitle}%
\usebeamercolor[fg]{frametitle}%
\name
\end{center}%
\end{frame}
\input{a}  
# end of a block
\end{document}

我需要用单个命令“buildchapter”替换该块,所以我想到了以下宏。

\newcommand\buildchapter[3]{
\section[#1]{#2}
\begin{frame}[fragile]{}%
\begin{center}%
\usebeamerfont*{frametitle}%
\usebeamercolor[fg]{frametitle}%
#2
\end{center}%
\end{frame}
\input{#3} 
}
...
\buildchapter{h}{hello}{a.tex}

但是,我遇到了错误,包括“Extra },或者忘记了 \endgroup”。我尝试使用 \def,但结果是一样的。

可能出了什么问题?

答案1

脆弱框架选项只应在真正必要时使用。它严重限制了框架。

就您而言,脆弱框架选项不是必需的。脆弱内容不能作为宏的参数,因此任何通过宏到达框架的内容都不是脆弱的,因此不需要脆弱框架。

\documentclass[handout, 14pt]{beamer}
\usecolortheme{seahorse}

\begin{filecontents*}[overwrite]{a.tex}
\begin{frame}
test
\end{frame}
\end{filecontents*}


\newcommand\buildchapter[3]{
\section[#1]{#2}
\begin{frame}%
\begin{center}%
\usebeamerfont*{frametitle}%
\usebeamercolor[fg]{frametitle}%
\insertsection
\end{center}%
\end{frame}
\input{#3} 
}

\begin{document}
    
\buildchapter{h}{hello}{a.tex}
    
\end{document}

相关内容