假设有一行包含一些单个字母,如 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}}