我在网上搜索,但没有找到解决我的问题的任何方法,所以我在这里询问。
简短问题
有没有办法在 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,它提供了存储值和引用它们的扩展可能性。