Ein Ansatz mit `l3keys`.
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\tl_new:N \l_feynman_anrede_tl
\tl_new:N \l_feynman_vorname_tl
\tl_new:N \l_feynman_nachname_tl
\keys_define:nn { feynman }
{
anrede .tl_set:N = \l_feynman_anrede_tl,
anrede .default:n = {Herr},
vorname .tl_set:N = \l_feynman_vorname_tl,
vorname .default:n = {},
nachname .tl_set:N = \l_feynman_nachname_tl
= \l_feynman_nachname_tl,
nachname .default:n = {}
}
\cs_new:Npn \feynman_name:n #1 {
\keys_set:nn { feynman } { anrede, vorname, nachname, #1 }
\tl_if_empty:NT \l_feynman_vorname_tl { \msg_error:nn { feynman } {vorname ~ fehlt } }
\tl_if_empty:NT \l_feynman_nachname_tl { \msg_error:nn { feynman } {nachname ~ fehlt } }
\textbf{\l_feynman_anrede_tl}~\textsc{\l_feynman_vorname_tl}~\textit{\l_feynman_nachname_tl}
}
\NewDocumentCommand\name{ m }{
\feynman_name:n { #1 }
}
\ExplSyntaxOff
\begin{document}
\name{anrede=Herr,nachname=Mustermann,vorname=Max}
\name{nachname=Mustermann,vorname=Max}
\name{anrede=Herr,vorname=John,nachname=Doe}
\end{document}