有没有办法让命令忽略其使用前的任何空格和换行符?
例如,代码
\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}