我创建了一个打印辅助文件中材料的命令,仅此而已。我可以合理地预期它(也)可以以以下方式使用:
\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
,如果匹配就吞噬它,否则不执行任何操作。