不同文件使用一个词汇表

不同文件使用一个词汇表

我正在尝试为不同的文件创建一个符号列表。我有两个文件 file1.tex 和 file2.tex,我想要一个包含这两个文件的符号的符号列表,但我不知道如何正确编写它以获取对不同文件的引用。我有一个包含两个文件的符号的 symbol.tex,格式如下:

\newglossaryentry{id}{
.
.
.
}

file1.tex 中符号 s1 的输出应为

s1 description, page reference (in file1.pdf)

对于 file2.pdf 我想要实现类似

s1 description, 1-page reference (the number 1 being a symbol to be aware that this symbol occurs in file1)

在文件之间引用方程式、图形等,我正在使用xrpackage 和 latexmkrc ,如建议的那样分享LaTeX,但我不知道如何用词汇表做类似的事情(我对词汇表很陌生)。

答案1

这可以通过扩展包来实现glossaries-extra,但除非你使用,否则功能会非常有限bib2gls。至少glossaries-extra需要 1.14 版本,尽管最新版本是最好的。

我先从标准的 makeindex 方法开始。在这种情况下,只有内部引用是自动化的。交叉引用是手动完成的,这不是最理想的。

这是第一个文档,名为test-supp.tex

\documentclass{report}

\usepackage[colorlinks]{hyperref}
\usepackage{glossaries-extra}

\makeglossaries

\newglossaryentry{sample1}{name={sample 1},
 description={first example}}

\newglossaryentry{sample2}{name={sample 2},
 description={second example}}

\begin{document}
\tableofcontents

\chapter{Sample}
\gls{sample1} and \gls{sample2}.

\printglossaries
\end{document}

构建过程如下:

pdflatex test-supp
makeglossaries test-supp
pdflatex test-supp

词汇表包含两个条目,索引于第 2 页:

Glossary sample 1 first example 2 sample 2 second example 2

第二个文档名为test.tex且包含以下内容:

\documentclass{article}

\usepackage[colorlinks]{hyperref}
\usepackage{glossaries-extra}

\makeglossaries

\glssetcategoryattribute{supplementary}{externallocation}{test-supp.pdf}

\newglossaryentry{sample1}{category={supplementary},
 name={sample 1},
 description={first example}}

\newglossaryentry{sample3}{name={sample 3},
 description={third example}}

\begin{document}
\section{Sample}
In this document: \gls{sample1} and \gls{sample3}.
(Test link to check the PDF viewer:
\hyperref{test-supp.pdf}{}{page.2}{2}.)

\printglossaries
% manually index other document:
\glsadd[format=glsxtrsupphypernumber,thevalue=2]{sample1}
\end{document}

这需要知道sample1在交叉引用文档的第 2 页上已编入索引。文档构建过程如下:

pdflatex test
makeglossaries test
pdflatex test

image of second document

外部链接为青色,因为这是选项hyperref的默认颜色colorlinks

可以使用 实现更自动化的方法bib2gls。条目现在在文件中定义sample-entries.bib,其中包含:

% Encoding: UTF-8
@entry{sample1,
  name = {sample 1},
  description = {first example}
}

@entry{sample2,
  name = {sample 2},
  description = {second example}
}

@entry{sample3,
  name = {sample 3},
  description = {third example}
}

test-supp.tex文件需要修改为:

\documentclass{report}

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

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

\begin{document}
\tableofcontents

\chapter{Sample}
\gls{sample1} and \gls{sample2}.

\printunsrtglossaries %<-- changed
\end{document}

文档构建过程现在是:

pdflatex test-supp
bib2gls test-supp
pdflatex test-supp

结果和以前一样。

第二份文件test.tex需要改为:

\documentclass{article}

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

% separator between locations in this document and in the other
% document:
\newcommand{\bibglssupplementalsep}{; }

\GlsXtrLoadResources[
 src=sample-entries,% data in sample-entries.bib
 supplemental-locations=test-supp,% records in test-supp.aux
% set the category label for entries that have supplemental
% locations:
 supplemental-category={supplemental}
]

