documentclass 中的 \titleformat{name=\section}

documentclass 中的 \titleformat{name=\section}

我定义了一个文档类,在其中重新定义了标题格式(使用包titlesec):

\titleformat{name=\section} 

这有效。

但如果我将其移至\titleformat{name=\section}块中\DeclareOption,则无法编译。它表示其中的所有命令\DeclareOption都已定义。

另一方面,\DeclareOption如果我使用以下语法,块中的此格式声明将起作用\titleformat{name=\section}

这是一个错误吗?

关键是我想要使用两个参数{name=\section, numberless=true};这就是我想要这种语法的原因。

[编辑] 感谢您的帖子。下面是“错误”的一个例子:documentclass 文件 maclasse.cls:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{maclasse}[2011/12/19 maclasse]
\LoadClass{article}
\RequirePackage[explicit]{titlesec}

% Sectioning
%% BLOC 1
\titleformat{\section}%
   {\large\sffamily\bfseries}%
   {lasection \arabic{section}}%
   {0.5em}%
   {#1}% 

%% BLOC 2
\titleformat{name=\section,numberless=true}%
   {\sffamily\bfseries}%
  {}%
   {0.5em}%
   {#1}



\DeclareOption{opt}{


}

\ProcessOptions

测试文件

\documentclass[opt]{maclasse}

\begin{document}
\section{abc}
abc
\section*{def}
def

\end{document}

它可以编译。

  • 现在,将 BLOC1 移入 \DeclareOption{opt} -> 它可以起作用。

  • 相反,将 BLOC2 移入 \DeclareOption{opt} -> 编译失败:

    !LaTeX 错误:\RequirePackage 或 \LoadClass 在选项部分中。

我做错了什么?

谢谢

尼古拉斯

答案1

该类应该以不同的方式编写:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{maclasse}[2011/12/19 maclasse]

% Sectioning
\newif\if@maclasseopt
\DeclareOption{opt}{\@maclasseopttrue}

\ProcessOptions\relax
\LoadClass{article}

\RequirePackage[explicit]{titlesec}
\if@maclasseopt
\titleformat{name=\section}%
  {\large\sffamily\bfseries}%
  {lasection \arabic{section}}%
  {0.5em}%
  {#1}
\titleformat{name=\section,numberless=true}%
  {\sffamily\bfseries}%
  {}%
  {0.5em}%
  {#1}%
\fi

最好不要在\DeclareOption命令中加载太多代码,通常使用条件语句加载。此外,不可能titlesec在主类之前加载,因此必须推迟加载。

最重要的,\LoadClass 必须追赶\ProcessOptions

相关内容