受到启发在自定义计数器部分中有参考,我开发了以下新环境。一切都很好,除了我调用\prettyref{dog:1}
输出时只显示1代替狗1经过一些调试后,看起来\newrefformat
环境内部的定义没有被执行。
\newenvironment{animals}[1][dog]%
{
\newrefformat{#1}{\hyperref[{##1}]{\uppercase{#1} \ref*{##1}}}
\newcount\IndexNum
\IndexNum = 1
\newcounter{count#1}%
\setcounter{count#1}{0}%
\let\olditem\item%
\begin{enumerate}[label={\texttt{\uppercase{#1}\arabic*}}, ref={\arabic*}]%
\setcounter{enumi}{\value{count#1}}%
\renewcommand{\item}[1][]{%
\refstepcounter{count#1}\olditem%
\label{#1:\the\IndexNum} \global\advance\IndexNum by 1
}%
}%
{\end{enumerate}}
我还附加了 MWE 供您参考。
\documentclass{article}
\usepackage{prettyref}
\usepackage{hyperref}
\usepackage{enumitem}
\newenvironment{animals}[1][dog]%
{
\newrefformat{#1}{\hyperref[{##1}]{\uppercase{#1} \ref*{##1}}}
\newcount\IndexNum
\IndexNum = 1
\newcounter{count#1}%
\setcounter{count#1}{0}%
\let\olditem\item%
\begin{enumerate}[label={\texttt{\uppercase{#1}\arabic*}}, ref={\arabic*}]%
\setcounter{enumi}{\value{count#1}}%
\renewcommand{\item}[1][]{%
\refstepcounter{count#1}\olditem%
\label{#1:\the\IndexNum} \global\advance\IndexNum by 1
}%
}%
{\end{enumerate}}
\begin{document}
\begin{animals}
\item Pitbull
\item Boxer
\end{animals}
\prettyref{dog:1} is Pitbull.
\end{document}
当前输出为
而预期的输出是
答案1
命令\newrefformat
的效果范围受到环境的限制。
查看prettyref
包中的源代码,发现可以通过在其前面加上前缀来\global
克服范围限制。
此外,尽管它有这个名字,但如果使用相同的参数重复使用,它不会\newcommand
引发错误。因此,可以使用相同的可选参数拥有多个这样的环境。
\documentclass{article}
\usepackage{prettyref}
\usepackage{hyperref}
\usepackage{enumitem}
\newenvironment{animals}[1][dog]{%
\global\newrefformat{#1}{\hyperref[{##1}]{\uppercase{#1}\ref*{##1}}}%
%
\newcount\IndexNum
\IndexNum = 1
\newcounter{count#1}%
\setcounter{count#1}{0}%
%
\let\olditem\item
\begin{enumerate}[label={\texttt{\uppercase{#1}\arabic*}}, ref={\arabic*}]
\setcounter{enumi}{\value{count#1}}%
\renewcommand{\item}[1][]{%
\refstepcounter{count#1}\olditem%
\label{#1:\the\IndexNum} \global\advance\IndexNum by 1
}%
}%
{\end{enumerate}}
\begin{document}
\begin{animals}
\item Pitbull
\item Boxer
\end{animals}
\prettyref{dog:1} is Pitbull.
\end{document}