如何在加载由我的文档类加载的“hyperref”包之前定义命令?

如何在加载由我的文档类加载的“hyperref”包之前定义命令?

关于这个问题缺失数字,在更新枚举 \item 并使用 hyperref 时视为零我了解到我必须从问题中定义我的自定义命令如何识别自定义环境中的枚举短标签?hyperref在要加载的包之前。

然而,我的论文应该使用这个类abntex2,并且这个abntex2类有包含这个包的绝妙而非凡的想法hyperref他们的源代码,没有任何实际理由。

现在,我不知道如何hyperref在定义代码后包含包。到目前为止,我尝试\RequirePackage{enumitem}在加载类之前使用和定义我的命令abntex2。然而,LaTeX 抛出了错误

enumitem.sty:1587:LaTeX 错误:环境描述未定义。

\PassOptionsToPackage{shortlabels}{enumitem}
\RequirePackage{enumitem}
\let\itemenumerateoptional\item
\newcounter{enumerateoptionalcount}

\def\renewenumerateoptionalitem{%
  \let\itemenumerateoptional\item
  \renewcommand{\item}[1][]{%
      \refstepcounter{enumerateoptionali}% increment the counter
      \itemenumerateoptional[\bfseries##1~\theenumerateoptionali]%
  }%
}
\newlist{enumerateoptional}{enumerate}{1}
\setlist[enumerateoptional]{
    before=\renewenumerateoptionalitem,
    label=\arabic*,
    nosep,
    labelindent=20mm,
    leftmargin=*,
    after=\let\item\itemenumerateoptional,
}
\documentclass{abntex2}

\begin{document}
\begin{enumerateoptional}[1.]
   \item[Some first] item one
   \item[Some second] item two
\end{enumerateoptional}
\end{document}
Babel <3.12> and hyphenation patterns for 76 language(s) loaded.
(D:\latex\enumitem.sty

D:\latex\enumitem.sty:1587: LaTeX Error: Environment description undefined.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help
D:\latex\enumitem.sty:1587:  ==> Fatal error occurred, no output PDF file produced!

相关问题

  1. 在自己的文档类中使用稍后定义的命令
  2. 在我的类使用 renewcommand 重新定义序言中的命令之后,如何覆盖它?
  3. Hyperref 由类加载,我需要加载应该在之前加载的包
  4. 使用 hyperref 包时未定义控制序列 \chapter 错误
  5. 哪些包应该在 hyperref 之后加载而不是之前加载?
  6. 在自己的文档类中使用稍后定义的命令

答案1

重新定义 \H@item 而不是 \item。即使 hyperref 加载过早,这也应该有效:

\documentclass[12pt]{article}
\errorcontextlines 10000
\usepackage{hyperref}

\usepackage[shortlabels]{enumitem}

\makeatletter
\def\renewenumerateoptionalitem{%
  \let\itemenumerateoptional\H@item
  \renewcommand{\H@item}[1][]{%
      \refstepcounter{enumerateoptionali}% increment the counter
      \itemenumerateoptional[\bfseries##1~\theenumerateoptionali]%
  }%
}
\makeatother
\newlist{enumerateoptional}{enumerate}{1}
\setlist[enumerateoptional]{
    before=\renewenumerateoptionalitem,
    label=\arabic*,
    nosep,
    labelindent=20mm,
    leftmargin=*,
}

\begin{document}
\begin{enumerateoptional}[1.]
   \item[Some first] item one \label{test}
   \item[Some second] item two
   \item abc
\end{enumerateoptional}
\ref{test}
\end{document}

相关内容