所以出现以下问题:
如果有这样定义的命令: ,当我想要编译时,它就会这样做。\newcommand{\a}{Michael \par [email protected] \par 01234556}
\a
但是,如果有这样定义的命令:
\newcommand{\b}{Michael}
当我想要编译时\b
,应该写:
Michael
???
???
或者一些像“???”这样的填充物,它应该填充 2 个额外的行。我该怎么做?
答案1
我已经以一种更复杂的方式解释了 OP 的问题,表面上看,似乎可以通过 来满足\newcommand\b{michael\par???\par???\par}
。相反,我怀疑 OP 真正想要的是一个宏,他可以将 3 部分或 1 部分数据作为参数的一部分传递给该宏,并将第 2 部分和第 3 部分设为默认值。
注意\a
已经预定义,所以不要使用它。此外,您不需要两个单独的宏,只需查看已作为参数传递的内容,并采取相应措施。
正如我所设置的,如果参数中缺少第 2 或第 3 个子数据,???
则会输出 a 来代替。
\documentclass{article}
\newcommand\mya[1]{\myaaux#1\par\par\par\relax}
\long\def\myaaux#1\par#2\par#3\par#4\relax{#1\par\medskip%
\ifx\relax#2\relax???\else#2\fi\par%
\ifx\relax#3\relax???\else#3\fi\par%
}
\begin{document}
\mya{Michael \par [email protected] \par 01234556}
\textit{versus}
\mya{Michael}
\end{document}
这是 OP 可能真正想要的另一种解释。\mya
现在将宏定义为接受参数,\AAA
或者\BBB
可以接受宏形式,并尝试将其解析为多\par
结构。
\documentclass{article}
\newcommand\mya[1]{\expandafter\myaaux#1\par\par\par\relax}
\long\def\myaaux#1\par#2\par#3\par#4\relax{#1\par\medskip%
\ifx\relax#2\relax???\else#2\fi\par%
\ifx\relax#3\relax???\else#3\fi\par%
}
\begin{document}
\newcommand\AAA{Michael \par [email protected] \par 01234556}
\newcommand\BBB{Michael}
\mya{\AAA}
\textit{versus}
\mya{\BBB}
\end{document}