测试字符串中 (@) 处的商业广告

测试字符串中 (@) 处的商业广告

可能重复:
更改宏中 (@) 处的商业 catcode 以使其与模式匹配。

我想测试一个字符串是否包含@符号。我想出了以下代码:

\makeatletter
\def\@testat#1@#2\@nil{%
  \def\@cdr{#2}
  \ifx\@cdr\@empty #1#2: does not have at\else #1#2: has at\fi}
\def\hasat#1{\@testat#1@\@nil}
\makeatother

如果文档是这样写的\makeatletter,那么现在就可以正常工作:

\makeatletter
\newcommand\test[1]{#1}
\test{\hasat{linear@ set@}}
\hasat{linear@ set@}
\hasat{linear set}

一切正常。但如果没有\makeatletter,这将失败。如果我定义:

\def\@hasat#1{\@testat#1@\@nil\makeatother}
\def\hasat{\makeatletter\@hasat}

那么只有由于某种原因\hasat而无法正常工作。\test

欢迎任何帮助!

答案1

您可以使用以下包检测给定的字符串是否包含字符xstring

代码:

\documentclass{article}
\usepackage{xstring}

\newcommand*{\HasAt}[3]{%
    \StrPosition{#1}{@}[\Position]
    #1 \IfEq{\Position}{0}{#3}{#2}%
}

\begin{document}

\HasAt{[email protected]}{does}{does not} contains the @ symbol.

\HasAt{ancdfoo.bar}{does}{does not} contains the @ symbol.

\end{document}

相关内容