我怎样才能扩展一个单词?没有反斜杠的命令?

我怎样才能扩展一个单词?没有反斜杠的命令?

在我的源代码中我希望Snap!自动替换为Snap\textit{!}

\newcommand{Snap!}{Snap\textit{!}}

出现“缺失数字,视为零”的错误

答案1

我同意这样的评论:最好在编辑器中处理这个问题,而不是在 LaTeX 中。但本着提供 LaTeX 答案的精神...

纯净listofitems

这里,宏将检查其参数,并用\snap替换。但是,与下面显示的方法不同,此版本不会在参数内部找到出现的情况,例如。Snap!Snap\textit{!}tokcycleSnap!\textbf{blah Snap! blah}

\documentclass{article}
\usepackage{tokcycle,listofitems,xcolor}
\setsepchar{Snap!}
\newcommand\snap[1]{%
  \readlist\mysnaps{#1}%
  \foreachitem\z\in\mysnaps[]{%
    \ifnum\zcnt=1\else Snap\textit{!}\fi
    \z
  }%
}
\begin{document}
\snap{%
There is Snap! and other Snap  and snappy *Snap!* words!
}
\end{document}

在此处输入图片描述

tokcycle版本

如果您可以接受!被视为“字母”(catcode-11),那么这个tokcycle环境\snap...\endsnap将找到精确的实例Snap!并将其替换!为斜体。

\documentclass{article}
\usepackage{tokcycle,listofitems,xcolor}
\catcode`!=11
\setsepchar{Snap!}
\newcommand\testdict{%
  \if\relax\detokenize\expandafter{\currentword}\relax\else
    {\ignoreemptyitems
      \greadlist\dictcompA{\currentword}}%
    \readlist\dictcompB{\currentword}%
    \ifnum\listlen\dictcompA[]=0\relax
      \addcytoks[1]{\autohighlightStyleA}%
      \addcytoks[1]{\expandafter{\currentword}}
    \else
      \ifnum\listlen\dictcompB[]>1\relax
        \addcytoks[1]{\autohighlightStyleB}%
        \addcytoks[1]{\expandafter{\currentword}}
      \else
        \addcytoks[1]{\currentword}%
      \fi
    \fi
  \fi
  \gdef\currentword{}%
}
\makeatletter
\xtokcycleenvironment\snap
{\tctestifcatnx A##1{\g@addto@macro\currentword{##1}}
  {\testdict\addcytoks{##1}}}
{\testdict\groupedcytoks{\processtoks{##1}\testdict}}
{\g@addto@macro\currentword{##1}}
{\testdict\addcytoks{##1}}
{\stripgroupingtrue\def\currentword{}}
{}
\makeatother
\newcommand\autohighlightStyleA{\snapit}
\newcommand\autohighlightStyleB{\snapit}
\newcommand\snapit[1]{Snap\textit{!}}
\begin{document}
\snap

There is Snap! and other Snap  and snappy *Snap!* words!

\endsnap
\end{document}

在此处输入图片描述

相关内容