定义动态变量名并在其定义之前使用它

定义动态变量名并在其定义之前使用它

我在网上搜索,但没有找到解决我的问题的任何方法,所以我在这里询问。

简短问题

有没有办法在 LaTex 中定义动态变量名并在其定义之前使用它?

语境

我有一个很大的 tex 文件;其中一部分包含来自外部文件的部分。我不想在包含之前更改外部文件的内容,因为它们是从外部源生成的。我仍然可以更改外部文件的模板,因此在文件中我根据计数器的值添加动态创建的标签和变量。

目的是动态创建文档这一部分的摘要在它之前。我可以在定义之前或之后轻松引用动态标签。但我只能在定义之后访问变量的值。

main.tex

\begin{document}

\begin{itemize}
    \item \nameref{foo:1}: \csname fooscore1\endcsname
    \item \nameref{foo:2}: \csname fooscore2\endcsname
\end{itemize}

\newcounter{foo}

\input{section1}

\input{section2}

\begin{itemize}
    \item \nameref{foo:1}: \csname fooscore1\endcsname
    \item \nameref{foo:2}: \csname fooscore2\endcsname
\end{itemize}

\end{document}

section1.tex

\section{section1}

\stepcounter{foo}
\label{foo:\thefoo}
\expandafter\def\csname fooscore\thefoo \endcsname{10}

Counter: \thefoo\\
Score: \csname fooscore\thefoo\endcsname

section2.tex

\section{section2}

\stepcounter{foo}
\label{foo:\thefoo}
\expandafter\def\csname fooscore\thefoo \endcsname{20}

Counter: \thefoo\\
Score: \csname fooscore\thefoo\endcsname

在此处输入图片描述

问题

fooscore1有没有办法访问包含之前的and的值fooscore2(如动态标签)?请注意,fooscores 的值不一定是整数。

我试图通过创建一个虚拟部分来作弊,其中变量的值作为标题,变量名称作为标签,但我找不到将其从文档和目录中隐藏的方法。

非常感谢您的回答!

答案1

只需使用另一个标签:

\documentclass{article}

\usepackage{hyperref}
\begin{document}

\begin{itemize}
    \item \nameref{foo:1}: \ref*{score:1}
    \item \nameref{foo:2}: \ref*{score:2}
\end{itemize}

\newcounter{foo}

\section{section1}
\stepcounter{foo}
\label{foo:\thefoo}
\expandafter\def\csname fooscore\thefoo \endcsname{10}
\makeatletter
\def\@currentlabel{\csname fooscore\thefoo \endcsname}
\makeatletter
\label{score:\thefoo}

Counter: \thefoo\\
Score: \csname fooscore\thefoo\endcsname

\section{section2}
\stepcounter{foo}
\label{foo:\thefoo}
\expandafter\def\csname fooscore\thefoo \endcsname{20}
\makeatletter
\def\@currentlabel{\csname fooscore\thefoo \endcsname}
\makeatletter
\label{score:\thefoo}

Counter: \thefoo\\
Score: \csname fooscore\thefoo\endcsname

\end{document}

您还可以查看 zref,它提供了存储值和引用它们的扩展可能性。

在此处输入图片描述

相关内容