执行 TeX 命令 st (1)会产生空框(2),并且没有其他输出

执行 TeX 命令 st (1)会产生空框(2),并且没有其他输出

编辑:

我需要纯 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

结果

相关内容