检查姓名的最后一个字母是否是 s 或 x 或者既不是也不是

检查姓名的最后一个字母是否是 s 或 x 或者既不是也不是

在德语中,我们有一个使用撇号的规则(经常被忽视)。

在英语中它是这样的:

"This is Mike's chair."

在德语中,这取决于名字的结尾。例如:

"Das ist Mikes Stuhl."(附加字母 s)

但是:如果名称以 s 或发音类似 s 的字母(如 x)结尾,而不是附加撇号:

"Das ist Alex' Stuhl" or
"Das ist Andreas' Messer."

如果我想为一个班级写一个故事,我想用学生的名字,但名字多年来一直在变化,我会保留这个故事,只在序言中改变名字。所以我必须创建类似的东西:

\newcommand\studentsname{Mike}

所以我可以在故事中使用

"So this is \studentsname"

但是我还需要一个像 \studentsnamesuffix 这样的命令,而且我不知道如何检查 \studentsname 的最后一个字母是否相同。

\newcommand\studentsnamesuffix{
 %if \studentsname last letter is s or x
 '
 %else
 s 
  }

有人知道如何解决这个问题吗?

最小不起作用的示例:

\documentclass{article}
\newcommand\studentsname{Mike}
\newcommand\studentsnamesuffix{
 if % check if \studentsname last letter is s
 '
 else
 s 
  }

\begin{document}

"\studentsname du bist spät dran!" ... long long story ...

"Nimm die Finger weg, das ist \studentsname\studentsnamesuffix."

\end{document}

答案1

如果您在为名称定义宏时说明要添加什么后缀,则会更容易;如果名称以需要撇号的字母结尾,则使用\newname*来定义宏,否则使用\newname

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}

\makeatletter
\newif\if@apostrophe
\newcommand{\gen}{\if@apostrophe'\else s\fi}
\newcommand{\newname}{\@ifstar{\@snewname}{\@newname}}
\newcommand{\@snewname}[2]{\newcommand#1{\@apostrophetrue#2}}
\newcommand{\@newname}[2]{\newcommand#1{\@apostrophefalse#2}}
\makeatother

\newname{\studentA}{Mike}
\newname*{\studentB}{Alex}


\begin{document}

"`\studentA{} du bist spät dran!"' ... long long story ...

"`Nimm die Finger weg, das ist \studentA\gen."'

"`\studentB{} du bist spät dran!"' ... long long story ...

"`Nimm die Finger weg, das ist \studentB\gen."'

\studentA\gen

\end{document}

在此处输入图片描述

相关内容