在英语中,属格后缀’s
的形状从不改变。例如,在 或’s
表达式中,属格后缀的形状不变。然而,在土耳其语中,属格后缀的形状会改变,其中是一个变量,取决于添加属格后缀的单词的最后一个字母,而是另一个变量,取决于添加属格后缀的单词的最后一个音节中的元音。Alice’s bicycle
Frank’s bicycle
’{n}{i}n
{n}
{i}
这里有些例子:
Ezgi'{n}{i}n -> Ezgi'nin [Ezgi's]
Sıtkı'{n}{i}n -> Sıtkı'nın [Sıtkı's]
Utku'{n}{i}n -> Utku'nun [Utku's]
Hüsnü'{n}{i}n -> Hüsnü'nün [Hüsnü's]
Nefel'{n}{i}n -> Nefel'in [Nefel's]
Anıl'{n}{i}n -> Anıl'ın [Anıl's]
Ufuk'{n}{i}n -> Ufuk'un [Ufuk's]
Gönül'{n}{i}n -> Gönül'ün [Gönül 的]
想象一个\trgenitive
命令附加到 TURKISHWORD 上,就像这样TURKISHWORD\trgenitive
,并且打印TURKISKWORD’{n}{i}n
,例如:
- 如果 TURKISHWORD 的最后一个字母是辅音,则 {n} 为空
- 如果 TURKISHWORD 的最后一个字母是元音,则 {n} 为 n
- 如果 TURKISHWORD 的最后一个元音是 i 或 e,则 {i} 是 i
- 如果 TURKISHWORD 的最后一个元音是 ı,那么 {i} 就是 ı
- 如果 TURKISHWORD 的最后一个元音是 u,那么 {i} 就是 u
- 如果 TURKISHWORD 的最后一个元音是 ü 或 ö,则 {i} 是 ü。
是否可以定义这样的\trgenitive
命令?
答案1
您或许可以使用 LuaTeX 实现建议的后缀语法。
无论是使用 XeLaTeX 还是 LuaLaTeX,以下前缀语法都有效:
\documentclass{article}
\usepackage{xparse}
\usepackage{fontspec}
\ExplSyntaxOn
\NewDocumentCommand{\trgen}{m}
{
#1' \kutt_trgen:n { #1 }
}
\prg_generate_conditional_variant:Nnn \tl_if_in:nn { ne } { T,F,TF }
\tl_new:N \l__kutt_trgen_word_tl
\cs_new_protected:Nn \kutt_trgen:n
{
\tl_if_in:neT {aeıioöuü} { \tl_item:nn { #1 } { -1 } } { n }
\__kutt_trgen_vowel:n { #1 } n
}
\cs_new_protected:Nn \__kutt_trgen_vowel:n
{
\tl_set:Nn \l__kutt_trgen_word_tl { #1 }
\regex_replace_all:nnN { [^aeıioöuü] } { } \l__kutt_trgen_word_tl
\str_case_e:nn { \tl_item:Nn \l__kutt_trgen_word_tl { -1 } }
{
{i}{i}
{e}{i}
{a}{ı}
{ı}{ı}
{u}{u}
{ö}{ü}
{ü}{ü}
}
}
\ExplSyntaxOff
\begin{document}
\trgen{Ezgi}\par
\trgen{Sıtkı}\par
\trgen{Utku}\par
\trgen{Hüsnü}\par
\trgen{Nefel}\par
\trgen{Anıl}\par
\trgen{Ufuk}\par
\trgen{Gönül}\par
\end{document}
其思路是先检查参数中的最后一个字母是否是元音;在单词和撇号之后,打印一个“n”,否则不打印任何内容。然后删除单词中的辅音,并对最后一个剩余项(元音)应用大小写切换。