我有几个缩写词想用这个glossaries
包列出来。其中一些比较奇怪,所以我想编辑缩写词的样式。
这些首字母缩略词与其他首字母缩略词的不同之处在于它们可以同义使用:基本上,RIVA
是拉丁语,用于正文中,LAD
是英语;用于表格和图表中。(这只是一个例子,还有更多这样的首字母缩略词对。我认为在科学论文中对同一件事使用不同的术语相当令人困惑,但这些是我的要求。)
我的想法是将词汇表中的条目留空LAD
,只放一个指向RIVA
那里的链接;而的条目RIVA
包含和的长形式RIVA
(在括号中)LAD
:
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[nomain,xindy,acronym,toc,nopostdot,nogroupskip]{glossaries}
\setglossarystyle{list}
\renewcommand{\glsnumlistsep}{,}
\renewcommand{\glsnumlistlastsep}{:}
\newacronymstyle{teststyle}%
{%
\ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}%
}%
{%
\renewcommand*{\GenericAcronymFields}{%
first={\the\glslongtok\space\protect\paren{\the\glsshorttok}},
description={\the\glslongtok}}%
\renewcommand*{\genacrfullformat}[2]{%
\glsentrylong{##1}##2\space%
(\protect\firstacronymfont{\glsentryshort{##1}})%
}%
\renewcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}%
\renewcommand*{\acronymsort}[2]{##1}%
\renewcommand*{\acronymfont}[1]{##1}%
\renewcommand*{\firstacronymfont}[1]{\acronymfont{##1}}%
\renewcommand*{\acrpluralsuffix}{\glspluralsuffix}%
\renewcommand*{\glossentry}[2]{%
\item[\glsentryitem{##1}%
\glstarget{##1}{\glossentryname{##1}}]
\ifglshasfield{see}{##1}
{##2}
{\glossentrydesc{##1}\glspostdescription\space ##2}%
}%
}
\setacronymstyle{teststyle}
\makeglossaries
\newacronym[%
% description={\nopostdesc},
see={riva}]
{lad}{LAD}{Left Anterior Descending}
\newacronym[%
description={Ramus interventricularis anterior (Engl.: Left Anterior Descending},
{riva}{RIVA}{Ramus interventricularis anterior}
%----------------------------------
\begin{document}
%~ \glsaddallunused
\printglossaries
\section{Test}
\gls{lad} and \gls{lad} again.
\clearpage
On this page, we have only \gls{riva}.
\clearpage
\gls{riva} means the same as \gls{lad} but is used in normal text, while \gls{lad} is used in tables and diagrams.
\end{document}
代码中有趣的部分是 的重新定义\glossentry
。我想检查是否see
为条目设置了该字段;如果是,则仅打印链接,否则打印描述和链接。但是, -directive\ifglshasfield
似乎被忽略了,所以我得到的是:
如您所见,LAD
虽然应该跳过 的定义,但还是打印了 。我猜我的\ifglshasfield{see}{##1}…
陈述有些问题——但是什么问题呢?我不明白的另一件事是,为什么 的数字列表LAD
看起来正确(它以 开头\space 1
,后跟逗号),而 的数字列表RIVA
却不正确(它以 开头\space ,
)。
最后,我有一个与 LaTeX 有关(目前还不是)的问题,但与样式有关:和都RIVA
在LAD
文档中引用,因此两者都会有一个编号列表——如图所示。在我的 MWE 中,编号列表非常短,但在最终文档中会更长。我不喜欢让条目变得杂乱LAD
——我只希望它有首字母缩略词,后跟“看RIVA”:首先,如果没有给出定义,数字列表可能会被解释为定义;其次,可能很长的行末尾的交叉引用可能很难找到。现在,由于两个首字母缩略词意思相同,您认为可以将数字列表中的数字合并LAD
到 中吗?从我的前提来看,保持行清晰是有意义的,但如果有人在仅引用 的页面上RIVA
寻找,会不会造成混淆?如果合并数字列表确实有意义:合并后的数字列表会包含双数字吗,或者包内部的等效项会处理这个问题吗?RIVA
LAD
sort | uniq
答案1
基础glossaries
包实际上并不存储键的值see
。如果存在键,则在定义条目时会自动触发交叉引用,因此不会保存该值。但是,glossaries-extra
扩展包确实可以节省它。 的另一个优点glossaries-extra
是,您可以为不同的类别使用不同的缩写样式。
类别使用category
提供的新键进行设置glossaries-extra
。值只是您选择的标签(避免使用特殊字符)。
例如,您可以latin
为拉丁文缩写和xr
交叉引用缩写指定类别。有一种缩写样式称为long-short-user
,可用于样式中的缩写长的(短的,自定义文本)或类似short-long-user
样式短的(长的,自定义文本)。自定义文本默认从user1
字段中获取。例如:
\setabbreviationstyle[latin]{long-short-user}
\newabbreviation[category=latin,
user1={Left Anterior Descending}]
{riva}{RIVA}{Ramus interventricularis anterior}
xr
可以为与 类似的类别创建一种新的缩写样式long-short
,但将description
字段设置为交叉引用(通过\glsxtrusesee
),并使用 来自动抑制数字列表nonumberlist
。例如:
\newabbreviationstyle{xrstyle}%
{%
\renewcommand*{\CustomAbbreviationFields}{%
name={\protect\glsabbrvfont{\the\glsshorttok}},
sort={\the\glsshorttok},
first={\protect\glsfirstlongfont{\the\glslongtok}%
\protect\glsxtrfullsep{\the\glslabeltok}%
(\protect\glsfirstabbrvfont{\the\glsshorttok})},%
firstplural={\protect\glsfirstlongfont{\the\glslongpltok}%
\protect\glsxtrfullsep{\the\glslabeltok}%
(\protect\glsfirstabbrvfont{\the\glsshortpltok})},%
plural={\protect\glsabbvfont{\the\glsshortpltok}},%
nonumberlist,
description={ \protect\glsxtrusesee{\the\glslabeltok}}}%
\renewcommand*{\GlsXtrPostNewAbbreviation}{%
\glshasattribute{\the\glslabeltok}{regular}%
{%
\glssetattribute{\the\glslabeltok}{regular}{false}%
}%
{}%
}%
}%
{%
\GlsXtrUseAbbrStyleFmts{long-short}%
}
在定义使用缩写的缩写之前,必须始终设置缩写样式:
\setabbreviationstyle[xr]{xrstyle}
\newabbreviation[category=xr,see={riva}]
{lad}{LAD}{Left Anterior Descending}
还可以category
用于自定义词汇表外观,而无需定义新的词汇表样式。这可以通过定义\glsxtrpostdesc
类别。 例如,
\newcommand{\glsxtrpostdesclatin}{%
\ifglshasfield{\glsxtruserfield}{\glscurrententrylabel}%
{ (Engl.: \glscurrentfieldvalue)}%
{}%
}
这将自动在类别设置为 的条目的描述后插入翻译latin
。
我不确定合并数字列表是否是个好主意,但可以通过在使用 LAD 时自动索引 RIVA 来实现。该glossaries-extra
包提供了在命令之后使用的钩子,形式\gls
如下\glstext
\glsxtrpostlink
类别,因此对于xr
类别来说,这意味着定义\glsxtrpostlinkxr
:
\newcommand{\glsxtrpostlinkxr}{%
\glsfieldfetch{\glslabel}{see}{\xrlist}%
\glsadd{\xrlist}%
}
这假设键的值see
是单个标签,因此它不适用于see=[see also]lad
或see={foo,bar}
。更一般的用法需要对 进行循环\xrlist
。
完成 MWE:
\documentclass{article}
\usepackage[abbreviations,nomain,xindy,nogroupskip]{glossaries-extra}
\makeglossaries
\newabbreviationstyle{xrstyle}%
{%
\renewcommand*{\CustomAbbreviationFields}{%
name={\protect\glsabbrvfont{\the\glsshorttok}},
sort={\the\glsshorttok},
first={\protect\glsfirstlongfont{\the\glslongtok}%
\protect\glsxtrfullsep{\the\glslabeltok}%
(\protect\glsfirstabbrvfont{\the\glsshorttok})},%
firstplural={\protect\glsfirstlongfont{\the\glslongpltok}%
\protect\glsxtrfullsep{\the\glslabeltok}%
(\protect\glsfirstabbrvfont{\the\glsshortpltok})},%
plural={\protect\glsabbvfont{\the\glsshortpltok}},%
nonumberlist,
description={ \protect\glsxtrusesee{\the\glslabeltok}}}%
\renewcommand*{\GlsXtrPostNewAbbreviation}{%
\glshasattribute{\the\glslabeltok}{regular}%
{%
\glssetattribute{\the\glslabeltok}{regular}{false}%
}%
{}%
}%
}%
{%
\GlsXtrUseAbbrStyleFmts{long-short}%
}
\newcommand{\glsxtrpostdesclatin}{%
\ifglshasfield{\glsxtruserfield}{\glscurrententrylabel}%
{ (Engl.: \glscurrentfieldvalue)}%
{}%
}
\newcommand{\glsxtrpostlinkxr}{%
\glsfieldfetch{\glslabel}{see}{\xrlist}%
\glsadd{\xrlist}%
}
\setabbreviationstyle[latin]{long-short-user}
\setabbreviationstyle[xr]{xrstyle}
\newabbreviation[category=latin,
user1={Left Anterior Descending}]
{riva}{RIVA}{Ramus interventricularis anterior}
\newabbreviation[category=xr,see={riva}]
{lad}{LAD}{Left Anterior Descending}
\begin{document}
\printglossaries
\section{Test}
\gls{lad} and \gls{lad} again.
\clearpage
On this page, we have only \gls{riva}.
\clearpage
\gls{riva} means the same as \gls{lad} but is used in normal text,
while \gls{lad} is used in tables and diagrams.
\end{document}
(glossaries-extra
自动实现包选项toc
并nopostdot
默认。)
第一页如下所示:
第二页:
首次使用riva
显示为:
室间升支(RIVA,左前降支)
这是 的默认首次使用显示样式long-short-user
,但可以通过重新定义 来更改括号元素\glsxtruserparen
。例如:
\renewcommand*{\glsxtruserparen}[2]{%
\glsxtrfullsep{#2}%
(#1\ifglshasfield{\glsxtruserfield}{#2}{, Engl.: \glscurrentfieldvalue}{})%
}