我正在尝试为不同的文件创建一个符号列表。我有两个文件 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)
在文件之间引用方程式、图形等,我正在使用xr
package 和 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 页:
第二个文档名为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
外部链接为青色,因为这是选项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
结果与之前几乎相同,只是外部位置与内部位置用分号分隔。
您可以更改选择标准,使其包含源 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
中提供:.glstex
bib2gls
\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
如果将补充位置连接成一个范围(例如,2-4),则位置列表将采用以下形式:
\bibglssupplemental{3}{\setentrycounter[]{page}\glsxtrsupphypernumber{2}\delimR \setentrycounter[]{page}\glsxtrsupphypernumber{4}}
范围分隔\delimR
符与普通内部位置(--
)相同,并且位于封装器之外,因此上述修改\glsxtrsupphypernumber
将改变范围的开始和结束: