我正在一个大数字列表中编写文本。我可以通过\label
和引用另一个数字ref
,这样就可以得到数字(这很完美)。但是是否可以将其更改为 infra/supra(取决于数字在文档中是出现在后面还是前面)+ 一些静态文本 + 引用的数字\item
?
所以我想用 LaTeX 打印的内容是:
\item [text]
\item [text]
\item [text]
\item [text] \label{1}
\item [text]
\item [text]
\item [text] \ref{1} ⇒ supra *static text* 4
\item [text] \ref{2} ⇒ infra *static text* 11
\item [text]
\item [text]
\item [text] \label{2}
\item [text]
答案1
您etoolbox
可以保留迄今为止在文档中定义的标签列表,并根据标签是否在列表中显示不同的字符串。
梅威瑟:
\documentclass{article}
\usepackage{etoolbox}
\newcommand{\storelabel}[1]{%
\label{#1}%
\listcsgadd{Stored}{#1}%
}
\newcommand{\storeref}[1]{%
\ifinlistcs{#1}{Stored}{supra}{infra} static text \ref{#1}%
}
\begin{document}
\begin{enumerate}
\item text
\item text \storelabel{first}
\item text
\item text \storeref{first}
\item text
\item text \storeref{second}
\item text
\item text \storelabel{second}
\end{enumerate}
\end{document}
结果:
请注意,定义了两个新命令来代替\label
和\ref
。 如果需要,您还可以修补现有命令以包含列表处理(请参阅手册etoolbox
)。
答案2
使用的方法refcount
:
% MWE taken from http://tex.stackexchange.com/a/360869/5764
\documentclass{article}
\usepackage{refcount}
\newcommand{\storelabel}{\label}
\newcommand{\storeref}[1]{%
\mbox{}% Not needed if you always have text in an \item
\ifnum\getrefnumber{#1}<\value{enumi}\relax supra \else infra \fi
static text \ref{#1}%
}
\begin{document}
\begin{enumerate}
\item text
\item text \storelabel{first}
\item text
\item text \storeref{first}
\item text
\item text \storeref{second}
\item text
\item text \storelabel{second}
\end{enumerate}
\end{document}
它可能无法在嵌套列表中按预期工作。但如果需要,可以更新它以适应这种情况。