在德语中,我们有一个使用撇号的规则(经常被忽视)。
在英语中它是这样的:
"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}