Makros, die zu doppelten Punkten am Satzende führen können

Makros, die zu doppelten Punkten am Satzende führen können

Angenommen, in einem Dokument wird häufig eine der Abkürzungen verwendetDoktorarbeit,Ph.D.,DPhilUndD.Phil., und der Konsistenz halber beschließt der Autor, ein \PhDMakro zu definieren und es zu verwenden, wann immer er die Abkürzung braucht. Also greift er eine dieser Definitionen auf:

\def\PhD{PhD}%
\def\PhD{Ph.D.}%
\def\PhD{DPhil}%
\def\PhD{D.Phil.}%

Das Problem ist nun, dass ein Satz wie

Ein „Graduiertenstudent“ ist ein Student, der eine Ausbildung über den Bachelor-Abschluss hinaus anstrebt, beispielsweise einen Master-Abschluss oder einen \PhD.

könnte mit zwei Punkten am Ende gesetzt werden, je nach Definition von \PhD. Wie können wir dieses Problem vermeiden, ohne die Idee aufzugeben, ein \PhDMakro zu verwenden? (Nehmen wir an, dass wir die Makrodefinitionen ändern können.)

Antwort1

Ich weiß nicht, ob das Ihre Absicht war, aber ich versuche es:

\long\def\isnextchar#1#2#3{\def\tmpa{#2}\def\tmpb{#3}%
   \let\tmp=#1\futurelet\next\isnextcharA
}
\def\isnextcharA{\ifx\tmp\next\expandafter\tmpa\else\expandafter\tmpb\fi}

\def\PhD{\isnextchar.{PhD}{Ph.D.}}
\def\PhD{\isnextchar.{PhD}{Ph.D.}}

The \PhD\ inside the sentence is different than \PhD.
gives:
The Ph.D. inside the sentence is different than PhD.

\bye

Antwort2

Punkte sind ein seltsames Biest, da der Leerzeichenfaktor richtig eingestellt sein muss (natürlich, wenn Sie verwenden \nonfrenchspacing).

\catcode`@=11
\def\checkperiod{\futurelet\next\check@period}
\def\check@period{%
  \if\noexpand\next.%
    \spacefactor\sfcode`.
    \expandafter\@gobble
  \fi}
\long\def\@gobble#1{}
\def\@{\spacefactor\@m}
\catcode`@=12

\xspaceskip=4em % just to verify

\def\PhD{PhD\@}

A \PhD{} and another \PhD. End.

\def\PhD{Ph.D.\checkperiod}

A \PhD{} and another \PhD. End.

\def\PhD{DPhil}

A \PhD{} and another \PhD. End.

\def\PhD{D.Phil.\@\checkperiod}

A \PhD{} and another \PhD. End.

\bye

Die Einstellung \xspaceskipdient lediglich dazu, anzuzeigen, dass der Platzfaktor korrekt berechnet wird.

Im Fall „kein Punkt in der Abkürzung“ \@setzt das von LaTeX übernommene Makro den Leerzeichenfaktor auf 1000, so dass ein Punkt nach \PhDder ersten Definition immer noch als Satzende gilt.

Bildbeschreibung hier eingeben

verwandte Informationen