使用包我需要在 \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”的拼写错误)。因此原帖可以责怪别人。