Macros que podem levar a pontos duplos no final da frase

Macros que podem levar a pontos duplos no final da frase

Suponha que um documento faça uso intenso de uma das abreviaturasDoutorado,Ph.D.,DPhileD.Phil., e por uma questão de consistência o autor decide definir uma \PhDmacro e utilizá-la sempre que precisar da abreviatura. Então, eles pegam estas definições:

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

Agora, o problema é que uma frase como

Um "estudante de pós-graduação" é um aluno que busca educação além do bacharelado, como um mestrado ou um diploma de graduação \PhD.

pode ser composto com dois pontos no final, dependendo da definição de \PhD. Como podemos evitar esse problema sem desistir da ideia de usar uma \PhDmacro? (Suponha que possamos alterar as definições de macro.)

Responder1

Não sei se essa era sua intenção ao tentar:

\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

Responder2

Os períodos são uma fera estranha, porque o fator espaço deve ser definido corretamente (é claro, se você usar \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

A configuração de \xspaceskipé apenas para mostrar que o fator de espaço foi calculado corretamente.

No caso de “sem ponto final na abreviação”, a macro \@emprestada do LaTeX define o fator de espaço para 1000, portanto, um ponto final após \PhDa primeira definição ainda será considerado final de frase.

insira a descrição da imagem aqui

informação relacionada