我在此示例中创建了一个简单的 .cls 文件。我想使用authblk
该blocks
模式。
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{testclass}[2019/10/18 Test class]
\LoadClass[onecolumn]{article}
\RequirePackage[utf8]{inputenc}
\usepackage[english]{babel}
\DeclareOption{twocolumn}{\OptionNotUsed}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
\RequirePackage[blocks]{authblk}
\setlength{\affilsep}{0em}
\renewcommand{\maketitle}{%
\thispagestyle{empty}%
\vskip-36pt%
{\raggedright\sffamily\bfseries\MakeUppercase{\@title}\par}%
\vskip10pt
{\raggedleft\sffamily \@author\par}
\vskip18pt%
}
然后这里是使用上述类的简单 .tex 文件。
\documentclass[10pt,a4paper]{testclass}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\author{author1}
\author{author2}
\affil{affil1}
\author{author3}
\author{author4}
\affil{affil2}
\title{Test Author Block}
\begin{document}
\maketitle
\end{document}
当有多个作者时,我收到以下错误:
! Misplaced \crcr. \endtabular ->\crcr
\egroup \egroup $\egroup l.14 \maketitle
当以脚注样式使用隶属关系时,它可以编译且不会出现任何错误。
\author[1]{author1}
\author[2]{author2}
\affil[1,2]{affil1}
\author[3]{author3}
\author[4]{author4}
\affil[3,4]{affil2}
课堂上出了什么问题?
答案1
答案很可能来得太晚了,但对于像我一样的人来说可能有用。我为同样的问题绞尽脑汁几个小时。
我最终在 的文档中找到了解决方案authblk
。实际上,在 的包实现细节中,默认情况下authblk.dtx
不包含在 中authblk.pdf
(至少在 TeX Live 中)。从部分基本理念:
显然,的定义
\and
必须与输出的环境兼容\@author
。
默认情况下,\and
需要在环境中使用tabular
。重新定义\and
即可解决问题。例如,将以下内容添加到类定义中:
\renewcommand{\and}{\vskip10pt}
完整的测试类定义将是:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{testclass}[2019/10/18 Test class]
\LoadClass[onecolumn]{article}
\RequirePackage[utf8]{inputenc}
\usepackage[english]{babel}
\DeclareOption{twocolumn}{\OptionNotUsed}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
\RequirePackage[blocks]{authblk}
\setlength{\affilsep}{0em}
\renewcommand{\and}{\vskip10pt} % <- new line
\renewcommand{\maketitle}{%
\thispagestyle{empty}%
\vskip-36pt%
{\raggedright\sffamily\bfseries\MakeUppercase{\@title}\par}%
\vskip10pt
{\raggedleft\sffamily \@author\par}
\vskip18pt%
}
编译您的示例然后会产生以下内容而没有任何错误。