Der Titel der Frage sagt eigentlich alles. Hin und wieder sieht man Leute, die \newcommand* verwenden, und dann wieder \newcommand. Worin liegt der Unterschied?
\newcommand ist eine clevere Hülle für \def, die es auf einfache Weise erlaubt, z.B. ein optional Argument zu definieren, und unter anderem testet, ob eine Anweisung bereits existiert, was \def bekanntlich nicht macht. Da nun die allermeisten Befehle als Argument nicht mehrere Absätze erhalten, ist das Standardverhalten von \def, dass seine Argumente das Token \par nicht enthalten dürfen (oder, was gleichwertig ist, das Ende einer Zeile gefolgt von einer leeren Zeile). Das praktische daran ist, dass man, falls man das schließende } vergessen hat, schon beim nächsten Absatzende eine Fehlermeldung erhält anstatt erst am Ende des Dokuments. Wenn man nun mit \def ein Makro definieren möchte, das mehrere Absätze als Argument erhalten kann, muss man das explizit machen, indem man \def ein \long voranstellt:
Code, hier editierbar zum Übersetzen:
1
2
\def\foo#1{<#1 darf kein \par enthalten>} % kurz
\long\def\bar#1{<hier kommt was mit #1, das jetzt \par enthalten darf>} % lang
Was hat das ganze mit \newcommand und der Frage zu tun? Nun, Leslie Lamport entschied aus Gründen, die mir unbekannt sind, dass Makros die mit \newcommand definiert werden, als Voreinstellung lang sind, also \long\def entsprechen, so dass ihre Argumente \par enthalten dürfen. Möchte man das nicht, sondern lieber die Fehlermeldungen haben, die kurze Makros liefern, so muss man \newcommand* verwenden.
Code, hier editierbar zum Übersetzen:
1
2
\newcommand\bar[1]{<#1 darf \par enthalten>} % lang
\newcommand*\foo[1]{<#1 darf kein \par enthalten>} % kurz
In den vielen Fällen wird \newcommand* daher bevorzugt eingesetzt.
Das LaTeX3-Paket xparse, das mit \NewDocumentCommand und Freunden sehr flexible Befehle zur Definition eingener Makros liefert, hat das Verhalten übrigens wieder umgedreht:
Code, hier editierbar zum Übersetzen:
1
2
\NewDocumentCommand\bar{m}{<#1 darf kein \par enthalten>} % kurz
\NewDocumentCommand\foo{+m}{<#1 darf \par enthalten>} % lang