关于我即将写的书,我正在思考另一个主题,我认为这个主题值得单独写一个主题。
由于本书将是一本传统的纸质书,而不是电子书,因此我希望标记文中任何在词汇表中解释的技术术语,以便读者知道书末有进一步解释。当然,标记应以不显眼的方式进行,以免破坏得体的文本布局。
使用不同的文本样式(如斜体、粗体、不同字体等)不是一种选择,因为它们已经用于其他突出显示目的。因此,我想到了一些要标记的技术术语旁边的符号,例如\leftpointright
术语后面的 或上标的\diamond
。
我如何通过该包具体实现这一点glossaries
?
答案1
我认为\defglsentryfmt
有一种方法来定义prefix
gls 条目,如文中所示。
由于正在设计一本“经典”的纸质书,hyperref
因此不需要,并且不会出现难看的分离链接。
\documentclass{article}
\usepackage{blindtext}
\usepackage{glossaries}
\makeglossaries
\newglossaryentry{foo}{%
name={Foo},
description={Foo is the Foo, nothing more}
}
\defglsentryfmt{$\rightarrow$\glsname{\glslabel}}
\begin{document}
\blindtext
\gls{foo}
\blindtext
\printglossaries
\end{document}
答案2
有多种不同的方法可以更改用于显示glossaries
包定义的术语的格式。这取决于您想要影响哪些命令。
让我们从具有三种词汇表类型的 MWE 开始:main
(默认)acronyms
和symbols
:
\documentclass{article}
\usepackage[symbols,acronyms]{glossaries}
\makeglossaries
\newglossaryentry{matrix}{name={matrix},plural={matrices},
description={rectangular array of quantities}}
\newglossaryentry{M}{type=symbols,name={\ensuremath{\boldsymbol{M}}},sort=M,
description={a \gls{matrix}}}
\newacronym{filo}{FILO}{first in last out}
\begin{document}
A \gls{matrix}, denoted \gls{M}. Lots of \glspl{matrix}.
\Glspl{matrix} are a rectangular array of quantities.
No indexing, linking, formatting: \glsentrytext{matrix}.
The identity \gls{matrix}['s] diagonal consists of ones.
First use: \gls{filo}. Next use: \gls{filo}.
Full form: \acrfull{filo}.
\printglossaries
\end{document}
得出的结果为:
形式中的命令\glsentry...
(例如\glsentrytext
)只是扩展为相应键的值,没有任何格式化或索引等。
这\gls
类似命令 \gls
、、、、、和\Gls
的默认格式均由 控制,但可以使用 覆盖特定词汇表的格式,但对此格式的任何更改都必须应用各种测试来\GLS
确定调用命令以及这是否是第一次使用该条目。(请参阅第\glspl
节\Glspl
\GLSpl
\glsdisp
\glsentryfmt
\defglsentryfmt
6.3 更改链接文本的格式用户手册。)\glsgenentryfmt
如果只需要进行少量修改,可以使用一个方便的命令来处理通用术语。如果您想更改缩写的格式,有多种不同的方法。
这\glstext
类似命令例如\glstext
和\glsname
不使用这种特殊的显示格式,因为要显示的文本是定义条目时相应键提供的文本(可能包含通过最后一个可选参数插入的任何文本,如\glstext{matrix}['s]
)。因此,对的任何更改\glsentryfmt
或使用\defglsentryfmt
都不会对这些命令的显示方式产生任何影响。
\gls
-like 和\glstext
-like 命令都会\glstextformat
用其参数换行。显示此命令中的更改如何修改文档的最简单方法是添加一些颜色:
\documentclass{article}
\usepackage{color}
\usepackage[symbols,acronyms]{glossaries}
\renewcommand{\glstextformat}[1]{\textcolor{blue}{#1}}
\makeglossaries
\newglossaryentry{matrix}{name={matrix},plural={matrices},
description={rectangular array of quantities}}
\newglossaryentry{M}{type=symbols,name={\ensuremath{\boldsymbol{M}}},sort=M,
description={a \gls{matrix}}}
\newacronym{filo}{FILO}{first in last out}
\begin{document}
A \gls{matrix}, denoted \gls{M}. Lots of \glspl{matrix}.
\Glspl{matrix} are a rectangular array of quantities.
No indexing, linking, formatting: \glsentrytext{matrix}.
The identity \gls{matrix}['s] diagonal consists of ones.
First use: \gls{filo}. Next use: \gls{filo}.
Full form: \acrfull{filo}.
\printglossaries
\end{document}
得出的结果为:
请注意,并\glsentrytext{matrix}
没有改变,词汇表中的名称也没有改变(除了\gls{matrix}
在条目描述中出现的实例M
)。
因此,如果您希望每次使用\gls
-like 或-like 命令时都有一个指示器,您只需根据\glstext
需要重新定义即可。\glstextformat
如果您只想更改某些类型的条目或某些类型的命令的格式,这会变得稍微复杂一些。如果您只想更改类似命令的格式\gls
,您可以重新定义\glsentryfmt
或使用\defglsentryfmt
特定的词汇表。
让我们首先尝试重新定义\glsentryfmt
以插入前缀符号:
\documentclass{article}
\usepackage{color}
\usepackage[symbols,acronyms]{glossaries}
\renewcommand{\glstextformat}[1]{\textcolor{blue}{#1}}
\renewcommand{\glsentryfmt}{$\rightarrow$\glsgenentryfmt}
\makeglossaries
\newglossaryentry{matrix}{name={matrix},plural={matrices},
description={rectangular array of quantities}}
\newglossaryentry{M}{type=symbols,name={\ensuremath{\boldsymbol{M}}},sort=M,
description={a \gls{matrix}}}
\newacronym{filo}{FILO}{first in last out}
\begin{document}
A \gls{matrix}, denoted \gls{M}. Lots of \glspl{matrix}.
\Glspl{matrix} are a rectangular array of quantities.
No indexing, linking, formatting: \glsentrytext{matrix}.
The identity \gls{matrix}['s] diagonal consists of ones.
First use: \gls{filo}. Next use: \gls{filo}.
Full form: \acrfull{filo}.
\printglossaries
\end{document}
得出的结果为:
请注意,前缀不会出现在首字母缩略词中,因为缩写机制已acronym
使用 覆盖了词汇表的格式\defglsentryfmt
,因此\glsentryfmt
不用于该词汇表中的条目。
现在假设我删除了acronym
包选项,以便使用定义的条目\newacronym
放在main
词汇表中,而不是有单独的列表:
\documentclass{article}
\usepackage{color}
\usepackage[symbols]{glossaries}
\renewcommand{\glstextformat}[1]{\textcolor{blue}{#1}}
\renewcommand{\glsentryfmt}{$\rightarrow$\glsgenentryfmt}
\makeglossaries
\newglossaryentry{matrix}{name={matrix},plural={matrices},
description={rectangular array of quantities}}
\newglossaryentry{M}{type=symbols,name={\ensuremath{\boldsymbol{M}}},sort=M,
description={a \gls{matrix}}}
\newacronym{filo}{FILO}{first in last out}
\begin{document}
A \gls{matrix}, denoted \gls{M}. Lots of \glspl{matrix}.
\Glspl{matrix} are a rectangular array of quantities.
No indexing, linking, formatting: \glsentrytext{matrix}.
The identity \gls{matrix}['s] diagonal consists of ones.
First use: \gls{filo}. Next use: \gls{filo}.
Full form: \acrfull{filo}.
\printglossaries
\end{document}
文档现在如下所示:
现在唯一带前缀的条目是词汇表M
中的条目symbols
。这是因为\newacronym
已再次触发\defglsentryfmt
与其条目关联的词汇表,该词汇表现在是main
词汇表。
可以通过在 之后添加另一个 来覆盖此\defglsentryfmt
by的使用,我已在下面完成此操作。我还添加了(这是一个使用字段提供的文本的类似命令)。\newacronym
\defglsentryfmt
\newacronym
\glsname{filo}
\glstext
name
\documentclass{article}
\usepackage{color}
\usepackage[symbols]{glossaries}
\renewcommand{\glstextformat}[1]{\textcolor{blue}{#1}}
\renewcommand{\glsentryfmt}{$\rightarrow$\glsgenentryfmt}
\makeglossaries
\newglossaryentry{matrix}{name={matrix},plural={matrices},
description={rectangular array of quantities}}
\newglossaryentry{M}{type=symbols,name={\ensuremath{\boldsymbol{M}}},sort=M,
description={a \gls{matrix}}}
\newacronym{filo}{FILO}{first in last out}
\defglsentryfmt{\glsentryfmt}
\begin{document}
A \gls{matrix}, denoted \gls{M}. Lots of \glspl{matrix}.
\Glspl{matrix} are a rectangular array of quantities.
No indexing, linking, formatting: \glsentrytext{matrix}.
The identity \gls{matrix}['s] diagonal consists of ones.
First use: \gls{filo}. Next use: \gls{filo}.
Full form: \acrfull{filo}.
Name: \glsname{filo}.
\printglossaries
\end{document}
现在产生:
这并没有使用前缀,而是令人困惑的是,在长格式前面和短格式前面都\glsname
使用了两次前缀。\acrfull
设置首字母缩略词样式使用\setacronymstyle
会删除两个前缀,\acrfull
但使用会破坏首字母缩略词样式,该样式依赖于缩写和非缩写\defglsentryfmt
使用的条目格式:\glsgenacfmt
\glsgenentryfmt
\documentclass{article}
\usepackage{color}
\usepackage[symbols]{glossaries}
\renewcommand{\glstextformat}[1]{\textcolor{blue}{#1}}
\renewcommand{\glsentryfmt}{$\rightarrow$\glsgenentryfmt}
\makeglossaries
\setacronymstyle{long-short}
\newglossaryentry{matrix}{name={matrix},plural={matrices},
description={rectangular array of quantities}}
\newglossaryentry{M}{type=symbols,name={\ensuremath{\boldsymbol{M}}},sort=M,
description={a \gls{matrix}}}
\newacronym{filo}{FILO}{first in last out}
\defglsentryfmt{\glsentryfmt}
\begin{document}
A \gls{matrix}, denoted \gls{M}. Lots of \glspl{matrix}.
\Glspl{matrix} are a rectangular array of quantities.
No indexing, linking, formatting: \glsentrytext{matrix}.
The identity \gls{matrix}['s] diagonal consists of ones.
First use: \gls{filo}. Next use: \gls{filo}.
Full form: \acrfull{filo}.
Name: \glsname{filo}.
\printglossaries
\end{document}
相反,条目格式必须检查缩写,可以使用以下方法完成\ifglshasshort
:
\renewcommand{\glsentryfmt}{%
$\rightarrow$\ifglshasshort{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}}
此次修改产生:
\glsname
这纠正了缩写的第一次使用,但由于该命令不受\glsentryfmt
(或) 的管辖,因此前面仍然没有前缀\defglsentryfmt
。
您可以引入一些变化。例如,只在常规术语(而不是缩写)前加上前缀:
\renewcommand{\glsentryfmt}{%
\ifglshasshort{\glslabel}{\glsgenacfmt}{$\rightarrow$\glsgenentryfmt}}
或者仅在第一次使用时使用前缀:
\renewcommand{\glsentryfmt}{%
\ifglshasshort{\glslabel}
{\glsgenacfmt}% abbreviation
{\ifglsused{\glslabel}{}{$\rightarrow$}\glsgenentryfmt}% regular term
}
还有更多的灵活性glossaries-extra
包中可以对条目进行分类,并可以根据类别或类别的属性进行细微调整。(请参阅这个例子来自glossaries-extra
画廊。
当重新定义\glsentryfmt
或使用时,重要的是要记住不要破坏由和执行的确定调用命令( ,等)\defglsentryfmt
的检查。\gls
\glspl
\glsgenentryfmt
\glsgenacfmt
例如,以下修改会破坏文档:
\renewcommand{\glsentryfmt}{$\rightarrow$\glsentryname{\glslabel}}
得出的结果为:
复数形式\glspl{matrix}
已呈现为单数。 中的大小写变化\Glspl{matrix}
已丢失(以及简化为单数形式)。 的可选参数中插入的材料\gls{matrix}['s]
已丢失。 缩写在第一次使用时不再显示长格式。 使用\glsname
而不是会使情况变得更糟,因为它嵌套了和\glsentryname
使用的相当复杂的内部命令,并且任何添加到文档的人都可能遇到嵌套超链接引起的问题。\gls
\glsname
hyperref