页面双计数器问题:theHpage undefined

页面双计数器问题:theHpage undefined

我在论文序言中放置的包 (glossaries-extra) 链接有问题。在此序言中,我想使用罗马数字 (i、ii、iii、...) 作为页面。这由我的类文件作为新环境使用以下代码完成:

\newenvironment{romanpages}
    {
    \cleardoublepage
    \setcounter{page}{1}
    \renewcommand{\thepage}{\roman{page}}
    }
    {
    \cleardoublepage
    \renewcommand{\thepage}{\arabic{page}}
    \setcounter{page}{1}
    }

所以,如果我理解正确的话,它将计数器重置为 1,并且当被要求指向 roman 环境中的页面时,hypperref 包就会发疯(就像 glossaries-extra 包似乎对其条目列表所做的那样)。

此时,谷歌搜索并阅读第二个答案问题,我尝试添加

\newcommand{\originaltheHpage}{\theHpage}
\renewcommand*{\theHpage}{pre.\arabic{page}}

在对 romanpages 环境的开始调用中

\renewcommand*{\theHpage}{\originaltheHpage}

在同一环境的结束调用中(因此,在我看来,由于页面本身编号之前的“pre.”,内部罗马页面计数器应该有所不同)。

不幸的是,这没有起作用并且 Latex 抱怨命令 \theHpage 未定义。

我该如何解决我的问题?

谢谢,Jacopo

编辑:这是一个最小(不)工作代码:

\documentclass{book}
\newenvironment{romanpages}
    {
    \cleardoublepage
    \setcounter{page}{1}
    \renewcommand{\thepage}{\roman{page}}
    }
    {
    \cleardoublepage
    \renewcommand{\thepage}{\arabic{page}}
    \setcounter{page}{1}
}
\usepackage[colorlinks=true]{hyperref} %for pdf links/metadata
%\usepackage[acronym]{glossaries}       %needed for acronyms/glossary
\usepackage[record=nameref,abbreviations,savenumberlist=true
%,indexcounter
]{glossaries-extra} %as before, option 4 or 5

% glossaries entries
\newacronym[see={DEF}]{ABC}{ABC}{First 3 alphabet letters}
\newacronym[see={ABC}]{DEF}{DEF}{Second alphabet triplet}

% glossaries setup
\renewcommand{\glsglossarymark}[1]{}%prevent title format overloading

\renewcommand{\glossarysection}[2][]{}% to prevent a new section/chapter

\renewcommand*{\glsxtrpostdescgeneral}{%
    \ifglshasfield{see}
        {\glscurrententrylabel}
        {, \glsxtrusesee{\glscurrententrylabel}}%
        {}%28
    \ifglshasfield{seealso}
        {\glscurrententrylabel}
        { (\glsxtruseseealso{\glscurrententrylabel})}%
        {}%
    }

% glossaries style definitions
\newglossarystyle{table-short-long-desc}{%
    % put the glossary in the itemize environment:
    \renewenvironment{theglossary}%
    {\begin{longtable}{lp{0.7\linewidth}l}}{\end{longtable}}%
    % have nothing after \begin{theglossary}:
    \renewcommand*{\glossaryheader}{\Large{Abbr.} & \Large{Description} & \Large{Pages} \tabularnewline}%
    % have nothing between glossary groups:
    \renewcommand*{\glsgroupheading}[1]{}%
    \renewcommand*{\glsgroupskip}{}%
    % set how each entry should appear:
    \renewcommand*{\glossentry}[2]{%
        \tabularnewline
        %first line:
            \textbf{\glsentryshort{##1}}%short form
            & \textbf{\glossentryname{##1}} %long form
            & %nothing
         \tabularnewline % next line
         %second line
            % nothing
            & \glossentrydesc{##1} % the description
            \glsxtrpostdescgeneral
            & ##2
            %\glossaryentrynumbers
            %\glsdisplaynumberlist{##1} %entries list
        \tabularnewline
        }%
    % set how sub-entries appear:
    \renewcommand*{\subglossentry}[3]{%
        \glossentry{##2}{##3}
    }%
}

\begin{document}
\begin{romanpages}
First page of preface. No abbreviations here.
\cleardoublepage
\printunsrtglossary[type=abbreviations, style=table-short-long-desc]
\cleardoublepage
\tableofcontents            % generate and include a table of contents
\addcontentsline{toc}{chapter}{Index}
\end{romanpages}
\chapter{Chapter 1}
\section{Test section}
The first letters of alphabet are \gls{ABC}
\end{document}

在准备这个例子时,我注意到我的问题仅在使用我的自定义缩写样式(table-short-long-desc)时出现。

答案1

好的,实际上,关注达莱夫根据建议,我尝试获取一小段可以重现错误的代码。
对每个代码块都这样做,让我能够隔离错误,最后我也可以自己解决它。
问题是我没有为词汇表的每个条目设置目标点。这可以通过在 的新定义中
调用 来完成。 在我的例子中,我在上一个示例的第 61 行调用了它:\glstarget\glossentry

& \textbf{\glossentryname{##1}} %long form

成为

& \glstarget{##1}{\textbf{\glossentryname{##1}}} %long form

相关内容