如何吃掉/吞噬仅空格或(隐式) \par?

如何吃掉/吞噬仅空格或(隐式) \par?

我创建了一个打印辅助文件中材料的命令,仅此而已。我可以合理地预期它(也)可以以以下方式使用:

\precis{Some text}
The section goes on.

\precis{Some text}

The section goes on.

也就是说,无论%行尾是否有符号,都会自动处理任何虚假空格。

为了删除尾随空格,命令定义如下:

\newcommand{\precis}[1]{%
    % Whatever the command does
    \ignorespaces%
}

但是,正如我的第二个例子所示,仍然有“虚假”的情况\par,我不知道该如何处理。

我曾尝试使用\@gobble,但实际上这只在下一个字符是空格或空白行时才有效,并且如果%使用-符号,它会中断(IE它会吞掉句子的首字母)。

因此,我希望能够只吞噬空格和隐式的par。这可能吗?

(我正在处理一个包裹,因此试图做到万无一失……我可以%自己使用这些标志。)

答案1

您可以使用字体分段命令来完成此操作:

\documentclass{article}

\usepackage{lipsum}

\makeatletter
\newcommand\precis{%
  \@startsection{precis}{1000}
    {\z@}% Left indentation
    {\z@}% Space above
    {-\fontdimen2\font plus -\fontdimen3\font minus -\fontdimen4\font}% space after label
    {\normalfont\normalsize\bfseries}% font for
}
\newcommand\precismark[1]{}
\makeatother

\begin{document}

\lipsum[2]

\precis{Some text}
The section goes on.

\precis{Some text}

The section goes on.

\precis{Some text}


The section goes on.

\lipsum[3]

\end{document}

在此处输入图片描述

或者,用来\@ifnextchar吞噬白色空间并检查是否\par如下;在这种情况下,吞噬它并重新启动机器。

\documentclass{article}

\usepackage{lipsum}

\makeatletter
\newcommand{\precis}[1]{%
  \par\noindent\textbf{#1}\space
  \@ifnextchar\par{\precis@gobblepar}{}%
}
\newcommand{\precis@gobblepar}[1]{%
  \@ifnextchar\par{\precis@gobblepar}{}%
}
\makeatother

\begin{document}

\lipsum[2]

\precis{Some text}
The section goes on.

\precis{Some text}

The section goes on.

\precis{Some text}


The section goes on.

\lipsum[3]

\end{document}

答案2

如前所述,通过基于 LaTeX 现有的分段机制,您可以更优雅地实现您想要做的事情。但是,如果您想要一个问题的实际答案,那么这里就是:

\makeatletter
\def\precis#1{
  % Whatever the command does
  \@ifnextchar\par\@gobble\relax}
\makeatother

请注意,\@ifnextchar已经占用了空格,因此您只需将下一个字符与进行比较\par,如果匹配就吞噬它,否则不执行任何操作。

相关内容