我正在用法语写一份文档,我必须用这个acro
包处理单词的性别形式。我想制作类似
tridimensionnelles (3D)(阴性形式)或 bidimensionnel (2D)(阳性形式)
使用代码:
\documentclass[12pt,twoside,openright]{book}
\usepackage[version=3]{acro} %list of abbreviations
\acsetup{
list/template = longtable,
list/display = used,
uppercase/list,
format/alt
}
\DeclareAcronym{2d}{
short = 2D,
long = bidimensionnel,
alt-format = tridimensionnelles}
\DeclareAcronym{3d}{
short = 3D,
long = tridimensionnel,
alt = tridimensionnelles}
\begin{document}
\ac{2d} is masculine gender form.
\newline
\aca{3d} is the feminine gender form, but there is not the short form (3D).
\end{document}
我可以生成类似的文字
但括号里的3D没有出现。
acro
您有什么想法来用这个包来处理性别形式吗?
答案1
acro
具有用于定义任意新属性的接口\DeclareAcroProperty
,以及用于定义新命令的接口\NewAcroCommand
,以及用于在文档各节中详细说明的29. 属性和30. 拥有缩写命令。
但是,对于定义多个属性和一个内部接口,我认为\DeclareAcroEnding
可以稍微滥用以达到良好的效果。
\DeclareAcroEnding{feminine}{}{}
定义*-feminine
和*-feminine-form
等同于*-plural
和*-plural-form
,它们最初都是空的。女性形式与男性形式的区别在于附加的字母long-feminine=les
,或者差异更大的地方long-feminine-form=tridimensionelles
可以用来完整地陈述它。
然后我们需要添加新的\ac
变体来应用这些属性,例如
\NewAcroCommand \acF {m}
{ \acrofeminine \UseAcroTemplate {first} {#1} }
\NewAcroCommand \AcF {m}
{ \acrofeminine \acroupper \UseAcroTemplate {first} {#1} }
(注意我使用是F
为了避免与已经存在的\acf
强制完整显示的现有 -type 命令发生冲突)。其他变体需要单独明确定义,但可以基于找到的定义在源中。
\documentclass[12pt,twoside,openright]{book}
\usepackage{acro}[=v3]
\DeclareAcroEnding{feminine}{}{}
\DeclareAcronym{2d}{
short = 2D,
long = bidimensionnel,
long-feminine=les,
}
\DeclareAcronym{3d}{
short = 3D,
long = tridimensionnel,
long-feminine-form=tridimensionnelles,
}
\NewAcroCommand \acF {m}
{ \acrofeminine \UseAcroTemplate {first} {#1} }
\NewAcroCommand \AcF {m}
{ \acrofeminine \acroupper \UseAcroTemplate {first} {#1} }
\begin{document}
\ac{2d} \acreset{2d} \acF{2d}
\acF{3d} \acreset{3d} \ac{3d}
\printacronyms[heading=none]
\end{document}
对于阴性复数,我认为我们必须\DeclareAcroEnding{feminineplural}{s}{s}
使用与plural
复数相同的默认值声明一个单独的结尾。不幸的是,我不知道如何继承结尾feminine
,所以这将需要一些重复,即使复数只是附加一个 s。
\documentclass[12pt,twoside,openright]{book}
\usepackage{acro}[=v3]
\DeclareAcroEnding{feminine}{}{}
\DeclareAcroEnding{feminineplural}{s}{s}
\DeclareAcronym{2d}{
short = 2D,
long = bidimensionnel,
long-feminine=les,
long-feminineplural=less
}
\NewAcroCommand \acpF {m}
{ \acrofeminineplural \UseAcroTemplate {first} {#1} }
\begin{document}
\acp{2d} \acreset{2d} \acpF{2d}
\printacronyms[heading=none]
\end{document}
也许可以构建一个比利用稍微好一点的界面\DeclareAcroEnding
,但这需要大量的样板代码或依赖界面expl3
。
答案2
当您有一个首字母缩略词,其可能采用两种任意不同的形式(无论是短/长/首字母/复数/等等中的一个还是全部)时,偷懒的解决方案是定义两个紧密相连的首字母缩略词。
首字母缩略词的属性uselist
允许使用首字母缩略词2d
,并且2dB
允许2d
将其自身视为已使用,如果2dB
已经使用,即使其本身尚未使用,反之亦然。
\DeclareAcronym{2d}{
short = 2D,
long = bidimensionnel,
uselist = {2dB},
}
\DeclareAcronym{2dB}{
short = 2D,
long = bidimensionnelB,
uselist = {2d},
}
两个缩写词可以有很大差异,也可以很小差异(必要时甚至可以完全不同),并且在文本中不会有共同的首次使用。如果需要,可以扩展到任意数量的缩写词。
不过,像这样组合使用首字母缩略词也存在一些注意事项:
重置使用仍然局限于首字母缩略词,
\acreset{2d}
只会2d
在已使用过的情况下重置,并且2dB
仍会记得它已被使用。\acsetup{single=true}
如果两者都使用但其中一个只使用一次,将会产生意外的行为。由于我们有两个首字母缩略词,因此除非它们的列表形式相同(例如,如果它们共享短/长形式,但复数属性不同),否则将同时列出它们。这可以通过标记其中一个首字母缩略词并使用来
\printacronyms
解决exclude
\printacronyms
\DeclareAcronym{2d}{ short = 2D, long = bidimensionnel, uselist = {2dB}, } \DeclareAcronym{2dB}{ short = 2D, long = bidimensionnelB, uselist = {2d}, tag = {B-form}, } \begin{document} \ac{2d} \ac{2dB} \printacronyms[heading=none,exclude={B-form}] \end{document}
2dB
然而,如果最终仅在文档中使用并\acsetup{list/display=used}
设置,这也会产生意想不到的后果。