Macros que pueden dar lugar a puntos dobles al final de la frase

Macros que pueden dar lugar a puntos dobles al final de la frase

Supongamos que un documento hace un uso intensivo de una de las abreviaturasDoctor,Doctor.,doctoradoyDoctor en Filosofía., y en aras de la coherencia, el autor decide definir una \PhDmacro y usarla siempre que necesite la abreviatura. Entonces, retoman una de estas definiciones:

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

Ahora, el problema es que una frase como

Un "estudiante de posgrado" es un estudiante que cursa estudios posteriores a la licenciatura, como una maestría o un título \PhD.

podría componerse con dos puntos al final dependiendo de la definición de \PhD. ¿Cómo podemos evitar este problema sin renunciar a la idea de utilizar una \PhDmacro? (Supongamos que podemos cambiar las definiciones de macro).

Respuesta1

No sé si esta era tu intención, lo intento:

\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

Respuesta2

Los puntos son una bestia extraña, porque el factor de espacio debe configurarse correctamente (por supuesto, si usas \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

La configuración de \xspaceskipes solo para mostrar que el factor de espacio se calcula correctamente.

En el caso de "sin punto en la abreviatura", la macro \@tomada de LaTeX establece el factor de espacio en 1000, por lo que un punto después \PhDde la primera definición seguirá considerándose el final de la oración.

ingrese la descripción de la imagen aquí

información relacionada