Замена обратного вызова активного символа

Замена обратного вызова активного символа

Использую LuaLaTeX, TeXlive 2024, Linux.

EDIT: Как написал Дэвид в принятом ответе, это не требует обратного вызова Lua. Но я оставлю вопрос, потому что другие пользователи могут попытаться сделать что-то подобное, без уже существующего определения текста для ".

Мое приложение включает текст (не математику или диаграммы). Я обмениваюсь простыми текстовыми файлами с редактором-человеком, и иногда "в него попадает что-то странное. Двойные кавычки широко используются в диалогах на английском языке. Способ, которым их обрабатывает TeX, "отличается от способа, которым их обрабатывает текстовый процессор (используемый редактором).

Лигатуры TeX всегда устанавливаются "в правые двойные фигурные кавычки. Это не то, что мне нужно. Хотя я могу удалить "из tligсписка, этого недостаточно. Я хочу писать сообщение всякий раз, когда "встречается. Затем оставьте "на месте (не фигурные).

Я могу написать сообщение, сделав "активным символ. Но тогда я не могу оставить "in-place, потому что он тянется до бесконечности.

Я могу заменить активный символ "другим символом Unicode, созданным мной для этой цели, который является копией ". Это решает проблему (почти): я могу написать сообщение, и когда оно будет распечатано на бумаге, я "его увижу. Но поскольку заменяющий символ на самом деле не является "роботом, 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}

Связанный контент