输入 ie、eg 和 etc 的首选方式。

输入 ie、eg 和 etc 的首选方式。

这个问题已经被问过好几次了,特别是这里。然而,大多数解决方案都涉及到包裹xspace,据我所知,应该避免这种包裹。

我目前使用以下定义:

\newcommand{\ie}{\emph{i.e.}\@ifnextchar.{\!\@gobble}{}}
\newcommand{\eg}{\emph{e.g.}\@ifnextchar.{\!\@gobble}{}}
\newcommand{\etc}{etc\@ifnextchar.{}{.\@}}

产生的结果如下:

在此处输入图片描述

但是,由于我不熟悉所涉及的 TeX 宏,我不确定间距是否始终正确。此外,后间距似乎会随着使用的不同字体而变化(例如,使用 Palatino Linotype 作为主要字体时,后间距似乎i.e.更大,我必须更改\!\!\!)。这些定义的主要缺点是,如果在其后\ie没有简单的定义.,则会产生很大的空白。

由于这似乎是一个非常基本的问题,我认为应该有一些非常成熟的解决方案。是否有现有的包或现有的一组宏可以完美地做到这一点?

下面是 MWE。

\documentclass{article}

\usepackage{newpxtext}

\makeatletter
\newcommand{\ie}{\emph{i.e.}\@ifnextchar.{\!\@gobble}{}}
\newcommand{\eg}{\emph{e.g.}\@ifnextchar.{\!\@gobble}{}}
\newcommand{\etc}{etc\@ifnextchar.{}{.\@}}
\makeatother

\begin{document}

Some text, \ie. some explanations.

Some text, \ie, some explanations.

Some text, \eg. some examples.

Some text, \eg, some examples.

Some text, \etc. Here is another sentence.

Some text, \etc, continuing.

\end{document}

答案1

仅供参考,以下是一些用 定义的命令expl3。它们后面可以跟一个点.、一个逗号,或一个空组{}

如果你的i.e.后面总是跟着一个逗号,那么以下定义的行为与 David Carlisle 在对该问题的评论中所指出的相同\newcommand\ie{\textit{i.e.}};在其他情况下,以下版本的行为应该会更好一些。

\documentclass{article}

\usepackage{newpxtext}

\ExplSyntaxOn

\NewDocumentCommand { \ie } { }
  {
    \textit{i.e.}
    \peek_meaning_ignore_spaces:NTF .
      { \skip_horizontal:n { -.3ex } \use_none:n }
      {
        \peek_meaning_ignore_spaces:NF ,
          { \skip_horizontal:n { -.3ex } }
      }
  }
\NewDocumentCommand { \eg } { }
  {
    \textit{e.g.}
    \peek_meaning_ignore_spaces:NTF .
      { \skip_horizontal:n { -.3ex } \use_none:n }
      {
        \peek_meaning_ignore_spaces:NF ,
          { \skip_horizontal:n { -.3ex } }
      }
  }

\NewDocumentCommand { \etc } { }
  {
    etc.
    \peek_meaning_ignore_spaces:NT .
      { \use_none:n }
  }

\NewDocumentCommand { \cad } { }
  {
    \textit{c-à-d.}
    \peek_meaning_ignore_spaces:NTF .
      { \skip_horizontal:n { -.3ex } \use_none:n }
      {
        \peek_meaning_ignore_spaces:NF ,
          { \skip_horizontal:n { -.3ex } }
      }
  }
\ExplSyntaxOff

\begin{document}

Some text, \ie. some explanations.

Some text, \ie{} some explanations.

Some text, \ie, some explanations.

---

Some text, \eg{} some examples.

Some text, \eg. some examples.

Some text, \eg, some examples.

---

Some text, \etc. Here is another sentence.

Some text, \etc, continuing.

Some text, \etc{} continuing.

Some text, etc. Here is another sentence.

Some text, etc., continuing.

---

Quelques textes, \cad, quelques explications.

Quelques textes, \cad. quelques explications.

Quelques textes, \cad{} quelques explications.


\end{document}

在此处输入图片描述

相关内容