![页面双计数器问题:theHpage undefined](https://linux22.com/image/392905/%E9%A1%B5%E9%9D%A2%E5%8F%8C%E8%AE%A1%E6%95%B0%E5%99%A8%E9%97%AE%E9%A2%98%EF%BC%9AtheHpage%20undefined.png)
我在论文序言中放置的包 (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