USB メモリ活用講座
【TeXworks と upLaTeX】

< 最終更新日: 2023-12-07 >

TeXworks のポータブル設定

以前の TeXworks で和文が含まれる原稿を作成するには,和文フォントを埋め込んだ PDF ファイルが出力されるような設定が必要でした※1. 具体的には,次の 2 つを行わなければなりませんでした:

現在の W32TeX に含まれる dvipdfmx では,原ノ味フォントを埋め込んだ PDF ファイルを生成するのがデフォルト設定になっています. W32TeX ポータブル化 の通りに作業を行ったのであれば,これらについては気にせずに TeXworks を利用することができます. さらに W32TeX に含まれる TeXworks は,付属のドキュメント (A short manual for TeXworks) の 5.7 節 Portable Usage & Changing the Configuration (英文) の設定を適用済みですので,そのままで USB ポータブル環境で利用できそうです※2

しかし,USB メモリに割り当てられるドライブレターが変わってしまった場合に,TeXworks の起動や PDF ファイルのプレビューが極端に遅くなってしまうという不具合があるようです. これは,TeXworks の設定ファイル (U:\usr\w32tex\share\texworks\twdata\TUG\TeXworks.ini) に recentFiles として以前のドライブレターのファイル履歴が記録されているためであるようです. これを解決するため,W32TeX のポータブル設定 で作成した WSH スクリプトに手を加えてみます. ついでにバックグラウンド処理で Ghostscript 9.53.3 も呼べるようにしておきましょう.

テキストエディタで texenv.vbs を開き,内容を次のように変更します.

' TeX ポータブル環境設定 (TeXworks 起動用, Ghostscript 9.53.3 対応)
Option Explicit
Dim objWshShell,objFS,objEnv,objIn,objOut
Dim strDrv,strTeXPath,strGSPath,strTmp
Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objFS = WScript.CreateObject("Scripting.FileSystemObject")
' カレントドライブを取得
strDrv = objFS.GetDriveName(WScript.ScriptFullName)
' usr\w32tex フォルダが存在するかをチェック
strTeXPath = strDrv & "\usr\w32tex"
If objFS.FolderExists(strTeXPath)=0 Then
    WScript.Echo strTeXPath & "が見つかりませんので終了します"
    WScript.Quit 0
End If
' Ghostscript フォルダが存在するかをチェック
strGSPath = strDrv & "\usr\gs9.53.3"
If objFS.FolderExists(strGSPath)=0 Then
    WScript.Echo strGSPath & "が見つかりませんので終了します"
    WScript.Quit 0
End If
If objWshShell.Popup("USBメモリのドライブレター(" & strDrv & ")が変わりましたか?", 0, "TeXworksポータブル設定", vbYesNo) = vbYes Then
    strTmp = strTeXPath & "\share\texworks\twdata\TUG"
    objFS.CopyFile strTmp & "\TeXworks.ini", strTmp & "\TeXworks.bak", True
    Set objIn = objFS.OpenTextFile(strTmp & "\TeXworks.bak", 1)
    Set objOut = objFS.OpenTextFile(strTmp & "\TexWorks.ini", 2, True)
    Do Until objIn.AtEndOfStream
        strTmp = objIn.ReadLine
        If InStr(strTmp, "recentFiles=") = 0 Then
            objOut.WriteLine strTmp
        End If
    Loop
    objIn.Close
    objOut.Close
End If
' 環境変数 PATH に usr\w32tex\bin などを追加
Set objEnv = objWshShell.Environment("Process")
objEnv.Item("PATH") = strTeXPath & "\bin;" _
  & strGSPath & "\bin;" _
  & strGSPath & "\lib;" _
  & objEnv.Item("PATH")
' 環境変数GS_LIBを設定
objEnv.Item("GS_LIB") = strGSPath & "\Resource\Init;" _
  & strGSPath & "\Resource;" _
  & strGSPath & "\lib;" _
  & strGSPath & "\kanji"
' 環境変数GS_OPTIONSを設定 (gs9.22以降非推奨だが必要に応じて-dWINKANJIを追加するとよい)
objEnv.Item("GS_OPTIONS") = "-dSAFER"
' コマンドプロンプトウィンドウを開く
objWshShell.Run "%COMSPEC%"
図1・TeXworksポータブル設定
図1・TeXworks ポータブル設定

編集し終えたら上書き保存するか,別の名前を付けて保存しましょう. なお,保存するときには文字コード (エンコード) をシフト JIS (Shift_JIS) にする必要があるようです.

