如何检查宏后面是否可以跟换行符

如何检查宏后面是否可以跟换行符

我正在尝试创建一个类,允许您使用以下方式定义名称

\name{Whatever}

这定义为

\newcommand{\name}[1]{\def\gsy@name{#1}}

传递给此处的任何内容都将在标题中使用,并且后面还会跟着\\ 更多内容:

\rhead{\gsy@name\\More stuff on the next line}

不幸的是,如果有人传递空字符或者一个空格,整个过程就会中断\name

\name{   }

这导致\\尝试结束一个空白行,并且整个过程拒绝编译。

有什么方法可以检测是否有无法跟踪的内容\\传递给我的宏?

答案1

使用\notblank{\gsy@name}{stuff with \\}{empty or other stuff}of应该可以工作。它\expandafter测试\gsy@name第一个参数是否为空(空白/空格/空白)。

请不要fancyhdr抱怨\headheight价值

\documentclass{article}
\usepackage{fancyhdr}
\usepackage{etoolbox}
\makeatletter
\newcommand{\name}[1]{\def\gsy@name{#1}}
\rhead{\expandafter\notblank\expandafter{\gsy@name}{\gsy@name\\More stuff on the next line}{}}

\makeatother
%\name{Stuff }
\name{}

\pagestyle{fancy}
\begin{document}
Foo

\end{document}

相关内容