Substituição de retorno de chamada de caractere ativo

Substituição de retorno de chamada de caractere ativo

Usando LuaLaTeX, TeXlive 2024, Linux.

EDIT: Como David escreveu, na resposta aceita, isso não requer retorno de chamada Lua. Mas vou deixar a pergunta, pois outros usuários poderão tentar fazer algo parecido, sem a definição de texto pré-existente para ".

Minha aplicação envolve texto (não matemática ou diagramas). Eu troco arquivos de texto simples com um editor humano e, ocasionalmente, um estranho "entra. As aspas duplas são amplamente utilizadas em diálogos em inglês. A forma como o TeX os trata "é diferente da forma como um processador de texto (usado pelo editor) os trata.

As ligaduras TeX sempre são definidas "como aspas duplas do lado direito. Não é o que eu quero. Embora eu possa remover "da tliglista, isso não é suficiente. O que eu quero fazer é escrever uma mensagem sempre que "for encontrada. Depois, deixe o "no lugar (não cacheado).

Posso escrever a mensagem criando "um personagem ativo. Mas então não posso deixar o "local, porque ele vai até o infinito.

Posso substituir o ativo "por um caractere Unicode diferente, criado por mim para esse fim, que é uma cópia do arquivo ". Isso resolve (quase) o problema: posso escrever a mensagem e, quando impressa no papel, vejo "lá. Mas como o caractere substituto não é realmente "um robô, o inspetor de PDF pode sinalizá-lo. Isso está fora do escopo do TeX.

Olhando o código em várias partes, texmf-dist/tex/luatexvejo que existe um something.submétodo que permite a substituição de glifos via retorno de chamada. Parece o que eu preciso. Infelizmente, não sou programador suficiente para discernir como usá-lo.

MWE:

\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}

Nota: No corpo do documento, não preciso "de atalhos babel ou poliglossia, nem de \char"HHHHmacros, nem de matemática.

Embora o uso do LuaLaTeX para substituição de caracteres já tenha sido questionado antes, nenhuma das questões existentes parece abordar o problema com um caracter ativo.

Responder1

LaTeX fornece um comando para acessar aspas retas

insira a descrição da imagem aqui

\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}

informação relacionada