扫描字符串中的字符

扫描字符串中的字符

我想要做的是获取一些输入字符串,单独处理每个字符或“标记”,并根据所述字符/标记输出一些内容。有办法做到这一点吗?也许看起来像这样:

\for\char\in#1
\ifx\char\textbackslash
...
\fi
...
\fi

答案1

tokcycle包旨在循环输入标记,并根据标记是“字符”、组、宏/命令序列还是空格采取行动。

这些指令允许对标记应用条件测试以实现所需的输出。在这里,我在每个字符标记周围都加上了括号,除了e,我将 加粗。如果宏是\today,则将其设置为斜体,如果是\textbackslash,则为\fboxed---否则,它只是回显到输出。空格将转换为\textvisiblespaces,同时还允许换行。

值得注意的是,除非有人希望故意排除这种情况,否则标记循环可以进入组内容。它以伪环境形式显示如下,但也有宏形式。

\documentclass{article}
\usepackage{tokcycle}
\begin{document}
\tokencycle
{\ifx e#1\addcytoks{\textbf{#1}}\else\addcytoks{(#1)}\fi}%
{\processtoks{#1}}%
{\ifx\today#1\addcytoks{\textit{#1}}\else
 \ifx\textbackslash#1\addcytoks{\fbox{#1}}\else\addcytoks{#1}\fi\fi}%
{\addcytoks{\textvisiblespace\allowbreak}}%
These are \underline{difficult times}, \today{} of all days!

Note that I seek out instances of \textbackslash today in order to make
  it italic.  Paragraphs are not a problem.
\endtokencycle
\end{document}

在此处输入图片描述

答案2

注意 TeX 没有字符串,并且字符标记不一定对应于所谓的字符,例如 £ 是两个标记,但是 latex 有一个内置的标记循环:

\documentclass{article}

\begin{document}

\makeatletter

\def\zzz{b}

\@tfor\tmp:=abcdef\do{
[ \tmp\ is
\ifx\tmp\zzz
 b
\else
 not b
\fi
]\par}


\end{document}

生产

在此处输入图片描述

相关内容