如何使用空格作为 \def 参数的分隔符

如何使用空格作为 \def 参数的分隔符

假设有一行包含一些单个字母,如 A、b、C 等,并且字母之间仅由一个空格分隔,其 ASCII 码为 32,例如,

D B g A

我想要 \def 参数的内容,例如,

\def\mydef#1 #2 #3 #4{\textbf{#1}\textit{#2}\textsc{#3}\textsl{#4}}

\mydef{D B g A}

输出粗体 D、斜体 B、小写字母 g 和倾斜 A。其他情况则输出警告信息。注意:\r\n(ASCII 代码 13)或 \n(ASCII 代码 10)被视为 \mydef 的结尾。

答案1

\documentclass{article}
\def\mydef#1 #2 #3 #4{\textbf{#1}\textit{#2}\textsc{#3}\textsl{#4}}
\def\myDef#1{\expandafter\myDefi#1}
\def\myDefi#1 #2 #3 #4{\textbf{#1}\textit{#2}\textsc{#3}\textsl{#4}}
\begin{document}
\mydef A B C D foo

\myDef{A B C D} foo
\end{document}

答案2

\mydef{D B g A}{D B g A}由于 ,所以将其作为第一个参数读取{ }。然后它会查找#2 #3 #4后面的部分,如果没有这样的输入,则会引发错误。您需要直接写入\mydef D B G A或使用第二个宏,例如 内部的宏\mydef,后者更常用。

\def\mydef#1{\mydefb#1}
\def\mydefb#1 #2 #3 #4{\textbf{#1}\textit{#2}\textsc{#3}\textsl{#4}}

您可能需要添加一个尾随空格以确保 的所有输入\mydef都由 处理\mydefb,否则,如果最后一部分超过一个字母,则其余部分仅在 之后排版\mydefb

\def\mydef#1{\mydefb#1 }
\def\mydefb#1 #2 #3 #4 {\textbf{#1}\textit{#2}\textsc{#3}\textsl{#4}}

相关内容