相关问题可以看这里。我希望 \mydef 行为是
\mydef{a b c d}
获得正确的出口,但
\mydef{a b
c d}
或者
\mydef{a b c d
}
得到错误的导出(如警告消息)。
答案1
如果我正确理解了您的问题,以下内容将按照您的要求进行操作,它会在编译时引发错误:
\documentclass{article}
\def\mydef{\catcode13=15\relax\mydefi}
\def\mydefi#1{\catcode13=5\relax\mydefii#1}
\def\mydefii#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}
%% \mydef{a b
%% c d}
%% or
\mydef{a b c d
}
\end{document}
注释掉的行也会引起错误。如果你只是想要某种警告,可以使用以下命令:
\documentclass{article}
\newif\ifwarn
\makeatletter
\def\mydef{\catcode13=\active\begingroup\lccode`\~=13\relax
\lowercase{\endgroup\let~\stop}\mydefi}
\def\myparse #1{\ifnot@nil{#1}{\ifx #1\stop\warntrue\fi\myparse}}
\def\mydefi#1{\catcode13=5\myparse #1\@nil
\ifwarn ERROR IN TEX SOURCE\warnfalse\else\mydefii#1\fi}
\def\mydefii#1 #2 #3 #4{%
\textbf{#1}\textit{#2}\textsc{#3}\textsl{#4}}
\makeatother
\begin{document}
\mydef{A B C D} foo
\mydef{a b
c d}
\mydef{a b c d}
\mydef{a b
c d}
\mydef{a b
c
d}
\mydef{A B C D} foo
\mydef{a b c d
}
\end{document}
答案2
\documentclass{article}
\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}
\mydef{a b
c d}
or
\mydef{a b c d
}
\end{document}