\begin{document}
\section{Sample}
In this document: \gls{sample1} and \gls{sample3}.
(Test link to check the PDF viewer:
\hyperref{test-supp.pdf}{}{page.2}{2}.)

\printunsrtglossaries % <-- changed
\end{document}

构建过程现在是:

pdflatex test
bib2gls test
pdflatex test

结果与之前几乎相同,只是外部位置与内部位置用分号分隔。

1 Sample In this document: sample 1 and sample 3. (Test link to check the PDF viewer: 2.) Glossary sample 1 first example 1; 2 sample 3 third example 1

您可以更改选择标准,使其包含源 bib 文件中定义的所有条目,这些条目在交叉引用文件中被索引supplemental-selection={all}

\GlsXtrLoadResources[
 src=sample-entries,% data in sample-entries.bib
 supplemental-locations=test-supp,% records in test-supp.aux
% set the category label for entries that have supplemental
% locations:
 supplemental-category={supplemental},
% Add all entries in the supplemental file that have been
% defined in sample-entries.bib:
 supplemental-selection={all}
]

或者,您可以使用逗号分隔的列表来列出已在其他文档中编入索引的条目。例如:

\GlsXtrLoadResources[
 src=sample-entries,% data in sample-entries.bib
 supplemental-locations=test-supp,% records in test-supp.aux
% set the category label for entries that have supplemental
% locations:
 supplemental-category={supplemental},
 supplemental-selection={sample2}
]

进一步定制

补充位置列表封装有\bibglssupplemental{n}{位置}在哪里n是位置数,位置是格式化位置列表的代码。在上面的示例中,这是:

\bibglssupplemental{1}{\setentrycounter[]{page}\glsxtrsupphypernumber{2}}

只有一个位置,因此第一个参数是 1。每个位置首先标识计数器(在本例中为),以允许正确形成超链接引用。默认定义在创建的文件page中提供:.glstexbib2gls

\providecommand{\bibglssupplemental}[2]{#2}

忽略第一个参数。

实际位置封装为\glsxtrsupphypernumber{地点}定义如下:

\newcommand*{\glsxtrsupphypernumber}[1]{%
 {%
   \glshasattribute{\glscurrententrylabel}{externallocation}%
   {%
     \def\glsxtrsupplocationurl{%
       \glsgetattribute{\glscurrententrylabel}{externallocation}}%
   }%
   {%
     \def\glsxtrsupplocationurl{}%
   }%
   \glshypernumber{#1}%
 }%
}

首先检查条目的类别是否externallocation设置了属性。如果设置了,则将其定义\glsxtrsupplocationurl为该值,从而生成\glshypernumber外部链接。否则\glsxtrsupplocationurl设置为空,在这种情况下\glshypernumber只是一个普通的内部链接。

因此,可以对补充位置的显示方式进行一些调整。例如,向整个列表添加前缀:

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

(这需要在之前进行,\GlsXtrLoadResources以便文件\providecommand.glstex不执行任何操作。)

在每个补充位置前面加上前缀:

\renewcommand*{\glsxtrsupphypernumber}[1]{%
 {%
   \glshasattribute{\glscurrententrylabel}{externallocation}%
   {%
     \def\glsxtrsupplocationurl{%
       \glsgetattribute{\glscurrententrylabel}{externallocation}}%
     [file: \glsxtrsupplocationurl]
   }%
   {%
     \def\glsxtrsupplocationurl{}%
   }%
   \glshypernumber{#1}%
 }%
}

(这需要文件中没有\renewcommand定义。)这两个修改产生:glossaries-extra.sty.glstex

sample 1 first example 1; supplementary reference: [file: test-supp.pdf] 2

如果将补充位置连接成一个范围(例如,2-4),则位置列表将采用以下形式:

\bibglssupplemental{3}{\setentrycounter[]{page}\glsxtrsupphypernumber{2}\delimR \setentrycounter[]{page}\glsxtrsupphypernumber{4}}

范围分隔\delimR符与普通内部位置(--)相同,并且位于封装器之外,因此上述修改\glsxtrsupphypernumber将改变范围的开始和结束:

sample 1 first example 1; supplementary references: [file: test-supp.pdf] 2–[file: test-supp.pdf] 4

相关内容