编辑:
我需要纯 TeX,而不是 LaTeX。
此外,我不想使用现有的包——我想重新发明轮子。[这是我设置的一组复杂的 TeX 宏的一部分;我需要知道如何实现它才能实现更复杂的事情。]
原始问题:
我的目标是:我想定义一个神奇的命令
\def\magic#1...
例如:
\magic{foo bar magic foo}
将执行以下操作:
执行foo bar magic foo
,但它不会生成实际的文本,而只会生成一个与具有相同宽度/高度的空框foo bar magic foo
。
动机:
编写一个测验,并希望能够以以下形式编写:
\Question{ .... }
\Answer{ .... }
然后,在 中[answer mode]
排版问题和答案。在 中,[question mode]
编写问题部分;执行答案部分——并创建并放置相等数量的间距。
答案1
\phantom{argument}
为 留下必要的空间argument
。您可以将其与\ifanswer
模式标志相结合以获得所需的行为。与 Alan Munn 一样,我建议查看排版练习包,尤其是exam
。
答案2
正如 Christian Lindig 已经发布的那样,\phantom
这是可行的方法。它由 LaTeX 和 plainTeX 定义。
它的工作原理是将参数装箱,然后测量其尺寸。在盒子寄存器中创建第二个空盒子,并将其尺寸明确设置为第一个盒子的尺寸。然后排版空盒子并丢弃另一个盒子。
为了演示这一点,我编写了一个简单的实现。原始版本还处理数学模式。您还可以创建一个类似的宏,插入一行而不是空格。
\def\phantom#1{%
\begingroup
\setbox0\hbox{#1}%
\setbox1\hbox{}%
\ht1=\ht0
\dp1=\dp0
\wd1=\wd0
\box1
\endgroup
}
\def\phantomrule#1{%
\begingroup
\setbox0\hbox{#1}%
\setbox1\hbox to \wd0{\hrulefill}%
\ht1=\ht0
\dp1=\dp0
\box1
\endgroup
}
Hello world! How are you?
Hello \phantom{world}! How \phantom{are} you?
Hello \phantomrule{world}! How \phantomrule{are} you?
\bye