Я пишу документ на французском языке и мне нужно разобраться с формами рода слов в 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}
установлено.