53901


LaTeXの文書中で（つまりエディタやコンパイル時に前処理などをしないで）文字を置換することを考えています。調べると、次のようなものが見つかりました。

  * [`\newunicodechar`](https://ctan.org/pkg/newunicodechar)を用いる方法 
[code]    \documentclass{article}

    \usepackage{newunicodechar}
    \newunicodechar{あ}{い}
    \begin{document}あ←「い」と出力させたい\end{document}
    
[/code]

次のエラーとなりました:

[code]    Package newunicodechar Error: ASCII character requested.

    
[/code]

  * `\DeclareUnicodeCharacter`を用いる方法 
[code]    \documentclass{article}

    \usepackage[utf8]{inputenc}
    \DeclareUnicodeCharacter{3042}{い}
    \begin{document}あ←「い」と出力させたい\end{document}
    
[/code]

コンパイルはできましたが、置換が起きませんでした。

.texソースはutf8で書いています。これが原因であれば、sjis等にすることもできます。

何か実現する方法はないでしょうか。

コマンド:

[code]

    > platex -shell-escape -file-line-error -halt-on-error -interaction=nonstopmode -synctex=1 -kanji=utf8 test.tex
    
[/code]

バージョン情報:

[code]

    This is e-pTeX, Version 3.14159265-p3.8.2-190131-2.6 (utf8.sjis) (TeX Live 2019/W32TeX) (preloaded format=platex)
    
[/code]


CC BY-SA 4.0
2019-04-03T19:23:03.610
53898
2019-04-04T03:57:08.790
question
latex
platexで文字の置換


`\newunicodechar` あるいは `\DeclareUnicodeCharacter`
は「欧文扱いされる文字」に対してだけ適用できる方法であり，「和文扱いされる文字」に対しては使えません。さらに言うと，和文文字を他の文字に置換することは，マクロレベルでは（少なくとも私は）不可能だと思います。

エディタで置換するのが最もたやすいと思いますが，「仮想フォント (VF; Virtual font)
を作ってフォントの側で置換する」という方法を紹介します。ただし，下で使う makejvf というプログラムは，かなり新しいもの（TeX Live 2018
は可，2017 は不可）が必要です。

（技術的には pTeX の中・上級者レベルの話になります。また，特に「他の人とファイル交換する」ようなことがあれば，min10.vf
が他人とは異なることも頭に入れておかないと，思わぬ事故の原因になります。）

* * *

以下，pLaTeX + dvipdfmx を使っていると仮定します。また，ご提示のファイルが `\documentclass{article}`
で始まっているので，pLaTeX 標準の「min10」が使われていると仮定します（もし jsarticle
クラスを使っていれば「min10」を「jis」に読み替えてください）。

まず，お使いの TeX システムから min10.tfm というファイルを探して，ソースと同じ場所に置いておいてください。次に，下記のファイルを
a-to-i.cnf として同じ場所に保存します。

[code]

    % パーセントで始まるものはコメント。
    % REPLACE で置換前と置換後の文字コードを 16 進数で指定する。
    % 「あ」は JIS で 0x2422，「い」は 0x2424
    % 以下の行の空白はタブに置き換えてください。
    REPLACE 2422 2424
    
[/code]

ターミナル（Windows ならコマンドプロンプトや PowerShell）を起動し，ファイルが保存してある場所で以下のコマンドを実行します。

[code]

    makejvf -t a-to-i.cnf min10 rml
    
[/code]

すると，min10.vf と rml.tfm が得られるはずです（このうち min10.vf が文字「あ」を「い」に置換する情報を含むものです）。

出来たら，普段通り platex と dvipdfmx を実行してみてください。「あ」が「い」に置き換わっているはずです。

* * *

以下，注意点です。

  * DVI ファイル自体は普通のものと同じです。dvipdfmx が「今回作った特殊な VF」を読み取って文字を置換します。
  * そのため，本来「あ」が出力されようとする場所は全て「い」に置換されます。
  * ゴシック体も置換したい場合は，コマンドの min10 を goth10 に置き換えたものを別途実行する必要があります。


CC BY-SA 4.0
2019-04-04T03:49:39.910
53901
2019-04-04T03:57:08.790
2019-04-04T03:57:08.790
27160
27160
53898
answer