词汇表的定制

词汇表的定制

这是这个问题

正如上述问题,我有多个文件,实际上是 3 个。它们都必须共享相同的词汇表。根据上一个问题的答案和评论,可以找到 2 个文件的令人满意的解决方案。但正如 @NicolaTalbot 所说,3 个文件更难。

假设我有 3 个文件:fileA.texfileB.texfileC.tex,以及一个词汇表条目

@entry{sample,
 name = {an example}
}

该词汇表条目出现在 3 个文件中,我不知道是否可以对词汇表进行自定义,例如:

如果该条目出现在 fileA.pdf 的第 1 页、fileB.pdf 的第 1 页和 fileC.pdf 的第 5 页,则输出如下所示:

文件A.pdf

样品 1、B-1、C-5

文件B.pdf

样品 A-1, 1, C-5

文件C.pdf

样品 A-1、B-1、5

正如我所说,我不知道这种定制是否可行,但任何答案(肯定或否定)都将不胜感激。

答案1

你至少需要glossaries-extra版本 1.36 和bib2gls版本 1.7。

文件entries.bib包含:

@entry{sample,
 name={sample},
 description={an example}
}

或者(如果你不想要描述)只需:

@index{sample}

文件test-supp1.tex

\documentclass{report}

\usepackage[colorlinks]{hyperref}
\usepackage[record % requires bib2gls
 ]{glossaries-extra}

\GlsXtrLoadResources[
 src={entries}% entries defined in entries.bib
]

\begin{document}
\tableofcontents

\chapter{Sample}
\gls{sample}.

\chapter{Another Sample}
\gls{sample}.

\printunsrtglossaries
\end{document}

文档构建:

pdflatex test-supp1
bib2gls -g test-supp1
pdflatex test-supp1

该条目有两个位置(第 2 页和第 3 页):

词汇表示例 2、3

文件test-supp2.tex

\documentclass{report}

\usepackage[colorlinks]{hyperref}
\usepackage[record % requires bib2gls
 ]{glossaries-extra}

\GlsXtrLoadResources[
 src={entries}% entries defined in entries.bib
]

\begin{document}
\chapter{Sample}
\gls{sample}.

\chapter{Another Sample}
\gls{sample}.

\printunsrtglossaries
\end{document}

文档构建:

pdflatex test-supp2
bib2gls -g test-supp2
pdflatex test-supp2

本例中的位置是第 1 页和第 2 页。

词汇表示例 1、2

主要文件test.tex还需要补充文件的位置test-supp1.textest-supp2.tex

\documentclass{book}

\usepackage[colorlinks]{hyperref}
\usepackage[record % using bib2gls
 ]{glossaries-extra}

\GlsXtrLoadResources[
  src={entries}, % data in entries.bib
% requires glossaries-extra v1.36 and bib2gls v1.7:
% include locations from supplementary documents obtained from
% test-supp1.aux and test-supp2.aux
  supplemental-locations={test-supp1,test-supp2},
]

\begin{document}
\frontmatter

\chapter{Foreword}
\gls{sample}.

\mainmatter

\chapter{Sample}

\gls{sample}.

\chapter{Another}
Nothing to see here.

\chapter{And Another}
\gls{sample}

\printunsrtglossaries

\end{document}

位置列表现在是:i(前言)、1(第 1 章)、5(第 3 章)、2(test-supp1.pdf)、3(test-supp1.pdf)、1(test-supp2.pdf)和 2(test-supp2.pdf)。除了内部链接为红色而外部链接为青色外,不太清楚哪个属于哪个文档。

词汇表示例 i, 1, 5, 2, 3, 1, 2

(并非所有 PDF 查看器都完全支持外部链接,因此链接可能只会将您带到链接文档的第一页。)

内部列表和外部列表之间的分隔符由 给出\bibglssupplementalsep。(如果缺少内部列表,则省略。)

外部列表封装在一个\bibglssupplemental{n}{子列表}在哪里n是外部位置的总数(在本例中为 4)。

