在类中定义(可选)数据

在类中定义(可选)数据

我正在尝试学习如何编写 latex 类,并使用我的简历作为示例。我试图尽可能地将样式与内容分开,因此我尝试定义数据字段,例如\name \address \university,类似于我在中看到的字段\maketitle。其中每个字段中的一些字段是可选的。我有一个工作示例,但由于这是我第一次尝试编写 latex 类,我想问一下我如何应该定义类的元数据。

我迄今为止的尝试是这样的(地址的第二行可选):

\RequirePackage{xkeyval} % for keyval

\newif\ifAddressLineTwo\AddressLineTwofalse
\newcommand{\@address@firstline}{}
\newcommand{\@address@secondline}{}
\newcommand{\@address@town}{}
\newcommand{\@address@postcode}{}

\define@key{address}{first_line}[none]{%
  \renewcommand{\@address@firstline}{#1}%
}
\define@key{address}{second_line}[none]{%
  \AddressLineTwotrue
  \renewcommand{\@address@secondline}{#1}%
}
\define@key{address}{town}[none]{%
  \renewcommand{\@address@town}{#1}%
}
\define@key{address}{postcode}[none]{%
  \renewcommand{\@address@postcode}{#1}%
}
\newcommand\address[2][]{%
\setkeys{address}{#2}%
} 


\newcommand{\makeCV}{%
\@address@firstline\\%
\ifAddressLineTwo
\@address@secondline\\%
\fi
\@address@town\\%
\@address@postcode%
}

这对我来说没问题,我可以打字

\address
{
  first_line= my road
  %second_line=my county,
  town=my city, 
  postcode=my post code
}
\makeCV

但类看起来有点冗长?特别是,必须定义所有这些\newcommand{...}{}和各种\newif,这似乎有点冗长。

我的问题是我应该如何正确地完成这项任务?

答案1

你可以使用键盘命令包裹。

但我不会太担心编码的冗长,而是担心你向潜在用户呈现的作者界面,它很冗长。根据我与用户打交道的经验,他们更喜欢(环境)和简单的命令。我会保留这些key-val对,主要用于切换,例如是否包含照片。当然,地址行不属于命令的键值部分。如下所示的界面,

\usepackage[foto=none]{sCV}
\begin{CV}
  \AddaAddressLine{}
  \AddAddressLine{}
  \AddWorkexperience{}
  \Addacademic{}
  \AddFoto{}
\end{CV}

编码和使用会更加容易。使用环境还可以使跨多个页面的编码更加容易。

答案2

我直接写了这个,没有尝试,所以要小心:NPK 对于新包最好使用例如包名称的字母。mcv makeCV。\define@boolkey 你不需要\newif\ifNPK@mcv@LineTwo会自动创建。\presetkeys是给出默认值, \setkeys[NPK]{mcv}{#1}是应用宏中的选项。没有尝试,也许我会犯一些错别字 :(

现在我更喜欢使用pgfkeys如果你想要同样的东西,这是可能的,但也许它更冗长

\define@boolkey [NPK] {mcv} {LineTwo}[true]{}
\define@cmdkey  [NPK] {mcv} {firstline}{}
\define@cmdkey  [NPK] {mcv} {secondline}{}   
\define@cmdkey  [NPK] {mcv} {town}{}   
\define@cmdkey  [NPK] {mcv} {postcode}{}  
\presetkeys     [NPK] {mcv} {LineTwo      = false,
                             firstline    = {},
                             secondline   = {},
                             town         = {},% Paris
                             postcode     = {}}{} % 75005 
\newcommand{\makeCV}[1][]{%
\setkeys[NPK]{mcv}{#1}  
\cmdNPK@mcv@firstline\\%
\ifNPK@mcv@LineTwo
\cmdNPK@mcv@secondline\\%
\fi
\cmdNPK@mcv@town\\%
\cmdNPK@mcv@postcode%
}

相关内容