我正在寻找一个宏,它可以在日期为空的情况下改变date
(使用包时)的行为。titling
此 MWEA应该正常给出一个文档:
\documentclass{article}
\usepackage{titling}
\title{A date test title}
\date{13 Dec 13}
%
% Here go the tweak macros enhancing the behaviour of \date
% ...
% ...
%
\begin{document}
\maketitle
text text text text text text text text text text text text text text text text text text
\end{document}
但对于以下 MWE乙我希望标题和文本之间的空间较小,因为没有打印日期。
\documentclass{article}
\usepackage{titling}
\title{A date test title}
\date{} % DATE IS NOW EMPTY!
%
% Here go the tweak macros enhancing the behaviour of \date
% ...
% ...
%
\begin{document}
\maketitle
text text text text text text text text text text text text text text text text text text
\end{document}
我怎样才能实现这一目标通用的调整宏(可能改变包的内部命令titling
),以便相同的调整在两种情况下都有效,适用于空日期和设置日期。
调整宏必须以某种方式测试是否\@date
为空。我试过\ifdefempty
(从etoolbox
包中)但 \@date 似乎永远不会为空,即使没有打印日期(即\date{}
)。
答案1
标题包 ( titling.sty
) 更新命令\maketitle
。日期的打印发生在\maketitle
或 中,如果没有创建自己的页面(例如文章类),则由\@maketitle
调用\maketitle
。因此,请确保您知道需要修补哪个宏。然后,您只需将其内容与\pathcmd
frometoolbox
包交换即可。(当然,您可以使用 为这两种情况编写解决方案\if@titlepage
,但我认为对于正常目的来说,这不是必要的。)
梅威瑟:
\documentclass{article}
\usepackage{titling,etoolbox}
\title{A date test title}
\date{13 Dec 13}
% \date{}
\makeatletter
\ifx\@date\empty
\patchcmd{\@maketitle}{{\@bspredate \@date \@bspostdate} \maketitlehookd \par \vskip 1.5em}{\vskip 0.5em}{}{}
% \patchcmd{\maketitle}{{\@bspredate \@date \@bspostdate} \maketitlehookd \par}{\vskip 0.5em}{}{}%for document classes with extra title pages
\fi
\makeatother
\begin{document}
\maketitle
text text text text text text text text text text text text text text text text text text
\end{document}
答案2
我使用这样的东西:
\documentclass{article}
\usepackage{titling}
\title{A date test title}
\author{Author}
\makeatletter
\predate{%
\ifx\@empty\thedate\relax
\else\begin{center}\large
\fi}
\postdate{%
\ifx\@empty\thedate\relax
\else\par\end{center}\fi}
\makeatother
\begin{document}
\maketitle
text text text text text text text text text text text text text text text text text text
\date{} % DATE IS NOW EMPTY!
\maketitle
text text text text text text text text text text text text text text text text text text
\end{document}