我已经与这个问题斗争了一段时间,而我所有的部分解决方案都无法结合在一起。我必须在乳胶文档中管理相当多的列表,每个条目都有一个特定的 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,就好像参数将被读取为字符串一样。我怎样才能避免这种情况?