\maketitle 执行后执行命令

\maketitle 执行后执行命令

使用包我需要在 \maketitle 命令后执行命令。有什么办法吗?我正在寻找像 \AtBeginDocument 一样工作的命令。

我正在创建我的 LaTeX 包,如果有这个功能就好了。


我尝试过这个:

%copy content of \maketitle
\let\myMakeTitle\maketitle
%redefine \maketitle adding my commands
\renewcommand{\maketitle}{\myMakeTitle\sbox0{$ $}\scriptfont1=\scriptfont0}

它在文档内部有效,但如果我将此代码放在包内部,它会被忽略。

答案1

假设您有一个命令/宏\myMacro,想要在\maketitle执行后立即执行,您可以使用以下方法来自动执行:

% Save original \maketitle definition
\let\myMakeTitle\maketitle
% Redefine \maketitle to execute \myMacro after the original \maketitle is done
\def\makeTitle{\myMakeTitle \myMacro}

我不知道重新定义 是否真的是个好主意\maketitle。也许为您的包提供自定义标题创建宏会更好,这样用户可以选择使用您的创建标题版本(又名:在 之后执行您的宏\maketitle

答案2

使用最新的 LaTeX,你可以做到

\AddToHook{cmd/maketitle/after}{<whatever code you want>}

然而,我警告你不要这样做\scriptfont1=\scriptfont0

我的直觉是你的库吉诺1给了你一个很棒的收据,可以用直立字体做下标,而不必打字

$x_{\mathrm{eff}}$

并使用更简单的

$x_{eff}$

你还被告知,出于神秘的原因,魔法\scriptfont1=\scriptfont0必须在之后发出\maketitle,但魔法必须以深奥的 为前缀\sbox0{$ $}

不幸的是,这种方法在很多方面都失败了。

\documentclass{article}

\begin{document}

\author{Lorenzo\thanks{Supported by Topo Gigio}}
\title{Good looking title}
\maketitle

% Let's assume you want to do this
\sbox0{$ $}
\scriptfont1=\scriptfont0

This formula looks funny: $x_{\alpha}+x_{eff}$ (scriptfont1 is \fontname\scriptfont1)

\section{More about $x$}

The formula is funny in a different way: $x_{\alpha}+x_{eff}$ (scriptfont1 is \fontname\scriptfont1)

\end{document}

在此处输入图片描述

你能看出问题吗?在第一个公式中,你得到了“eff”的直立字体,但命令\alpha输出的字符非常错误。

但在第二个公式中\alpha是正确的,并且“eff”是数学斜体。

为什么?因为 LaTeX 会针对不同大小的每个公式重新计算\textfont\scriptfont\scriptscriptfont。由于公式是在节标题中排版的,因此会执行重新计算,并对正常大小的公式执行另一次计算,因此你表弟的狡猾伎俩彻底失败了。

更好的方式是使用x_|eff|,并对 进行适当的定义|

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\newcommand{\math@active@bar}{}
\def\math@active@bar#1|{{\mathrm{#1}}}
\begingroup\lccode`~=`| \lowercase{\endgroup\let~}\math@active@bar
\AtBeginDocument{\mathcode`|="8000 }
\makeaother

\begin{document}

$x_{\alpha}+x_|eff|$

\end{document}

如果需要绝对值,请使用\lvert...\rvert。或者,您可以使用!代替|(如果您不需要阶乘)。

在此处输入图片描述


脚注

1在意大利,人们经常会说“mio cuggino mi ha detto”(这是我表弟告诉我的,但“cugino”的拼写错误)。因此原帖可以责怪别人。

相关内容