それでは動作確認をしてみましょう.

  1. スクリプト texenv.vbs を起動します. エラーメッセージが表示されたら texenv.vbs に誤りがないか確認してください. 図1 のダイアログボックスが表示されますので,はじめてスクリプトを起動する場合や,前回利用したときと USB メモリのドライブレターが変わっていない場合には いいえ をクリックします. USB メモリのドライブレターが変わった場合や,変わったかどうか確信がもてない場合は はい をクリックします※3
  2. コマンドプロンプト画面が開かれたら,次のようにタイプします.
    texworks Enter
  3. 図2のように TeXworks の編集ウィンドウが開かれたら,TeX ソース文書をタイプ入力します. 図2のように,編集ウィンドウでは TeX のキーワード (コマンド名や環境名) が色付けされ,見分けやすくなっています.
    図2・TeXworksの編集ウィンドウ
    図2・TeXworks の編集ウィンドウ
  4. TeX ソース文書をタイプし終えたら,ファイル-保存 などからファイル名を付けて保存します.
  5. ツールバーの左端にある緑色のタイプセットボタンの右隣が pdfpLaTeX となっていることを確認し,タイプセットボタンをクリックするか,Ctrl キーを押し下げたまま T をタイプします (これを Ctrl+T と書くのが一般的です). コンパイルが実行され,エラーが発生すると編集ウィンドウは図3 のように変わります. この場合は,ツールバーの左端の赤い Abort typesetting ボタンをクリック (あるいは Ctrl+T を入力) するか,ウィンドウ下段の入力ボックス (Console bar) に x とタイプして Enter キーを押すとコンパイルが中断されますので,ログの表示などを参考にエラーの要因を取り除いてください.
    図3・エラー発生時の編集ウィンドウ
    図3・エラー発生時の編集ウィンドウ
  6. コンパイルでエラーが発生しなければ編集ウィンドウの隣に PDF として出力された文書がプレビュー表示されます. 図4 のようであれば正常です. TeXworks には SyncTeX 機能が実装されており,編集ウィンドウとプレビューウィンドウの間で同期処理が行われますので,次のようなことが可能になっているはずです:
    • 編集ウィンドウ側でマウスを右クリックして表示されるメニューから,PDF ファイルの該当箇所へジャンプすることができます (対応する行がハイライト表示されます).
    • プレビューア側で表示領域をマウスを右クリックして表示されるメニューから,ソースファイルの該当箇所へジャンプすることができます.
    図4・TeXworksのプレビューウィンドウ
    図4・TeXworks のプレビューウィンドウ

TeXworks の編集ウィンドウ (図2) のメニューバーから 編集-設定 とたどると,TeXworks の設定ダイアログボックスが開かれます (図5). 「起動時には」の欄の TeX ファイルに対応する PDF ファイルをプレビューする のチェックはオフにしておく方がよいかもしれません. また,「エディタ」タブをクリックするとフォントを変更することができますので,「Yu Gothic UI」や「メイリオ」などの自分好みの見やすいものに変えておくとよいでしょう.

図5・TeXworksの設定ダイアログボックス(全体タブ)
図5・TeXworks の設定ダイアログボックス (全体タブ)

警告: この作業は,くれぐれも自己責任でお願いします. TeXworks のヘルプファイルには英語版の他にフランス語版が含まれています. フランス語版は不要という方は,U:\usr\w32tex\share\texworks\texworks-help\texworks-manualfr フォルダ以下を削除することで約 1.4MB のアキ容量を増やすことができます.

TeXworks の補完機能の有効化

TeXworks には TeX/LaTeX のキーワード入力を補完する機能があるのですが,デフォルトの状態では有効になっていないようです (参考:TeX QA).

TAB キーによる補完機能を有効にするには,テキストエディタで次の内容を入力します.

actionNext_Completion=Tab

この内容を U:\usr\w32tex\share\texworks\twdata\configuration フォルダに shortcuts.ini という名前を付けて保存します※4

TeXworks を起動して動作確認をしてみましょう.

