用字符串替换 id(整数)?

用字符串替换 id(整数)?

我有一个包含自动生成的部分的 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}

相关内容