可以创建一个由两部分组成的间距命令吗?

可以创建一个由两部分组成的间距命令吗?

我想创建一个由两部分组成的间距命令。具体来说,我想要两个命令:\mySpaceOne\mySpaceTwo。如果\mySpaceOne后面跟着一个\mySpaceTwo,那么它会产生一定量的空间;否则,它什么也不做,也不会消耗下一个标记。

这可能吗?如何开始创建这样的命令?

答案1

\makeatletter
\newcommand\mySpaceOne{\@ifnextchar\mySpaceTwo{\hspace{1em}}{}}
\makeatother

然而这将消耗掉所有空间标记。

答案2

与 egreg 的答案类似,但使用 TeX 原语\futurelet

\documentclass{article}
\begin{document}
\def\myspacetwo{}
\def\myspaceone{%
 \futurelet\ifoptions
    \choosemacro
}

\def\choiceone{\rule{20pt}{20pt}}
\def\choicetwo{}
\def\choosemacro{%
 \ifx\ifoptions\myspacetwo%
     \let\choice = \choiceone 
 \else
    \let\choice = \choicetwo
 \fi
\choice
}
\myspaceone\myspacetwo 
\myspaceone
\end{document}

A\futurelet通常需要三个标记:

     \futurelet\tokena\tokenb\tokenc

TeX 执行生成一个以名称存储的let\tokena=\tokenc副本。\tokenc\tokena

然后它\tokena从主标记列表中删除。接下来 TeX 会扩展\tokenb

从实际目的来看,此标记是具有以下属性的宏:

  1. 宏将使用\tokena( 的副本\tokenc)来找出\tokenc是什么,换句话说,稍后会预期什么标记。
  2. 然后它会导致另一个宏被扩展,并最终吸收\tokenc

相关内容