Техническая задача! Мы можем избежать проблемы букв после пробелов, посмотрев на код следующего символа и увидев, является ли это буквой; это можно сделать с помощью макроса expl3 в Latex3 \peek_charcode:NTF
(мой первый код expl3!):
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\newcommand\latinabbrev[1]{
\peek_meaning:NTF . {% Same as \@ifnextchar
#1\@}%
{ \peek_catcode:NTF a {% Check whether next char has same catcode as \'a, i.e., is a letter
#1.\@ }%
{#1.\@}}}
\ExplSyntaxOff
%Omit final dot from each def.
\def\eg{\latinabbrev{e.g}}
\def\etal{\latinabbrev{et al}}
\def\etc{\latinabbrev{etc}}
\def\ie{\latinabbrev{i.e}}
\begin{document}
Maybe a list, \eg, a, b, c, and d. Which is to say (\ie) a, b, \etc. Consider Knuth, \cf The TeXbook.
\end{document}
Совет Юкки, я думаю, звучит здраво: я бы сказал, что проблема будет работать с его макросом \ etc, который мы должны увидеть как ошибку в реализации двойного интервала в Tex (Уилл Робертсон должен попросить его проверить): если вы Если вы знаете, что ошибка есть, вы можете обойти ее напрямую, вставив \ @ в таких случаях, как ".)", или у вас может быть хитрый код, который означает, что вам не нужно думать в этом случае, но вы добавили сложность способ, которым вы набираете, который не будет работать для вас со следующим неожиданным сбоем, который вы, вероятно, представили себе.
Postscript Предыдущая версия исправлена, благодаря Джозеф Райт заметил глупую ошибку на tex.stackexchange.com.