2017年2月15日水曜日

TeXインストーラ3とtxfontsの相性問題

TeXインストーラ3を使った場合のフォントに関する問題を見つけたので共有いたします。

参考文献
PDFを生成したときtxfontsを使ったTeX文書でフォントが変わる問題の対処法メモ
http://ichiro-maruta.blogspot.jp/2011/03/pdf-txfonts-tex.html

これを使うと,電気学会推奨の
\usepackage[varg]{txfonts}
を使う場合,勝手にフォントがTimes New Romanに置き換えられてしまいます。
修正法は,
C:\w32tex\share\texmf-dist\dvipdfmx\config\dvipdfmx.cfg
の末尾に一行 f txr2.map を追加するだけです。
左がbefore,右が修正後です。
\barの違いが顕著です。あとzも形が違います。

MATLABのEditorをUTF-8にする方法

以下の手法はかなりバッドノウハウ的であるので,予期せぬ問題が発生する場合があります。ファイルのバックアップをとってからやりましょう。

---------------------------------------------------
MATLABで日本語で書いたコメントを,英語の環境に送り(英語のWindowsのMATLAB),それを日本語のMATLABで再度編集すると日本語が壊れることがあると思います。
これはShift_JIS特有の問題です。
Shift_JIS
特にGoogleDriveやGithubなどで共同作業するときに問題になります。    
ソースコードをUTF-8で開くためには,jvmEncodingをUTF-8に変更する必要があります。

1. 自分の設定を確かめる
feature('locale')
- Shift_JISの場合
               ctype: 'ja_JP.Shift_JIS'
             collate: 'ja_JP.Shift_JIS'
                time: 'ja_JP.Shift_JIS'
             numeric: 'en_US_POSIX.Shift_JIS'
            monetary: 'ja_JP.Shift_JIS'
            messages: 'ja_JP.Shift_JIS'
            encoding: 'Shift_JIS'
    terminalEncoding: 'Shift_JIS'
         jvmEncoding: 'MS932'
              status: 'MathWorks locale management system initialized.'
             warning: ''


2. 修正する
参考: https://jp.mathworks.com/matlabcentral/answers/280988-how-do-i-get-my-matlab-editor-to-read-utf-8-characters-utf-8-characters-in-blank-squares-in-editors
C:\Program Files\MATLAB\R2015b\bin\lcdata.xml (例)

以下を編集
        <encoding name="Shift_JIS" jvm_encoding="MS932">

        <encoding name="Shift_JIS" jvm_encoding="utf8">


3. 確認する
feature('locale')
               ctype: 'ja_JP.Shift_JIS'
             collate: 'ja_JP.Shift_JIS'
                time: 'ja_JP.Shift_JIS'
             numeric: 'en_US_POSIX.Shift_JIS'
            monetary: 'ja_JP.Shift_JIS'
            messages: 'ja_JP.Shift_JIS'
            encoding: 'Shift_JIS'
    terminalEncoding: 'Shift_JIS'
         jvmEncoding: 'utf8'
              status: 'MathWorks locale management system initialized.'
             warning: ''


4. ソースコードのエンコーディングの変更
逆に,自分のShift_JISで書かれたソースコードが文字化けしてしまっています。
そのため,KanjiTranslatorなどのソフトで文字コードを一括変換する必要があります。
http://www.kashim.com/kanjitranslator/

・補足
Github Desktop で文字化けしていたソースコードも見えるようになっているはずです。

---------------------------------------------------

上記について,SJISやMS932のエンコーディングのaliasを書き換えることで全てをUTF-8にすることができますが,そうすると
plot(1:2, 1:3);
など長さの違うベクトルでplotしようとしたときに

エラー: plot
ベクトルは同じ長さでなければなりません。

とならず,MATLABを道連れにしてエラーメッセージが出ずに強制終了する問題がありました。上記の方法ではこの問題はりません。

もっと賢い方法があれば知りたいです。Windowsのlocaleを変えるとか?

はじめに

主にMATLAB,LaTeX,Cまわりの備忘録を記録するblogです