我编写的文档严重依赖“枚举”环境。我想将该环境内的任何特定项目转换为可以在其他地方使用的变量。这样做的目的是确保与我稍后必须重复的长标题保持一致。
理想情况下,字符串存储方法不会检查 @ 或 _ 等特殊字符。
如果我可以使用数字作为字符串名称就更好了。
\begin{enumerate}
(piles of content)
\item\label{itm:01} \def\AA{Heading text.} \rAA\
\end{enumerate}
(piles of content)
\rAA
这会引发“未定义”错误。可以在环境之外定义命令并在环境内使用它,但是使用扩展列表和多个标题,反复去其他地方查找我所在的部分会减慢我的工作流程。
我是否忽略了一种简单的方法(甚至不那么简单的方法)?
答案1
环境形成一个组,因此\def
环境结束后,其中的 不会继续存在。您需要的是\gdef
,但您的\AA
是一个不应该做的事情的完美示例,就像\AA
字体相关的命令一样(它会产生 Å)。
您可以定义自己的检查,用来\@ifdefinable
检查命令的可用性并\gdef
全局定义该命令,从而超越组结构。
\makeatletter
\newcommand{\definestring}[2]{\@ifdefinable{#1}{\gdef#1{#2}}}
\makeatother
完整示例:
\documentclass{article}
\makeatletter
\newcommand{\definestring}[2]{\@ifdefinable{#1}{\gdef#1{#2}}}
\makeatother
\begin{document}
\begin{enumerate}
\item\label{itm:01} \definestring\rAA{Heading text.} \rAA
\end{enumerate}
Now we use \rAA
\end{document}