如何检查命令/变量是否包含 \par?

如何检查命令/变量是否包含 \par?

所以出现以下问题:

如果有这样定义的命令: ,当我想要编译时,它就会这样做。\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}

相关内容