包含递归术语的词汇表包(例如 TCP/IP)

包含递归术语的词汇表包(例如 TCP/IP)

[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:

术语表 TCP/IP 互联网协议套件由 TCP 和 IP 协议组成。1

但如果你查看文件,.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)。

词汇表 IP 互联网协议。2 TCP 传输控制协议。2 TCP/IP 互联网协议套件,由 TCP 和 IP 协议组成。1

如果从属术语在其描述中也引用了某个术语,则该术语无法被索引,直到从属术语的描述在词汇表中排版完毕。例如:

\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

如果您想要一种自动化方法来跟踪所有依赖关系,那么您需要切换到bib2glsglossaries-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

词汇表现在包括所有相关术语:

词汇表 IP 互联网协议。 TCP 传输控制协议。 TCP/IP 互联网协议套件,由 TCP 和 IP 协议组成。 1 广播或发送的传输程序或信号。

但请注意,依赖项不包括页码。这些只能在后续的bib2gls+ LaTeX 调用中获得,因此完整的构建过程需要:

pdflatex myDoc
bib2gls -g myDoc
pdflatex myDoc
bib2gls -g myDoc
pdflatex myDoc

但至少这限制了确保位置最新所需的最大呼叫次数。

术语表 IP 互联网协议。2 TCP 传输控制协议。2 TCP/IP 互联网协议套件,由 TCP 和 IP 协议组成。1 广播或发送的传输程序或信号。2

您可能希望省略仅出现在文档中的条目的页码,而只显示文档中明确索引的条目的页码。在这种情况下,您可以将默认格式(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

相关内容