我尝试使用键值选项实现一个个人类(我是该领域的新手)。例如,我想使用选项“langue=xxx”指定语言(用于 babel 包),默认值为“francais”。我尝试了kv选项包装如下:
类文件:(如果您发现冲突,我会给您完整的包列表)
\ProvidesClass{mepp}[2014/03/08 Personnal class development version]
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{kvoptions}
\DeclareStringOption[francais]{langue}
\ProcessKeyvalOptions*
\LoadClass[twoside]{report}
\RequirePackage[paper=a4paper, lmargin=15mm, rmargin=15mm, tmargin=15mm, bmargin=15mm,
includeall, marginparwidth=44mm, headheight=\baselineskip]{geometry}
\RequirePackage{babel}
\RequirePackage[T1]{fontenc}
\RequirePackage[latin1]{inputenc}
\RequirePackage{emerald}
\RequirePackage{setspace}
\RequirePackage{calc}
\RequirePackage{array, multirow, tabularx}
\RequirePackage{xcolor, color, colortbl}
\RequirePackage[fleqn]{amsmath}
\RequirePackage{amssymb, mathrsfs, stmaryrd, gensymb}
\RequirePackage{graphicx, picins}
\RequirePackage{subfig}
\RequirePackage[top]{mcaption}
\RequirePackage{fancyhdr, lastpage}
\RequirePackage[fit]{truncate}
\RequirePackage[upright]{fourier}
\RequirePackage{mdwlist}
\RequirePackage{titlesec, titletoc}
\RequirePackage{ulem}
\RequirePackage{float}
\RequirePackage[globalcitecopy]{bibunits}
\RequirePackage{multido}
\RequirePackage{ragged2e}
\RequirePackage{marginfix}
\RequirePackage[geometry]{ifsym}
\RequirePackage{ifthen}
\RequirePackage[strict]{changepage}
\RequirePackage{framed}
\PassOptionsToPackage{\mepp@langue}{babel}
Tex 文件:
\documentclass[langue=francais]{mepp}
...
但编译失败:编译器说没有为 babel 指定语言。如果我不指定任何选项,或者我给出了一个没有“=”符号的“错误”选项,编译会成功,因为它会将默认值分配给“langue”。
那么,为什么“langue=francais”选项无法识别?感谢您的帮助。
(抱歉,我是法国人)
答案1
你babel
之前正在加载\PassOptionsToPackage{\mepp@langue}{babel}
,因此不会评估该选项;只需使用
\RequirePackage[\mepp@language]{babel}
如果只想在指定选项babel
时加载,则可以执行langue
\DeclareStringOption{langue}
进而
\ifx\mepp@langue\@empty\else
\RequirePackage[\mepp@langue]{babel}
\fi
因此如果langue=...
没有指定该选项,babel
则不会加载。