回调替换活动角色

回调替换活动角色

使用 LuaLaTeX、TeXlive 2024、Linux。

编辑:正如 David 在接受的答案中所写,这不需要 Lua 回调。但我将保留这个问题,因为其他用户可能会尝试做类似的事情,而不需要预先存在的文本定义"

我的应用程序涉及文本(而不是数学或图表)。我与人工编辑器交换纯文本文件,偶尔"会有一些杂乱的内容。双引号在英语对话中被广泛使用。TeX 处理它们的方式"与文字处理器(编辑器使用)处理它们的方式不同。

TeX 连字符总是设置"为右侧双花括号。这不是我想要的。虽然我可以"tlig列表中删除,但这还不够。我想要做的是每当"遇到时都写一条消息。然后,保留"原位(不花括号)。

我可以通过创建一个活动字符来编写消息"。但是我不能让它就位 ",因为它会无限运行。

我可以用我为此目的创建的另一个 Unicode 字符替换 active ",该字符是 的副本"。这解决了问题(几乎):我可以编写消息,当打印到纸上时,我可以看到"那里。但是因为替换字符实际上不是"机器人,所以 PDF 检查器可能会标记它。这超出了 TeX 的范围。

查看各个部分的代码,texmf-dist/tex/luatex我发现有一种something.sub方法,允许通过回调替换字形。听起来就像我需要的。唉,我不是一个合格的程序员,不知道如何使用它。

梅威瑟:

\documentclass{article} % compile with lualatex
\usepackage{fontspec}
\begin{document}
\catcode`\"=13 % straight double quotes now active.
\def"{\typeout{EEEEEK}º} % message, and subtitute with something else.
Hello, "World."\par
% I used the degree symbol as substitute character, because they have
% similar metrics in Latin Modern Roman. In my own usage, I use a different
% character, specifically created for the purpose (custom font).
% That character is identical to " but at a different Unicode location.
% At this point I would like to use a Lua callback for the finished paragraph,
% and revert the substitute back to ".
I said, "Hello," previously.
% Do it again.
\end{document}

注意:在文档主体中,我不需要"babel 或 polyglossia 快捷方式,也不\char"HHHH需要宏或数学。

尽管之前曾有人询问过使用 LuaLaTeX 进行字符替换,但现有的问题似乎都没有解决主动字符的问题。

答案1

LaTeX 提供了访问直引号的命令

在此处输入图片描述

\documentclass{article} % compile with lualatex
\usepackage{fontspec}
\begin{document}
\catcode`\"=13 % straight double quotes now active.
\def"{\typeout{EEEEEK}\textquotedbl} % message, and subtitute with something else.
Hello, "World."\par
% I used the degree symbol as substitute character, because they have
% similar metrics in Latin Modern Roman. In my own usage, I use a different
% character, specifically created for the purpose (custom font).
% That character is identical to " but at a different Unicode location.
% At this point I would like to use a Lua callback for the finished paragraph,
% and revert the substitute back to ".
I said, "Hello," previously.
% Do it again.
\end{document}

相关内容