强制 cleverref 使用其他编号系统

强制 cleverref 使用其他编号系统

我已经与这个问题斗争了一段时间,而我所有的部分解决方案都无法结合在一起。我必须在乳胶文档中管理相当多的列表,每个条目都有一个特定的 ID,如 [X1234],其中 X 是当前章节名称的首字母,1 是章节号,2 是节号,34 是一个两位数的计数器,它会重置每个章节。我有一个命令可以为我创建这些数字,通过参数添加标签并通过 增加计数器,因为我希望当我在标签上\refstepcounter使用 时,它们可以链接到参考文献。\cref

\documentclass[12pt,a4paper]{report}
\usepackage{etoolbox}
\usepackage{xpatch}
\usepackage{cleveref}
\usepackage{xstring}

\newcounter{allIDs}
\setcounter{allIDs}{0}

\newcounter{chapIDs}
\setcounter{chapIDs}{0}

\newcommand{\currentchapter}{NOT SET}

\newcommand{\twodigit}[1]{\ifnum#1<10 0#1\else#1\fi}

\newcommand{\chapnumber}{\StrLeft{\thesection}{1}\StrRight{\thesection}{1}}

\newcommand{\chapletter}
{%
    \StrLeft
    {%
        \currentchapter{}%
    }{1}%
}

\newcommand{\entrycode}
{%
    \chapletter%
    \chapnumber%
    \twodigit{\thechapIDs}%
}

\xpretocmd{\@chapter}
{%
    \setcounter{chapIDs}{0}%
    \renewcommand{\currentchapter}{#1}%
    %
}%
%

\newcommand{\makeID}[1]{%
    \refstepcounter{allIDs}%
    \stepcounter{chapIDs}%
    \label{#1}%
    $[$\entrycode$]$%
}%
%

\crefformat{allIDs}{#2Reference to{} #1#3}

\begin{document}

\chapter{First}
\section{Some}

\makeID{label:Hello}

\cref{label:Hello}

\end{document}

结果

不幸的是,\cref决定放入计数器的值而不是上面描述的 ID。我怎样才能告诉 \cref 使用这些值呢?此外,添加包时,hyperref我用于获取 chaptername 的代码似乎中断了,它显示 #1,就好像参数将被读取为字符串一样。我怎样才能避免这种情况?

相关内容