我怎样才能像上面那样打印该部分而不是 glossar/index 中的页码\nameref
。最好有类似这样的内容:
\documentclass{report}
\usepackage[colorlinks]{hyperref}
\usepackage{glossaries}
% Syntax: \newperson{label}{forename}{surname}
\newcommand*{\newperson}[3]{%
\newglossaryentry{#1}%
{%
name={#2\space#3},
sort={#3},% sort on surname
description={#3},
text={#2\ #3},% title \space surname
user1={#2},% forname
user2={#3},% surname
}%
}
\let\Pforename\glsuseri
\let\Psurname\glsuserii
\newglossarystyle{person}%
{%
\glossarystyle{list}%
\glsnogroupskiptrue
\renewcommand*{\glossaryentryfield}[5]{%
\item[]\glsentryitem{##1}\textbf{\glstarget{##1}{##2}}
\\~##5}%
}%
\makeglossaries
\newperson{miller}{Marmaduke}{Miller}
\newperson{foobar}{Aardvark}{Foobar}
\newperson{foo}{Bar}{Foo}
\begin{document}
\section{DNS}
\subsection{stuff}
\gls{miller}
\section{DHCP}
\subsection{stuff}
\gls{foobar}
\section{FTP}
\subsection{stuff}
\gls{foo}
\clearpage
\section{SMTP}
\subsection{stuff}
\gls{foo}
\printglossary[title={Stuff},style=person]
\end{document}
答案1
位置必须以数字形式写入外部文件(使用标准计数器命令格式化,例如\arabic
、\roman
或\alph
),否则makeindex
将拒绝该条目。即使使用xindy
,您也必须定义位置样式并列出所有章节编号及其标题之间的映射。以下示例将章节编号正常写入外部文件,但定义了一组从章节编号到章节标题的映射,并重新定义\glsnumberformat
为根据章节编号获取相应的标题。但是,即使这并不简单,因为 的参数可能包含由或\glsnumberformat
分隔的列表(\delimN
\delimR
编辑:我已将示例更改为包含多个词汇表):
\documentclass{report}
\usepackage{lipsum}
\usepackage{etoolbox}
\usepackage[colorlinks]{hyperref}
\usepackage[counter=section]{glossaries}
\newglossary{glossary2}{gls2}{glo2}{Glossary 2}[page]
\newglossary{glossary3}{gls3}{glo3}{Glossary 3}[section]
\makeglossaries
\makeatletter
\newcommand\@fourthoffive[5]{#4}
% adapt toc section command to get number -> title map
\let\org@l@section\l@section
\renewcommand{\l@section}[2]{%
\org@l@section{#1}{#2}%
\expandafter\@fetchsecnum\@fourthoffive#1\end@fetchsecnum
}
\def\@fetchsecnum#1#2#3\end@fetchsecnum{%
\ifdefequal\numberline{#1}%
{%
% numbered section, save title
\csgdef{sec@#2}{#3}%
}%
{%
% unnumbered section, do nothing
}%
}
% also need to take into account any glossary entries at the start
% of the chapter before the first section
\let\org@l@chapter\l@chapter
\renewcommand{\l@chapter}[2]{%
\org@l@chapter{#1}{#2}%
\expandafter\@fetchchapnum\@fourthoffive#1\end@fetchchapnum
}
\def\@fetchchapnum#1#2#3\end@fetchchapnum{%
\ifdefequal\numberline{#1}%
{%
% numbered chapter, save title
\csgdef{sec@#2.0}{#3}%
}%
{%
% unnumbered chapter, do nothing
}%
}
\makeatother
\newcommand*{\getsectitle}[1]{%
\ifcsdef{sec@#1}
{%
\hyperlink{section.#1}{\csuse{sec@#1}}%
}%
{%
\hyperlink{section.#1}{#1}% undefined so just display section number
}%
}
\DeclareListParser*{\glsnumlistN}{\delimN}
\newcommand{\glsnumlistNhandler}[1]{%
\locNsep
\def\locRsep{}%
\glsnumlistR{\glsnumlistRhandler}{#1}%
\let\locNsep\delimN
}
\DeclareListParser*{\glsnumlistR}{\delimR}
\newcommand{\glsnumlistRhandler}[1]{%
\locRsep\getsectitle{#1}\let\locRsep\delimR
}
\newcommand*{\glstitlelocformat}[1]{%
\def\locNsep{}%
\glsnumlistN{\glsnumlistNhandler}{#1}%
}
\newglossaryentry{sample}{name=sample,description={an example}}
\newglossaryentry{sample2}{type=glossary2,
name=sample2,description={a second example}}
\newglossaryentry{sample3}{type=glossary3,
name=sample3,description={a third example}}
\begin{document}
\tableofcontents
\chapter{Sample Chapter}
\gls{sample}. \gls{sample2}.
\section{First section}
\gls{sample}.
\section{Second section}
\gls{sample}. \gls{sample2}.
\section{Third section}
\section{Fourth section}
\gls{sample}. \gls{sample3}.
\section{Fifth section}
\gls{sample}.
\lipsum
\gls{sample2}.
\let\glsnumberformat\glstitlelocformat
\printglossary
\renewcommand{\glsnumberformat}[1]{\glshypernumber{#1}}
\printglossary[type=glossary2]
\let\glsnumberformat\glstitlelocformat
\printglossary[type=glossary3]
\end{document}
结果:
警告:
您需要考虑读者可能想要打印文档并阅读硬拷贝的可能性,在这种情况下,这种设计使得查找参考资料变得困难,因为您迫使读者搜索目录以找到适当的页码。至少有了章节编号,读者可以直观地猜测章节在文档中的大致位置。
由于我认为这种文档设计风格很差,所以我不愿意将其添加为一项功能,但如果您真的想这样做,上述操作应该可以起作用。
答案2
以下方法无效,但由于似乎没有解决此问题的方法,我将其取消删除。可能有助于找到一些解决方案...
得到以下解决方案,似乎最有效:将以下代码添加到 glossaries.sty
\let\Sectionmark\sectionmark
\def\sectionmark#1{\def\thesectionname{#1}\Sectionmark{#1}}
\ifthenelse{\equal{\glscounter}{sectionname}}%
{%
\ifcsundef{chapter}{}%
{%
\let\@gls@old@chapter\@chapter
\def\@chapter[#1]#2{\@gls@old@chapter[{#1}]{#2}%
\ifcsundef{hyperdef}{}{\hyperdef{section}{\thesectionname}{}}}%
}%
}%
{}
并使用以下命令激活它:
\usepackage[counter=sectionname]{glossaries}
不知道为什么,但似乎不适用于第一页的引用 :( 可能有人可以在不编辑词汇表的情况下发布解决方案,或者 Nicola 可以添加这样的功能词汇表