如何创建类似于 \author 的新命令

如何创建类似于 \author 的新命令

我正在为我们学生的项目准备一个基于 的新模板memoir。所有这些项目都由一位或多位教授监督(指导),所以我想声明一个类似\author但名为 的命令\director

这样,学生就可以声明\director{My professor},模板将放置和格式化名称。

我希望它是相似的\author,而不仅仅是简单的,\newcommand因为它可以包括隶属关系、几个名字等等。

我不知道在哪里\author声明,我应该去哪里看?

答案1

如上所述,\author\@author定义在latex.ltx, 但memoir为它们添加一些额外的功能(例如,允许多个作者通过\and并正确设置它们)。以下最小示例增加了\director组合:

在此处输入图片描述

\documentclass{memoir}% http://ctan.org/pkg/memoir
\makeatletter
\newcommand{\director}[1]{\gdef\@director{#1}}%
\newcommand{\@director}{\@latex@warning@no@line{No \noexpand\director given}}
\addtoiargdef{\director}{%
  \begingroup\let\footnote\@gobble}{%
  \begingroup
    \renewcommand{\thanks}[1]{}
    \renewcommand{\and}{\unskip, }
    \renewcommand{\andnext}{\unskip, }
    \renewcommand{\thanksmark}[1]{}
    \renewcommand{\thanksgap}[1]{}
    \protected@xdef\thedirector{#1}
  \endgroup\endgroup}
\newcommand{\predirector}[1]{\def\@bspredirector{#1}}
\newcommand{\postdirector}[1]{\def\@bspostdirector{#1}}
\renewcommand{\maketitlehookc}{%
  {\@bspredirector \@director \@bspostdirector}%
}
\predirector{\begin{center}
  \large \lineskip .5em%
  \begin{tabular}[t]{c}}
\postdirector{\end{tabular}\par\end{center}}
\makeatother
\title{A Title}
\author{An Author \and Another Author}
\director{My Director \and My other Director}
\date{\today}
\begin{document}
\maketitle
\end{document}

该过程是复制组件\author并使用提供的钩子将插入到内部\director。也就是说,有一个钩子:\author\@maketitle\@maketitle

  • \maketitlehooka\title;
  • \maketitlehookb\author;
  • \maketitlehookc之前\date;和
  • \maketitlehookd\date

我已将其重新定义\maketitlehookc为现在的 be/contain ,并且其格式与is(ed 和)\director相同。\authorcenter\large

答案2

author定义在latex.ltx

\def\author#1{\gdef\@author{#1}}
\def\@author{\@latex@warning@no@line{No \noexpand\author given}}

您可以使用以下方式在 Linux 下加载文件

gedit `kpsewhich latex.ltx`  

但是,memoir作者的定义更多。查看文件并搜索作者。在标题中使用memoir.cls宏并将其设置为标题后。\@author\relax

相关内容