我有一个包含自动生成的部分的 tex 文档。这些部分包含作为观测 ID 的字符串。我想让 latex 将所有出现的 ID 替换为包含恒星名称的字符串。
例如:
\caption{SED of \OID1342263516}
会成为:
\caption{SED of FR Tau}
我的第一个想法是有一个宏,如下所示:
\newcommand{\OID1342263516}{FR Tau}
但是,我了解到宏的名称中不能包含数字。有什么好方法可以实现我想要的功能吗?谢谢。
答案1
它使用了一些普通的 e-TeX 来制作,没有额外的括号。这里允许的最大值是1073741823000
,最小值是1000
(或者更少,如果你至少将它设置为 4 位数字,我希望你能接受。可以通过以下方式扩展X但前提是所有号码至少有X数字。
\documentclass{article}
\newcount\OIDcounta
\newcount\OIDcountb
\def\useOID{\csname OID\the\OIDcounta\the\OIDcountb\endcsname}
\protected\def\OID#1#2#3{\OIDcounta#1#2#3\afterassignment\useOID\OIDcountb}
\def\newOID#1#2{\expandafter\def\csname OID#1\endcsname{#2}}
\newOID{123456}{Tau 456 epsilon}
\begin{document}
\tableofcontents
\section{ABC \OID123456\ DEF}
Star number hundred twenty three is \OID123456\ for sure.
\typeout{\number\maxdimen}
\end{document}
如果您对大括号没有异议,那么这很容易,甚至可以用于非常大的数字(十位数):
\documentclass{article}
\makeatletter
\protected\def\OID#1{\@ifundefined{OID#1}{\GenericError{}{OID#1 not defined!}{}{}}{\csname OID#1\endcsname}}
\def\newOID#1#2{\expandafter\def\csname OID#1\endcsname{#2}}
\makeatother
\newOID{123456}{Tau 456 epsilon}
\begin{document}
\tableofcontents
\section{ABC \OID{123456} DEF}
Star number hundred twenty three is \OID{123456} for sure.
\end{document}