![包含递归术语的词汇表包(例如 TCP/IP)](https://linux22.com/image/374225/%E5%8C%85%E5%90%AB%E9%80%92%E5%BD%92%E6%9C%AF%E8%AF%AD%E7%9A%84%E8%AF%8D%E6%B1%87%E8%A1%A8%E5%8C%85%EF%BC%88%E4%BE%8B%E5%A6%82%20TCP%2FIP%EF%BC%89.png)
[Mac 上的 TeXstudio]
我正在使用词汇表包,我想知道如何最好地处理递归?
例如,定义以下词汇表术语(请注意,该tcpip
定义以递归方式调用其他两个术语):
\newglossaryentry{tcp}{name=TCP, description={Transmission Control Protocol}}
\newglossaryentry{ip}{name=IP, description={Internet Protocol}}
\newglossaryentry{tcpip}{name=TCP/IP, description={Internet protocol suite comprising of both the \gls{tcp} and \gls{ip} protocols}}
我包括术语TCP/IP在我的文档中使用该\gls{tcpip}
命令。执行此命令后,词汇表现在包含以下条目:
TCP/IP Internet protocol suite comprising of both the TCP and IP protocols
然而,除了上述条目之外,我希望两者的定义TCP和知识产权现在也将被包括在内。
词汇表包能够正确替换嵌套\gls
命令,但不会将相关条目添加到词汇表中。因此,在我的例子中,读者不知道TCP和知识产权意思是。
尼古拉发布答案后更新
我目前的构建顺序(在 Mac 上使用 TeXstudio)是:
txs:///compile | txs:///makeglossaries | txs:///bibliography | txs:///compile| txs:///compile | txs:///makecopy | txs:///view
我\makeglossaries
在我的文档的序言中有一个,就像您在示例中一样。
那么,您是说我需要txs:///makeglossaries
在一次后续的编译调用之后在我的构建命令中插入一个附加内容吗?
答案1
考虑这个例子:
\documentclass{report}
\usepackage{glossaries}
\makeglossaries
\newglossaryentry{tcp}{name=TCP, description={Transmission Control Protocol}}
\newglossaryentry{ip}{name=IP, description={Internet Protocol}}
\newglossaryentry{tcpip}{name=TCP/IP, description={Internet protocol suite
comprising of both the \gls{tcp} and \gls{ip} protocols}}
\begin{document}
\chapter{Sample}
\gls{tcpip}.
\printglossaries
\end{document}
第一次运行 LaTeX 时,tcpip
索引在第 1 页。词汇表不存在,因此描述未排版,这意味着\gls
描述中的实例未被处理。因此,如果文档名为myDoc.tex
,如果构建过程为:
pdflatex myDoc
makeglossaries myDoc
pdflatex myDoc
那么 PDF 在词汇表中只显示 TCP/IP:
但如果你查看文件,.glo
你会发现 TCP 和 IP 条目已被索引:
\glossaryentry{TCP/IP?\glossentry{tcpip}|setentrycounter[]{page}\glsnumberformat}{1}
\glossaryentry{TCP?\glossentry{tcp}|setentrycounter[]{page}\glsnumberformat}{2}
\glossaryentry{IP?\glossentry{ip}|setentrycounter[]{page}\glsnumberformat}{2}
pdflatex
在排版词汇表时,它们是在第二个索引中创建的。makeglossaries
更新词汇表需要额外的 LaTeX 调用,因此完整的构建过程需要:
pdflatex myDoc
makeglossaries myDoc
pdflatex myDoc
makeglossaries myDoc
pdflatex myDoc
现在 IP 和 TCP 显示在词汇表中(页码为 2,这是它们在描述中被索引的位置tcpip
)。
如果从属术语在其描述中也引用了某个术语,则该术语无法被索引,直到从属术语的描述在词汇表中排版完毕。例如:
\documentclass{report}
\usepackage{glossaries}
\makeglossaries
\newglossaryentry{transmission}{name={transmission},
description={programme or signal that is broadcast or sent out}}
\newglossaryentry{tcp}{name=TCP,
description={\Gls{transmission} Control Protocol}}
\newglossaryentry{ip}{name=IP, description={Internet Protocol}}
\newglossaryentry{tcpip}{name=TCP/IP, description={Internet protocol suite
comprising of both the \gls{tcp} and \gls{ip} protocols}}
\begin{document}
\chapter{Sample}
\gls{tcpip}.
\printglossaries
\end{document}
现在需要:
pdflatex myDoc
makeglossaries myDoc
pdflatex myDoc
makeglossaries myDoc
pdflatex myDoc
makeglossaries myDoc
pdflatex myDoc
如果您想要一种自动化方法来跟踪所有依赖关系,那么您需要切换到bib2gls
和glossaries-extra
。这要求在文件中定义条目.bib
。例如entries.bib
:
% Encoding: UTF-8
@entry{transmission,
name={transmission},
description = {programme or signal that is broadcast or sent out}
}
@entry{tcp,
name = {TCP},
description = {\Gls{transmission} Control Protocol}
}
@entry{ip,
name = {IP},
description = {Internet Protocol}
}
@entry{tcpip,
name = {TCP/IP},
description = {Internet protocol suite
comprising of both the \gls{tcp} and \gls{ip} protocols}
}
文档 ( myDoc.tex
) 现在如下所示:
\documentclass{report}
\usepackage[record,% using bib2gls
postpunc=dot]{glossaries-extra}
\GlsXtrLoadResources[% using bib2gls
src = {entries}% terms defined in entries.bib
]
\begin{document}
\chapter{Sample}
\gls{tcpip}.
\printunsrtglossaries % <-- 'unsrt' variant needed with bib2gls
\end{document}
文档构建过程现在是:
pdflatex myDoc
bib2gls myDoc
pdflatex myDoc
如果希望字母组之间有明显的分隔,则需要使用--group
(或-g
)开关:
pdflatex myDoc
bib2gls -g myDoc
pdflatex myDoc
词汇表现在包括所有相关术语:
但请注意,依赖项不包括页码。这些只能在后续的bib2gls
+ LaTeX 调用中获得,因此完整的构建过程需要:
pdflatex myDoc
bib2gls -g myDoc
pdflatex myDoc
bib2gls -g myDoc
pdflatex myDoc
但至少这限制了确保位置最新所需的最大呼叫次数。
您可能希望省略仅出现在文档中的条目的页码,而只显示文档中明确索引的条目的页码。在这种情况下,您可以将默认格式(encap)更改为glsignore
词汇表开头的格式:
\documentclass{report}
\usepackage[record,% using bib2gls
postpunc=dot]{glossaries-extra}
\GlsXtrLoadResources[% using bib2gls
src = {entries}% terms defined in entries.bib
]
\begin{document}
\chapter{Sample}
\gls{tcpip}.
\GlsXtrSetDefaultNumberFormat{glsignore}
\printunsrtglossaries % <-- 'unsrt' variant needed with bib2gls
\end{document}
现在文档已更新,仅包含以下序列:
pdflatex myDoc
bib2gls --group myDoc
pdflatex myDoc
(当然,如果您需要添加参考书目等,那么构建过程将变得更加复杂。)bib2gls
删除所有临时文件后,您可能还需要一个额外的 +LaTeX,因为第一次调用 LaTeX 时\gls
只会生成。只有在创建文件输入后??
才能解决此问题,并且一旦生成正确的文本,这可能会导致分页符发生偏移。(这不会影响词汇表中条目的出现,但可能会稍微改变位置列表。)bib2gls
\GlsXtrLoadResources
\gls