例えば,番号付きリスト環境 (enumerate) を入力したいときには,\begin{en くらいまでタイプしたところで Tab キーをタイプすると,次のように補完してくれるはずです:

\begin{enumerate}
\item

\end{enumerate}

複数の候補がある場合には Tab キーを連続してタイプすると,順次候補が表示されていきます. コマンドや環境名の正しい綴りを覚えきれないという初心者の方や,キー入力を省力化したいというユーザにとっては便利な機能です.

補完機能の詳細については,TeXworks 付属のドキュメント (A short manual for TeXworks) の 4.6 節 Auto-completion (英文) を参照してください※2

upTeX/upLaTeX の利用法

W32TeX の pLaTeX コンパイラ (platex.exe) は,シフト JIS (Shift_JIS),JIS,EUC,UTF-8 の文字コードに対応しており,コンパイル時に自動判別する機能も実装されています. しかし,pLaTeX では UTF-8 を完全に取り扱えるわけではなく,従来の文字コードと同様の制約があります.

従来からパーソナルコンピュータで標準的に利用されてきた シフト JIS コードでは○で囲んだ数字や,いわゆる全角文字のローマ数字などが機種依存文字(環境依存文字) と呼ばれていることはご存じのことと思います. これは,Windows でこれらの文字に割り当てられている文字コード領域に,他の OS では別の文字が格納され,統一されていないためにインターネットの情報交換で利用すると文字が抜け落ちたり,文字化けが発生する可能性があるためです. pLaTeX でもソースコードをシフト JIS で入力する場合に機種依存文字を使うと,コンパイルエラーは発生しなくても,dvipdfm(x) で PDF に変換すると期待通りの出力は得られませんでした.

一方,全世界共通の文字セットを目指して策定された Unicode (UTF-8) に含まれる○囲みの数字などには,もはや機種依存性はないはずです. しかし TeXworks (UTF-8 コード) でこれらの文字を使って pLaTeX ソースコードを入力し,タイプセット (platex → dvipdfmx) を行って PDF に変換すると,やはり期待通りの出力が得られません. これは,pLaTeX や dvipdfm(x) が内部処理を UTF-8 で行っているわけではないことが原因です.

W32TeX の配布ファイルには,田中琢爾氏が開発した,内部処理を Unicode で行う upTeX とその関連ファイルをまとめたパッケージ uptex-w32.tar.xz が含まれています. このパッケージを利用すれば,Unicode 本来の文字セットを使った文書作成が可能になります. upTeX について,より詳しくは W32TeX をインストールしたフォルダ (U:\usr\w32tex) のサブフォルダ share\texmf-dist\doc\uptex\base にある 00uptex_doc_jis.txt などを参照してください.

ここでは,TeXworks から内部処理が Unicode の upLaTeX および dvipdfmx でタイプセットを行うための手順を解説します.

  1. uptex-w32.tar.xz をインストールします (W32TeX のポータブル化の解説通りに作業した場合には,インストール済みのはずです).
  2. TeXworks を起動し,メニューバーから 編集-設定 をクリックします. TeXworks の設定ダイアログボックスが表示されたら,「タイプセット」タブをクリックします (図6).
    図6・TeXworksの設定ダイアログボックス(タイプセットタブ)
    図6・TeXworks の設定ダイアログボックス (タイプセットタブ)
  3. 図6 の「タイプセットの方法」の右下にある + ボタンをクリックします.
  4. 図7 の「タイプセットの方法を設定する」ダイアログボックスが表示されたら,次のように設定を行ってから OK をクリックします※5
    • 名前: updfpLaTeX と記入します.
    • プログラム: ptex2pdf と記入します.
    • 引数: 右下の + ボタンをクリックすると「新しい引数」という項目が追加されるので,次の5つを書き加えます.
      -u
      -l
      -ot
      $synctexoption
      $fullname
      
    図7・タイプセットの方法を設定する
    図7・タイプセットの方法を設定する
  5. 図6のダイアログボックスに戻ったら,「タイプセットの方法」の右側にある ↑ ボタンを使って,updfpLaTeX をリストの適当な場所に移動させてから OK ボタンをクリックします.
  6. 図2 の編集ウィンドウで,ツールバーの左端にある緑色のタイプセットボタンの右隣を updfpLaTeX に変更します.
  7. upLaTeX のソースファイルを編集します. ドキュメントクラスの宣言を次のどちらかにしなければならないということ以外は,従来の pLaTeX と同じように入力すればよいでしょう. ○囲みの数字などもそのまま入力可能です.
    • 従来の jarticle 相当の文書を作成する場合には,ujarticle を指定します:
      \documentclass{ujarticle}
    • 奥村先生作成の jsarticle 相当の文書を作成する場合には,uplatex オプションを加えます:
      \documentclass[uplatex]{jsarticle}

入力可能な文字 (記号類) が増えることによって利便性は向上すると思いますが,ぜひ TeX 本来の美しい出力が損なわれないように注意してください. たとえばローマ数字は,いわゆる全角文字 1 文字で入力するよりは,直接入力可能なアルファベット (I,V,X など) を組み合わせた方がよいでしょう. 長さや面積の単位も同様です (平方センチメートルを cm$^2$ とタイプするのは面倒に感じるかもしれませんが).

upLaTeX に関するより詳しい情報を知りたい方は,ZR (Takayuki YATO) 氏の「upLaTeX を使おう[電脳世界の奥底にて]」を参照することをお勧めします.

nkf による文字コード変換

nkf は文字コード変換を行うための UNIX 系に由来するコマンドラインツールで,web2c-w32.tar.xz に含まれています. JIS,シフト JIS (Shift_JIS),EUC などの従来から利用されてきた文字コードばかりでなく,Unicode (UTF-8,UTF-16,UTF-32) に対応しています. ここでは,以前に シフト JIS コードなどで作成した TeX ソースファイルを TeXworks で編集可能な UTF-8 に変換する手順を簡単に説明します.

変換元のファイルを src.tex,変換先のファイル名を dest.tex とします. TeX のコンパイラが呼び出せるよう環境変数が設定されたコマンドプロンプトを開き,次のように入力します.

nkf -w src.tex > dest.tex Enter

このコマンドの動作を少し詳しく解説してみます:

  1. nkf は変換元の src.tex の文字コードを自動判定します.
  2. nkf は判定の結果に基づいて src.tex を読み込み,-w オプションの指定に従って BOM (Byte Order Mark)無しの UTF-8 (UTF-8N) へ変換して標準出力へと出力します. BOM 付きの UTF-8 にしたい場合は,オプションを -w8 とします (TeraPad の補足・文字コードについて を参照).
  3. リダイレクションによって標準出力の内容がファイル dest.tex に書き出されます. 事前に dest.tex が無ければ新規作成されますが,すでに存在していた場合には上書きされます.

UTF-8 に変換されたファイル dest.tex は TeXworks,メモ帳,TeraPad などの UTF-8 に対応したテキストエディタで編集することが可能ですが,Windows のコマンドプロンプトでは,その内容を正しく表示させることができません (たとえば次のようにして type コマンドで表示させると,和文は文字が化けて表示されるはずです).

type dest.tex Enter

コマンドプロンプトで内容を表示させたい場合は,nkf で シフト JIS に変換すればよいでしょう:

nkf -s dest.tex Enter

nkf の使用法は,次のようにすれば表示させることができます:

nkf --help Enter

nkf をキーワードにインターネット検索を行えば,より完全かつ詳細な解説が見つかるはずです. また,コマンドプロンプトでの操作がどうしても苦手という方は,TeraPad による文字コード変換を利用して,UTF-8N に変換してもよいでしょう.

dvipdfmx に関する補足

dvipdfmx は起動時のオプション指定 (-f) によって,フォント指定のマップファイルを切り替えることが可能です. usr\w32tex\share\texmf-dist\fonts\map\dvipdfmx\base には,27 個のプリセット済みのマップファイルが含まれていますが,とりあえずは次の 3 つを覚えておくとトラブルシュート等で役に立つと思われます (filename は処理対象のファイル名):

dvipdfmx -f noembed filename
和文フォントを埋め込まない PDF ファイルを生成します.
dvipdfmx -f ipaex filename
IPAex 明朝と IPAex ゴシックを埋め込んだ PDF ファイルを生成します.
dvipdfmx -f msmingoth filename
Windows 標準の MS 明朝と MS ゴシックを埋め込んだ PDF ファイルを生成します.

より詳しくは usr\w32tex\share\texmf-dist\doc\dvipdfmx\base フォルダにある DVIPDFM-W32.txt の「日本語マップファイルの選択」で紹介されています※6

ところで,dvipdfmx の処理中に次のような警告 (warning) メッセージが 5 行ほど表示されていると思います.

dvipdfmx:warning: Could not open SFD file: XXXXX

明朝体とゴシック体を使うごく一般的な和文の TeX 文書を作成しているのであれば,目的の PDF ファイルは正しく生成されているはずですので,警告メッセージは気にしなくても大丈夫です. 警告が表示されるのはどうにも気持ちが悪いという方は,usr\w32tex\share\texmf-dist\fonts\map\dvipdfmx\base にある kanjix.map をテキストエディタで開き,以下を参考に 5 箇所ほどコメントアウト (先頭に % を挿入) すればよいでしょう※6

%msmin@Unicode@    UniJIS-UTF16-H msmincho.ttc%  (189行目あたり,umsパッケージ関連)
%msgoth@Unicode@   UniJIS-UTF16-H msgothic.ttc%  (190行目あたり,umsパッケージ関連)
%bkai@Big5@  ETen-B5-H  bkai00mp%  (543行目あたり,中国語関連)
%bsmi@Big5@  ETen-B5-H  bsmi00lp%  (544行目あたり,中国語関連)
%cyberb@Unicode@ unicode cyberbit%  (567行目あたり,Bitstream Cyberbit関連)

あるいは,上記の kanjix.mapusr\w32tex\share\texmf-local\fonts\map\dvipdfmx\base に (フォルダが無ければ作成したうえで) コピーしてから編集する方が,W32TeX のアップデートで上書きされる危険性がないのでより安全です.

また,dvipdfmx の処理中に次のような警告 (warning) メッセージも表示されていると思います.

dvipdfmx:warning: Failed to load AGL file "glyphlist.txt"...

この警告を消したい方は W32TeX の配布サイトから lcdf-typetools-w32.tar.xz (約 983KB) をダウンロードして展開すればよいでしょう. 展開には約 4.5MB のアキ容量が必要です. glyphlist.txt の役割については TeX Wiki > dvipdfmx/フォントの設定 などを参照してください.