如何引用当前枚举标签而不必手动标记每个标签

如何引用当前枚举标签而不必手动标记每个标签

我正在尝试构建与该exercise包类似的功能,但exercise并不能完全实现我想要的功能。

梅威瑟:

\documentclass[10pt]{article}

\newwrite\myfile
\immediate\openout\myfile=\jobname.keys

\newcommand{\answerkey}[1]{\write\myfile{#1}}

\begin{document}

\begin{enumerate}
\item $1 + 1 = $ \answerkey{ XXXX 2}
\begin{enumerate}
\item $1 + 2 = $ \answerkey{ XXXX 3}
\begin{enumerate}
\item $1 + 3 = $ \answerkey{ XXXX 4}
\end{enumerate}
\end{enumerate}
\end{enumerate}

\end{document}

我想要的是一些东西来替换 XXXX,以便写入文件的内容类似于:

1. 2
1.a. 3
1.a.i 4

当我不知道枚举器的深度是多少时,我需要一种自动化的方法来访问枚举器的当前标签,并且不想手动为每个枚举器输入一个唯一的标签/标记(如果有人有一种很好的方法来自动化标签/标记生成,那就行得通)。

欢迎提出建议。

答案1

注意,您需要\immediate\write并只写当前标签

\documentclass[10pt]{article}

\newwrite\myfile
\immediate\openout\myfile=\jobname.keys

\makeatletter
\newcommand{\answerkey}[1]{\immediate\write\myfile{\@currentlabel #1}}
\makeatother

\begin{document}

\begin{enumerate}
\item $1 + 1 = $ \answerkey{ XXXX 2}
\begin{enumerate}
\item $1 + 2 = $ \answerkey{ XXXX 3}
\begin{enumerate}
\item $1 + 3 = $ \answerkey{ XXXX 4}
\end{enumerate}
\end{enumerate}
\end{enumerate}

\end{document}

生产

1 XXXX 2
1a XXXX 3
1(a)i XXXX 4

\ref1(a)i与您对其中任何一项使用的格式相同\label,因此您可以用相同的方式自定义两者。

答案2

已编辑并实际给出答案。

正如我在评论中向克里斯托弗解释的那样,第一级枚举的计数器是enumi,第二级是enumii,第三级是enumiii罗马数字形式。如果尚未调用该级别,则计数器值为0。一旦调用,它会1随着每个新的而逐步增加\item。因此,\ifnum检查确定每个连续级别是否处于活动状态。如果它处于活动状态,它将附加到\theenum<romannumeral-level>.\tmplabel因为\theenum<romannumeral-level>包含实际的枚举标签,无论它是阿拉伯语、字母还是罗马字母。如果某个级别处于活动状态,它还会递归检查下一个更深的级别是否处于活动状态。

\documentclass[10pt]{article}

\newwrite\myfile
\immediate\openout\myfile=\jobname.keys

\newcommand{\answerkey}[1]{\answerlabel\immediate\write\myfile{\tmplabel #1}}
\newcounter{enumlevel}
\newcommand\answerlabel{\setcounter{enumlevel}{0}\xdef\tmplabel{}\answerlabelhelp%
  \xdef\tmplabel{\tmplabel\space}}
\newcommand\answerlabelhelp{%
  \stepcounter{enumlevel}%
  \ifnum\value{enum\romannumeral\value{enumlevel}}>0\relax
    \xdef\tmplabel{\tmplabel\csname theenum\romannumeral\value{enumlevel}\endcsname.}%
      \answerlabelhelp%
  \fi
}
\begin{document}
\begin{enumerate}
\item $1 + 1 = $ \answerkey{2}
\begin{enumerate}
\item $1 + 2 = $ \answerkey{3}
\begin{enumerate}
\item $1 + 3 = $ \answerkey{4}
\end{enumerate}
\end{enumerate}
\end{enumerate}
\end{document}

.keys文件内容如下

1. 2
1.a. 3
1.a.i. 4

按照要求。

相关内容