我定义了一个文档类,在其中重新定义了标题格式(使用包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
。