
Использую 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}