我正在尝试将几篇短文放在一起。每篇文章都有一个标题和多个作者以及相应的隶属关系。为了处理这个问题,我使用验证码和标题包装:
第一个文件.tex
\Title{First File}
\author[2]{B. Second\thanks{B@Second}}
\author[1]{A. Gonzales\thanks{A@Gonzales}}
\author[1,2]{C. Dosch}
\affil[1]{Test A}
\affil[2]{Test B}
\Content{Bla Bla Bla}
第二文件.tex
\Title{Second file}
\author[1]{C. Iggy}
\author[2]{H. Uno\thanks{H@Uno}}
\affil[1]{Test 1}
\affil[2]{Test 2}
\Content{Bla Bla Bla}
第三文件.tex
\Title{Third File}
\author[1]{A. First}
\author[1,2]{M. Middle\thanks{M@Middle}}
\author[2]{Z. Last}
\affil[1]{Test $\alpha$}
\affil[2]{Test $\beta$}
\Content{Bla Bla Bla}
主文本
\documentclass{article}
%----
\makeatletter
\newcommand{\Content}[1]{\def\@Content{#1}}
\newcommand{\Title}[1]{\def\@Title{#1}}
\makeatother
%----
\usepackage{titling}
\pretitle{\begin{center}\Large\bfseries}
\posttitle{\par\end{center}\vspace{\baselineskip}}
%\preauthor{}
%\postauthor{}
%----
\usepackage{authblk}
\renewcommand\Authfont{\bfseries}
\renewcommand\Affilfont{\rm \sl\small}
%----
\date{}
%===================================% B E G I N %===================================%
\begin{document}
\input{FirstFile.tex}
\makeatletter
\title{\@Title}
\maketitle
\@Content
\global\let\AB@authlist\@empty
%\renewcommand\AB@authlist{}
\renewcommand\AB@affillist{}
\makeatother
\setcounter{affil}{0}
\setcounter{authors}{0}
\emptythanks
\clearpage
%===============
\input{SecondFile.tex}
\makeatletter
\title{\@Title}
\maketitle
\@Content
\renewcommand\AB@authlist{}
\renewcommand\AB@affillist{}
\makeatother
\setcounter{affil}{0}
\setcounter{authors}{0}
\emptythanks
\clearpage
%===============
\input{ThirdFile.tex}
\makeatletter
\title{\@Title}
\maketitle
\@Content
\renewcommand\AB@authlist{}
\renewcommand\AB@affillist{}
\makeatother
\setcounter{affil}{0}
\setcounter{authors}{0}
\emptythanks
\clearpage
\end{document}
当我编译 main.tex 时出现以下错误(两次;另一次在第 61 行):
[1{C:/ProgramData/MiKTeX/2.9/pdftex/config/pdftex.map}] (SecondFile.tex)
! LaTeX Error: There's no line here to end.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.48 \maketitle
?
我注意到,如果我不重置 AB@authlist 和 AB@affillist,行尾问题就不会出现。如果我取消注释 \preauthor{} 和 \postauthor{},问题也会消失,但所有作者和所属机构都会向左对齐。将 \centering 或 \begin{center} \end{center} 放入 \pre 和 \postauthor{} 并不能解决对齐问题。
是否有人知道是否有其他方法可以重置 AB@authlist 和 AB@affillist 的内容,或者还有什么可能导致行尾问题?
我不需要使用标题包中是否可以使用 \maketitle 多次。是否可以修改 \maketitle 而不标题包装得当,可以多次使用吗?
答案1
我不确定它看起来是不是这个样子。这基本上是先加载,然后调整titling
的重新定义。我还定义了一些新命令以方便使用,以便输入、发出和清理 为下一个文件做好准备。\maketitle
authblk
\myinput{greatpaper}
greatpaper.tex
\maketitle
\@Content
请注意,我已将字体开关的过时 2.09 语法切换为当前的 2e 语法。过时的开关(例如\rm
,\sl
其他双字母开关)不应在 LaTeX 文档中使用并且已经被弃用了二十多年。这不仅仅是命令不同的问题:新的字体命令(例如\rmfamily
、\slshape
和\textsl{}
类似命令)的行为不同,特别是,它们被设计为在双字母开关无法执行的各种情况下执行您期望的操作。网站上有一个问题详细解释了这个问题。如果您对耸人听闻的细节感兴趣,只需搜索即可。
代码如下:
\begin{filecontents}{FirstFile.tex}
\title{First File}
\author[2]{B. Second\thanks{B@Second}}
\author[1]{A. Gonzales\thanks{A@Gonzales}}
\author[1,2]{C. Dosch}
\affil[1]{Test A}
\affil[2]{Test B}
\Content{Bla Bla Bla}
\end{filecontents}
\begin{filecontents}{SecondFile.tex}
\title{Second file}
\author[1]{C. Iggy}
\author[2]{H. Uno\thanks{H@Uno}}
\affil[1]{Test 1}
\affil[2]{Test 2}
\Content{Bla Bla Bla}
\end{filecontents}
\begin{filecontents}{ThirdFile.tex}
\title{Third File}
\author[1]{A. First}
\author[1,2]{M. Middle\thanks{M@Middle}}
\author[2]{Z. Last}
\affil[1]{Test $\alpha$}
\affil[2]{Test $\beta$}
\Content{Bla Bla Bla}
\end{filecontents}
\documentclass{article}
\usepackage{titling}
\usepackage{authblk}
\renewcommand\Authfont{\bfseries}
\renewcommand\Affilfont{\rmfamily\slshape\small}
\makeatletter
\newcommand{\Content}[1]{\def\@Content{#1}}
\pretitle{\begin{center}\Large\bfseries}
\posttitle{\par\end{center}\vspace{\baselineskip}}
\newcommand*\myinput[1]{% convenience command
\input{#1}%
\maketitle
\@Content
\clearpage
\renewcommand\AB@affillist{}%
\global\let\AB@authlist\@empty
\renewcommand\AB@authlist{}%
\setcounter{affil}{0}%
\setcounter{authors}{0}%
\emptythanks}
\def\maketitle{\AB@maketitle}% modified from authblk.sty
\makeatother
\date{}
\begin{document}
\myinput{FirstFile}
\myinput{SecondFile}
\myinput{ThirdFile}
\end{document}