我希望能够控制\gls
词汇表中哪些条目与页码一起显示。我读过手册,发现格式glsignore
部分实现了这一点,但似乎只会使数字难以辨认,而不是完全删除它。1, ,
例如,请注意条目的pizza
,我只希望1
那里有(因为那是正文中唯一的引用)。
有没有办法解决这个问题而不诉诸bib2gls
? 将我的非常大、交叉引用和充满宏的数据转换为bib
-格式是一项重大的冒险,我想避免这种情况。
我对awk
/ sed
/grep
等非常熟练,因此重新格式化主体中的所有调用\gls{*entry*}
不是问题(我想我.bib
也可以将我的词汇表转换为,但我真的不想这样做)。
在此示例中,我使用\mygls
-macro 应用于glsignore
词汇表本身内的条目。我也想将其应用于词汇表之外的一些条目,但词汇表内部的条目才是最重要的。
我完全清楚我需要makeglossaries
至少运行两次,因为并非所有标准都在正文中直接引用。
梅威瑟:
\documentclass{article}
\usepackage[xindy,acronym]{glossaries-extra}
\makeglossaries
\newcommand{\mygls}[1]{\gls[format=glsignore]{#1}}
\newglossaryentry{tech}
{%
name={technology},
description={Not to be confused with \mygls{pizza}.}
}
\newglossaryentry{pizza}
{%
name={pizza},
description={Food usually consumed with \mygls{beer}.}
}
\newglossaryentry{beer}
{%
name={beer},
description={Drink normally consumed with \mygls{pizza}.}
}
\newglossaryentry{sim}
{%
name={simulated},
description={A simulated newpage \newpage which also references \mygls{pizza}.}
}
\begin{document}
A glossary example. International \gls{tech} and \gls{pizza} use has
reached peak oil levels. As has \gls{sim} shenanigans.
\newpage
\printglossaries
\end{document}
进一步描述我的情况,我的一个词汇表(在我的 very-large-thesis*tm 中)包含大约一百个标准和许多交叉引用,我想摆脱这些交叉引用的页码,因为它们完全混淆了词汇表(即页码比条目本身的描述占用更多的空间)但仍然保留在文中引用标准时的页码,并保留供读者阅读 pdf 而不是印刷版本的链接。
有什么想法吗?
答案1
我想到“最简单”/“最干净”的解决方案是引入一个条件并重新定义\delimN
、\glsXpageXglsignore
和\glsXpageXglsnumberformat
使用\let
,\renewcommand
以便第一个重新定义仅调用\toggletrue
,后两个始终在执行其原始定义后调用,最后一个另外调用第一个使用\togglefalse
的原始定义。\delimN
\iftoggle
编辑:据我所知,你只能通过查看来找到需要重新定义的三个命令的定义词汇表[-extra]源。由于我们只是稍微修改了原始行为——幸运的是,在这种情况下“自由修改”它们不会产生副作用——因此只需“包装”或“扩展”原始定义就足够了甚至不看一眼(唯一的技巧是将重新定义放在它们应该在的位置,也就是词汇表序言的末尾。请注意,我们可以\renewcommand
在这里使用带星号的版本,但这个细节可以放心地忽略。)
如果你在包含以下内容的正下方添加以下几行额外词汇表包中,不应该出现可见的不需要的分隔符(使用 TeXlive 2019 测试):
\usepackage{etoolbox}
\apptoglossarypreamble{%
\newtoggle{PrintDelimiter}
\let\OLDdelimN\delimN \renewcommand*{\delimN}{\toggletrue{PrintDelimiter}}
\let\OLDglsXpageXglsignore\glsXpageXglsignore \renewcommand*{\glsXpageXglsignore}[2]{\OLDglsXpageXglsignore{#1}{#2}\togglefalse{PrintDelimiter}}
\let\OLDglsXpageXglsnumberformat\glsXpageXglsnumberformat \renewcommand*{\glsXpageXglsnumberformat}[2]{\iftoggle{PrintDelimiter}{\OLDdelimN}{}\OLDglsXpageXglsnumberformat{#1}{#2}\togglefalse{PrintDelimiter}}
}
结果应如下所示:
答案2
解决问题的另一种方法。请参阅 的定义\mygls
。\glshyperlink
不会在文本 pagenumber-thingy 中创建词汇表->位置 :-)
\documentclass{article}
\usepackage[xindy,acronym]{glossaries-extra}
\makeglossaries
\newcommand{\mygls}[1]{\glshyperlink[\glsentrytext{#1}]{#1}}
\newglossaryentry{tech}
{%
name={technology},
description={Not to be confused with \mygls{pizza}.}
}
\newglossaryentry{pizza}
{%
name={pizza},
description={Food usually consumed with \mygls{beer}.}
}
\newglossaryentry{beer}
{%
name={beer},
description={Drink normally consumed with \mygls{pizza}.}
}
\newglossaryentry{sim}
{%
name={simulated},
description={A simulated newpage \newpage which also references \mygls{pizza}.}
}
\begin{document}
A glossary example. International \gls{tech} and \gls{pizza} use has
reached peak oil levels. As has \gls{sim} shenanigans.
\newpage
\printglossaries
\end{document}