
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 tlig
lista, 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/luatex
vejo que existe um something.sub
mé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"HHHH
macros, 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
\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}