定义一个忽略所有前面空格的命令

定义一个忽略所有前面空格的命令

有没有办法让命令忽略其使用前的任何空格和换行符?

例如,代码

\documentclass{article}

\newcommand{\foo}{foo}

\begin{document}
% Case 1
Lorem ipsum dolor sit amet. \foo

% Case 2
Lorem ipsum dolor sit amet.\foo

% Case 3
Lorem ipsum dolor sit amet.
\foo

% Case 4
Lorem ipsum dolor sit amet.

\foo
\end{document}

产生以下内容:

Lorem ipsum dolor sit amet. foo
Lorem ipsum dolor sit amet.foo
Lorem ipsum dolori sit amet. foo
Lorem ipsum dolor sit amet.
foo

有没有办法定义\foo以便它总是产生第二行并且示例代码给出以下内容?

Lorem ipsum dolor sit amet.foo
Lorem ipsum dolor sit amet.foo
Lorem ipsum dolor sit amet.foo
Lorem ipsum dolor sit amet.foo

答案1

瞧!

已编辑,删除了\makeatletter启用的代码\tcpeek,该代码现已纳入tokcycle[2021-05-27]

逻辑很简单:如果在环境输入流\par中遇到空格或 a ,它会调用(在将空格或添加到输出流之前)。反过来,查看(即s)输入流中的下一个标记。如果是或,它会丢弃前一个空格或。\dofoo\foocheck\par\foocheck\futurelet\foo\par\par

\documentclass{article}
\usepackage{tokcycle}
\def\foo{foo}
\newcommand\foocheck[1]{\tcpeek\z\ifx\foo\z\else
  \ifx\par\z\else\addcytoks{#1}\fi\fi}
\tokcycleenvironment\dofoo
  {\addcytoks{##1}}
  {\processtoks{##1}}
  {\ifx\par##1\foocheck{##1}\else\addcytoks{##1}\fi}
  {\foocheck{##1}}
\begin{document}
\dofoo
% Case 1
Lorem ipsum dolor sit amet. \foo 

% Case 2
Lorem ipsum dolor sit amet.\foo 

% Case 3
Lorem ipsum dolor sit amet.
\foo 

% Case 4
Lorem ipsum dolor sit amet.

\foo 
\enddofoo
\end{document}

在此处输入图片描述

相关内容