这是这个问题。
正如上述问题,我有多个文件,实际上是 3 个。它们都必须共享相同的词汇表。根据上一个问题的答案和评论,可以找到 2 个文件的令人满意的解决方案。但正如 @NicolaTalbot 所说,3 个文件更难。
假设我有 3 个文件:fileA.tex
,fileB.tex
和fileC.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 页):
文件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 页。
主要文件test.tex
还需要补充文件的位置test-supp1.tex
和test-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
)。除了内部链接为红色而外部链接为青色外,不太清楚哪个属于哪个文档。
(并非所有 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}
这将以句号结束内部位置列表,并在外部列表开始前放置一个段落分隔符和一个前缀。每个子列表都以外部文档的名称开头:
每个外部位置都格式化为\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}
笔记:
- 旧版本
bib2gls
仅支持选项的单个值(而不是列表)supplemental-locations
。 - 对于 v1.7,如果
bib2gls
检测到的版本glossaries-extra
太旧,无法支持多个补充位置,它将只接受列出的第一个项supplemental-locations
(并发出警告)。