建立自定义类的最佳方法

建立自定义类的最佳方法

我正在根据 定制一个类beamer。您认为定义选项的最佳方法是什么?

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myclass}[2019/03/25 myclass]
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{beamer}}
\DeclareOption{transparent}{%here some code%}
\DeclareOption{fill}{%here some code%}
\ProcessOptions\relax
\LoadClass{beamer}
\usetheme[progress bar = frametitle]{metropolis}

我想用类似以下内容的代码替换代码的注释部分

\metroset{block=transparent}
\setbeamercolor{block title}{%
 use=normal text,
 fg=normal text.fg,
 bg=normal text.bg} 
\setbeamercolor{block body}{
    use={block title, normal text},
    bg=normal text.bg}

\metroset{block=fill}
\setbeamercolor{block title}{%
 use=normal text,
 fg=normal text.fg,
 bg=normal text.bg!80!fg} %default normal text.bg!80!fg  
\setbeamercolor{block body}{
    use={block title, normal text},
    bg=normal text.bg!80!fg}

我无法将代码直接放在 中DeclareOption,因为beamer尚未指定类和大都会主题。我无法移动LoadClass上面的内容,否则DeclareOption*不会将选项传递给类。通过定义newifs 并将其用作加载或不加载代码特定部分的标志,可以轻松解决此问题。有没有更快的方法来产生相同的结果,也许不需要用许多 s 填充代码newif

答案1

您可以将选项代码放在(内部)命令中,比如\opt@fill,并\AtEndOfClass在类末尾使用来执行命令...。

平均能量损失

我的类名.cls

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myclass}[2019/03/25 myclass]
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{beamer}}
\DeclareOption{transparent}{\AtEndOfClass{\opt@transparent}}
\DeclareOption{fill}{\AtEndOfClass{\opt@fill}}
\ProcessOptions\relax
\LoadClass{beamer}
\usetheme[progress bar = frametitle]{metropolis}
\newcommand{\opt@transparent}{%
  \metroset{block=transparent}
  \setbeamercolor{block title}{%
    use=normal text,
    fg=normal text.fg,
    bg=normal text.bg} 
  \setbeamercolor{block body}{
    use={block title, normal text},
    bg=normal text.bg}}
\newcommand{\opt@fill}{%
  \metroset{block=fill}
  \setbeamercolor{block title}{%
    use=normal text,
    fg=normal text.fg,
    bg=normal text.bg!80!fg} %default normal text.bg!80!fg  
  \setbeamercolor{block body}{
    use={block title, normal text},
    bg=normal text.bg!80!fg}}
\endinput

麦格

\documentclass[fill]{myclass}
\begin{document}
\begin{frame}{hello}
  \begin{block}{world}
    foo, bar
  \end{block}
\end{frame}
\end{document}

结果

结果

相关内容