有没有办法在 LaTeX 中找到之前打印的字符?例如:
\newcommand{\th}{%
\ifthenelse%
{\equal{\previouscharacter}{1}}%
{st}%
{th}%
}
4\th and 21\th % would like to yield "4thand 21st"
答案1
不幸的是,答案是否定的。TeX 包含一些可以修改其之前内容的原语(\over
、\atop
和\above
变withdelims
体),但没有通用功能。
除了实现打印序数的各种包之外,我还编写了一个相当简单的宏来执行此操作这里。
答案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
打印的是 而不是c
或2
)
last_node
我不知道这样取回它是否有任何缺点write
。