如何在宏定义中使用 halign?

如何在宏定义中使用 halign?

我尝试过这个:

\def\Anschrift#1#2#3#4#5#6{\vbox to27.3mm{
  \rmx\baselineskip=13pt
  \vfill
  \halign to8cm{#\hfil\cr
    #1\cr
    #2\cr
    #3\cr
    #4\cr
    #5\cr
    #6\cr}%
  \vfill
  \vss}\nointerlineskip
\vskip8.46mm}

\Anschrift{1}{2}{3}{4}{5}{6}

\bye

但我收到了错误:

! Illegal parameter number in definition of \Anschrift.

我怎样才能逃脱#

答案1

您只需将其加倍即可在宏定义中#得到单个值。#

因此,对于您的示例,请使用以下命令:

\def\Anschrift#1#2#3#4#5#6{\vbox to27.3mm{
  \baselineskip=13pt
  \vfill
  \halign to8cm{##\hfil\cr
    #1\cr
    #2\cr
    #3\cr
    #4\cr
    #5\cr
    #6\cr}%
  \vfill
  \vss}\nointerlineskip
\vskip8.46mm}

\Anschrift{1}{2}{3}{4}{5}{6}

\bye

(我\rmx从定义中删除了,因为你没有在 MWE 中包含它的定义,而且我很懒)

答案2

##正如其他地方所说,您需要#在中使用\halign

但是你的代码有点奇怪:

您不需要,\halign to 8cm因为 8cm 尺寸不可见,因为您创建了一个\vbox应该在垂直模式下使用的(因为跟\nointerlineskip在后面的\vbox不能在水平模式下使用)。

\halign to 8cm如果仅用替换\halign(没有宽度规范),则不会发生任何可见的变化,只会删除有关对齐时 \hbox 未满的警告。

\halign此外,您根本不需要,因为您的\halign设置只包含单个左对齐列,这可以通过其中的段落来完成\hfil\break

\def\Anschrift#1#2#3#4#5#6{\vbox to27.3mm{
  \baselineskip=13pt
  \vfill
  \def\\{\hfil\break}
    \noindent #1\\
    #2\\
    #3\\
    #4\\
    #5\\
    #6
  \vfill
  \vss}\nointerlineskip
\vskip8.46mm}

相关内容