读取命令前的字符

读取命令前的字符

我想在 LaTeX 中创建一条命令,如果它前面有某个字符,则打印某些内容,如果它前面有其他字符,则打印其他内容。

\@ifnextchar可以根据角色输出命令:

\documentclass{article}

\makeatletter
\newcommand\mycommand{\@ifnextchar h{I see an h\ }{I don't see an h\ }}
\makeatother

\begin{document}

\mycommand h %output: I see an h h
\mycommand n %output: I don't see an h n

\end{document}

我想这样做,但基于角色的输出我的命令。

答案1

不确定您的应用程序是否允许将整个内容嵌入到环境中。如果是,我创建了一个 tokcycle 伪环境\preh,其中的出现\mymacro能够检查先前的标记以查看它是否是h

本质上,令牌循环保存最近的令牌(仅在 cat-2 或 cat-10 令牌的情况下大致如此),并且实例\mycommand触发对最新令牌的检查。

\documentclass{article}
\usepackage{tokcycle}
\def\mycommand{\tctestifx{h\prechar}
  {\addcytoks{[PRIOR h]}}{\addcytoks{[NOT PRIOR h]}}}
\tokcycleenvironment\preh
{\addcytoks{##1}\let\prechar##1}
{\processtoks{##1}\global\let\prechar\egroup}
{\ifx\mycommand##1##1\else\addcytoks{##1}\fi\let\prechar##1}
{\addcytoks{##1}\let\prechar\space}
\begin{document}
\preh
A test\mycommand{} of a bash\mycommand ful \rule{1ex}{1ex} environment.

Look! Paragraphs and embedded macros pose no problem
\endpreh
\end{document}

在此处输入图片描述

答案2

在经典tex中你不能回头,但在luatex中情况就大不相同了

在此处输入图片描述

\documentclass{article}

\def\zz{\directlua{
local n=tex.nest[tex.nest.ptr].tail
if (n.id==29) % glyph
then
tex.print("[previous node was \string\\char" .. n.char .. "]")
end
}}
\begin{document}


abc\zz\  xyz\zz\ 123

\end{document}

相关内容