每个子列表用 分隔\bibglssupplementalsubsep,每个子列表用 封装\bibglssupplementalsublist{n}{文档}{位置}在哪里n是子列表中的位置总数,文档是外部文档。子列表​​的顺序始终与 中列出的顺序相同supplemental-locations

这些命令均在.glstex创建的文件中提供,bib2gls因此您需要\newcommand先定义它们以\GlsXtrLoadResources覆盖默认值。

例如:

\documentclass{book}

\usepackage[colorlinks]{hyperref}
\usepackage[record % using bib2gls
 ]{glossaries-extra}

\newcommand{\bibglssupplementalsep}{.}
\newcommand{\bibglssupplementalsubsep}{; }

\newcommand{\bibglssupplemental}[2]{%
 \par
 \ifnum#1=1
  External reference:
 \else
  External references:
 \fi
 #2.%
}

\newcommand{\bibglssupplementalsublist}[3]{%
  #2: #3%
}

\GlsXtrLoadResources[
  src={entries}, % data in entries.bib
% requires glossaries-extra v1.36 and bib2gls v1.7:
% include locations from supplementary documents obtained from
% test-supp1.aux and test-supp2.aux
  supplemental-locations={test-supp1,test-supp2},
]

\begin{document}
\frontmatter

\chapter{Foreword}
\gls{sample}.

\mainmatter

\chapter{Sample}

\gls{sample}.

\chapter{Another}
Nothing to see here.

\chapter{And Another}
\gls{sample}

\printunsrtglossaries

\end{document}

这将以句号结束内部位置列表,并在外部列表开始前放置一个段落分隔符和一个前缀。每个子列表都以外部文档的名称开头:

词汇表样本示例 i、1、5。外部参考:test-supp1.pdf:2、3;test-supp2.pdf:1、2。

每个外部位置都格式化为\glsxtrdisplaysupploc{超前缀}{柜台}{格式}{文档}{地点}在哪里超前缀柜台用于创建超链接的目标名称,格式是外部文档中使用的原始格式(默认忽略),文档是外部文档,地点是外部位置。此命令的定义(在 中glossaries-extra-bib2gls.sty,使用包选项自动加载record)为:

\newcommand*\glsxtrdisplaysupploc[5]{%
  \setentrycounter[#1]{#2}%
  \glsxtrmultisupplocation{#5}{#4}{#3}%
}

因此,如果您想要为每个外部位置(而不是子列表)设置一个前缀,那么您可以重新定义此命令。最简单的方法是提供从文档文件名到所需前缀的映射。例如:

\documentclass{book}

\usepackage[colorlinks]{hyperref}
\usepackage[record % using bib2gls
 ]{glossaries-extra}

\newcommand{\setfileprefix}[2]{\csdef{prefix@#1}{#2}}
\newcommand{\usefileprefix}[1]{\csuse{prefix@#1}}

\setfileprefix{test-supp1.pdf}{A}
\setfileprefix{test-supp2.pdf}{B}

\renewcommand*\glsxtrdisplaysupploc[5]{%
  \setentrycounter[#1]{#2}%
  \usefileprefix{#4}\glsxtrmultisupplocation{#5}{#4}{#3}%
}

\GlsXtrLoadResources[
  src={entries}, % data in entries.bib
% requires glossaries-extra v1.36 and bib2gls v1.7:
% include locations from supplementary documents obtained from
% test-supp1.aux and test-supp2.aux
  supplemental-locations={test-supp1,test-supp2},
]

\begin{document}
\frontmatter

\chapter{Foreword}
\gls{sample}.

\mainmatter

\chapter{Sample}

\gls{sample}.

\chapter{Another}
Nothing to see here.

\chapter{And Another}
\gls{sample}

\printunsrtglossaries

\end{document}

词汇表示例 i, 1, 5, A2, A3, B1, B2

笔记:

  • 旧版本bib2gls仅支持选项的单个值(而不是列表)supplemental-locations
  • 对于 v1.7,如果bib2gls检测到的版本glossaries-extra太旧,无法支持多个补充位置,它将只接受列出的第一个项supplemental-locations(并发出警告)。

相关内容