如何找到之前打印的字符?

如何找到之前打印的字符?

有没有办法在 LaTeX 中找到之前打印的字符?例如:

\newcommand{\th}{%
  \ifthenelse%
    {\equal{\previouscharacter}{1}}%
    {st}%
    {th}%
}

4\th and 21\th % would like to yield "4thand 21st"

答案1

不幸的是,答案是否定的。TeX 包含一些可以修改其之前内容的原语(\over\atop\abovewithdelims体),但没有通用功能。

除了实现打印序数的各种包之外,我还编写了一个相当简单的宏来执行此操作这里

答案2

至于具体应用,engord 包。 例子:

\engordnumber{1} 
\engordnumber{12}
\engordnumber{123}

返回第 1、12 和 123 个。对于具体问题,我无法回答。

答案3

LuaLaTeX 解决方案:

%! TEX program = lualatex
\documentclass{article}
\begin{document}

\directlua{assert(node.types()[29]=="glyph")}
\directlua{assert(node.types()[12]=="glue")}

\def\copylastchar{%
\directlua{%
a=node.last_node();%
if a==nil then tex.print("[!?]") else %
node.write(a);%
tex.print("["..(a.id==29 and utf8.char(node.getchar(a)) or a.id==12 and " " or "???").."]")%
end%
}}

abcd\copylastchar

1\copylastchar

1 \copylastchar

ab\setbox0=\hbox{c}\box0\copylastchar

ab\setbox0=\hbox{2}\raise 1mm\box0\copylastchar

\copylastchar


\end{document}

输出:

abcd[d]
1[1]
1 [ ]
abc[b]
ab²[b]
[!?]

该函数\copylastchar获取最后一个字符,然后将其重新打印到文档中以供查看。

请注意,它并不总是万无一失的(从最后的例子可以看出,其中b打印的是 而不是c2

last_node我不知道这样取回它是否有任何缺点write

相关内容