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 \PhD
macro 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 \PhD
macro? (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 \xspaceskip
es 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 \PhD
de la primera definición seguirá considerándose el final de la oración.