アクティブ文字のコールバック置換

アクティブ文字のコールバック置換

LuaLaTeX、TeXlive 2024、Linux を使用します。

"編集: David が承認された回答で書いたように、これには Lua コールバックは必要ありません。ただし、他のユーザーが の既存のテキスト定義なしで同様のことを実行しようとする可能性があるため、質問は残しておきます。

私のアプリケーションにはテキストが関係しています (数式や図表ではありません)。人間の編集者とプレーン テキスト ファイルをやり取りすると、ときどき不要なものが"混入します。二重引用符は英語の会話で広く使用されています。TeX の処理方法は、"ワード プロセッサ (エディターが使用) の処理方法とは異なります。

TeX の合字は常に"右側の二重中括弧に設定されます。これは私が望んでいることではありません。リスト"から削除することはできますがtlig、それだけでは十分ではありません。私がやりたいのは、これに遭遇するたびにメッセージを書き込むことです。その後、インプレース (中括弧ではない)"のままにします。"

"アクティブ文字 を作成することで、メッセージを書き込むことができます。ただし、その場合"、無限に実行されるため、インプレースのままにすることはできません。

アクティブな"を、私がその目的のために作成した別の Unicode 文字 ( のコピー) に置き換えることができます"。これで問題は (ほぼ) 解決します。メッセージを書き込むことができ、紙に印刷するとそこに表示されます"。ただし、置換文字は実際には"ロボットではないため、PDF インスペクタによってフラグが立てられる可能性があります。これは TeX の範囲外です。

のさまざまな部分のコードを見ると、コールバックを介してグリフの置換を可能にするメソッドtexmf-dist/tex/luatexがあることがわかりますsomething.sub。私が必要としているもののように思えます。残念ながら、私はそれをどのように使用するかを判断できるほどのプログラマーではありません。

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}

"注: ドキュメント本体では、 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}

関連情報