LaTeX メモ

LaTeX とその周辺のお話.たぶん下に行くほどマニアックな内容になります.なお,本文中では明示していなくても amsmath, amssymb は読み込んでいるものとします.

言及されているパッケージが見つからない場合は,CTAN から拾ってきて,~/texmf/tex/latex/ 以下に適当に放り込んで mktexlsr して下さい.

最新の TeX だと,ファイルの配置が変わっていたりするので,そこは柔軟に読み替えて下さい (find, locate を活用する).

  1. TeX 環境の準備
  2. Emacs との連携
  3. 内積とノルム
  4. AMS-LaTeX の使い方
  5. proof 環境
  6. 数式環境途中での改ページ
  7. 数式の表示スタイル
  8. 参照されていない式番号のリストアップ
  9. 右上がりの \ddots
  10. 複数の PDF ファイルを結合する
  11. mathtools パッケージ
  12. textpos パッケージ
  13. M+ 1MN フォントをタイプライタ体として使う
  14. txfontsvarg のフォントだけ拝借する
  15. mathptmx と boldmath について
  16. Belleek フォントを使う

TeX 環境の準備

何かと煩雑な TeX 環境の準備ですが,最近はかなり楽になってきたような気が…….

Linux の場合

昔は teTeX が定番でしたが,2006年でメンテナンスが終わってしまいました.その後,各ディストリビューションでは TeX Live が採用されて今日に至ります.TeX Live は1年毎に更新される Live DVD らしく,様々な環境用のバイナリ,スタイルファイル等,及びソースが収録されています.

しかしながら,現状 TeX Live には pTeXjsclasses が含まれておらず,日本語を扱いたいという要望に応えるには至っていません.そのうちこの状況がなんらかの形で解消されることが期待されますが,今のところは ptexlive などの日本語パッチ集を使うことをおすすめします.Linux ディストリビューションによってはこれらのパッケージが用意されていたり,TeX Live に pTeX を追加するパッケージがあったりすることがあるので,その場合はそちらを使うといいでしょう.

追記(2010/11/04): TeX Live 2010 では pTeX が取り込まれたそうです

なお,日本語のフォントが汚いと悲しいことになるので,IPA フォントをあらかじめ導入しておきましょう.パッケージがあればそちらから.無い場合は以下の通り:

$ wget http://ossipedia.ipa.go.jp/ipafont/IPAfont00203.php
$ unzip IPAfont00203.zip
$ cd IPAfont00203
$ su
# mkdir /usr/share/fonts/TrueType 
# cp *.ttf /usr/share/fonts/TrueType

さて,いざ使ってみて,コンパイルがうまくいかないという人はソースの文字コードを確認してみましょう.platex は EUC を読みますが,最近の Linux ディストリビューションでは UTF-8 を使うのがデフォルトになっています.Emacs や nkf で変換するか,platex に次のオプションをつけることで対処します:

$ platex -kanji=utf8

Windows の場合

W32TeX を使うのが定番.Cygwin 版の ptetex を使うのも手らしいです.

Mac OS X の場合

Mac Ports を使うか ptexlive を使うか,だそうです.

Emacs との連携

YaTeX を使っている人も多いとは思いますが,ここでは標準の LaTeX-mode を使う場合について.何もしなくても基本的なことは全てできるのが魅力です.

まず,~/.emacs に次のように書いておきます:

(setq latex-run-command "platex -src-specials")
(setq tex-dvi-view-command "pxdvi -s 6 -expertmode 0")

オプションはお好みでどうぞ.LaTeX-mode のキーバインドの主なものは以下の通り:

dvipdfmxevince も呼び出したいので,tex-print を参考にして以下を ~/.emacs に追加しました.それぞれ ``C-c C-t'',``C-c C-r'' に割り当ててあります.

(setq tex-dvipdf-command "dvipdfmx")
(setq tex-view-pdf-command "evince")

(defun tex-dvipdf ()
  "Run dvipdfmx."
  (interactive)
  (let ((print-file-name-dvi (tex-append tex-print-file ".dvi"))
        test-name)
    (if (and (not (equal (current-buffer) tex-last-buffer-texed))
             (buffer-file-name)
             ;; Check that this buffer's printed file is up to date.
             (file-newer-than-file-p
              (setq test-name (tex-append (buffer-file-name) ".dvi"))
              (buffer-file-name)))
        (setq print-file-name-dvi test-name))
    (if (not (file-exists-p print-file-name-dvi))
        (error "No appropriate `.dvi' file could be found")
      (if (tex-shell-running)
          (tex-kill-job)
        (tex-start-shell))
      (tex-send-command
       tex-dvipdf-command
       print-file-name-dvi
       t))))

(defun tex-view-pdf ()
  "Run PDF viewer."
  (interactive)
  (let ((view-file-name-pdf (tex-append tex-print-file ".pdf"))
        test-name)
    (if (and (not (equal (current-buffer) tex-last-buffer-texed))
             (buffer-file-name)
             ;; Check that this buffer's printed file is up to date.
             (file-newer-than-file-p
              (setq test-name (tex-append (buffer-file-name) ".pdf"))
              (buffer-file-name)))
        (setq view-file-name-pdf test-name))
    (if (not (file-exists-p view-file-name-pdf))
        (error "No appropriate `.pdf' file could be found")
      (if (tex-shell-running)
          (tex-kill-job)
        (tex-start-shell))
      (tex-send-command
       tex-view-pdf-command
       view-file-name-pdf
       t))))

(add-hook 'latex-mode-hook
	  (lambda () 
	    (define-key latex-mode-map "\C-c\C-t" 'tex-dvipdf)
	    (define-key latex-mode-map "\C-c\C-r" 'tex-view-pdf)))

C-o で入力できる環境の補完リストのデフォルトは,以下のように ~/.emacs に書くことで追加できます:

(setq latex-block-names
      '("gather" "gather*" "multline" "multline*" "align" "align*" "split"
        "pmatrix" "bmatrix" "vmatrix" "cases" "dcases" "dcases*"
        "theorem" "proposition" "lemma" "corollary" "remark" "example"
        "normalframe" "block" "subequations"))

(2009/06/18) 欧文向けでは pdflatex というのがあって,TeX ソースから一発で PDF を生成するのが通常なのかもしれないのですが,日本では pTeX にそのような拡張が実装されてはいないので,dvipdfmx による変換が必須です.私は今まで,プレビューワとしては xdvi の方が使いやすいと思っていたのですが,最近 evince でも Space で Next,Shift + Space で Prev ができることに気付いたので,PDF 生成まで一気にできるようにしてみました.

(defun my-tex-file ()
  "Prompt to save all buffers and run TeX (or LaTeX) on current buffer's file.
This function is more useful than \\[tex-buffer] when you need the
`.aux' file of LaTeX to have the correct name."
  (interactive)
  (when tex-offer-save
    (save-some-buffers))
  (let* ((source-file (tex-main-file))
         (file-dir (file-name-directory (expand-file-name source-file))))
    (if (tex-shell-running)
        (tex-kill-job)
      (tex-start-shell))
    (tex-start-tex tex-command source-file file-dir)
    (setq tex-print-file (expand-file-name source-file))
    (let ((print-file-name-dvi (tex-append tex-print-file ".dvi")))
	(tex-send-command tex-dvipdf-command print-file-name-dvi nil)
	)))

あとは,キーバインドに割り当てておきます:

(add-hook 'latex-mode-hook
	  (lambda () 
	    (define-key latex-mode-map "\C-c\C-f" 'my-tex-file)
	    (define-key latex-mode-map "\C-c\C-v" 'tex-view-pdf)))

xdvi との連携

platex-src-specials オプションが付いている件について.最近の TeX ではソースとの対応関係を DVI ファイルに埋め込む機能がついているそうで,これを使うと xdvi 上でクリックするだけでソースの対応する場所に Emacs が飛んでくれたりします.

この機能を使うには xdvi-search.el が必要です.大体以下の要領で:

$ wget http://xdvi.sourceforge.net/xdvi-search.el
$ su
# mkdir /usr/share/emacs/site-lisp/xdvi
# mv xdvi-search.el /usr/share/emacs/site-lisp/xdvi/

そして,~/.emacs に以下のように書いておきます:

(server-start)
(require 'xdvi-search)

あとは -src-specials オプション付きでコンパイルすれば,xdvi 上で Ctrl を押しながらクリックすると該当の場所に Emacs が飛ぶようになります.

内積とノルム

おそらく一番誤用が多いのは,内積とノルムの記号だと思います.次のように書くのは間違いです:

\begin{align*}
  <x, y>&=\sum_{i=1}^n x_iy_i\\
  ||x||_2&=\sqrt{\sum_{i=1}^n |x_i|^2}
\end{align*}
anglenormng

正しくは \langle, \rangle 及び \| を使います.

\begin{align*}
  \langle x, y \rangle&=\sum_{i=1}^n x_iy_i\\
  \|x\|_2&=\sqrt{\sum_{i=1}^n |x_i|^2}
\end{align*}
anglenorm

AMS-LaTeX の使い方

意外にその便利な機能が知られていないらしい AMS-LaTeXamsmath パッケージの使い方のうち,特に便利なものを抜粋してみます.全機能は User’s Guide for the amsmath Package を読んで下さい.

複数行の数式を揃えて表示

eqnarray の改良版である gather 環境,align 環境などが使えます.特に eqnarray 環境の式揃えはデフォルトでは隙間が空いて醜いので,align 環境を使うのが解決策として手軽です.これらは式番号を自動的に振りますが,gather*, align* のように末尾にアスタリスクを付けることで,式番号を振らないようにすることができます.

まず,式揃えを特に考えずに式を並べるときは gather 環境を使います.

\begin{gather}
  x_1=y_1\\
  x_2=y_2+z
\end{gather}
gather

式揃えが必要な場合は align 環境で揃える位置を ``&'' で指定します.

\begin{align}
  x_1&=y_1\\
  x_2&=y_2+z
\end{align}
align1

align という名の通り,式を整列して配置することもできます.

\begin{align}
  x_1&=y_1   & z_1&=w_1+a\\
  x_2&=y_2+b & z_2&=w_2
\end{align}
align2

長い数式を書くときは multline 環境が使えます.

\begin{multline}
  x_1+x_2+x_3+x_4+x_5+x_6+x_7+x_8\\
  +x_9+x_{10}+x_{11}+x_{12}+x_{13}+x_{14}+x_{15}+x_{16}\\
  +x_{17}+x_{18}+x_{19}+x_{20}+x_{21}+x_{22}+x_{23}+x_{24}\\
  +x_{25}+x_{26}+x_{27}+x_{28}+x_{29}+x_{30}+x_{31}+x_{32}
\end{multline}
multline

= でつながれた1つの数式を複数行に渡って書く場合は equation 環境 + split 環境です.

\begin{equation}
  \begin{split}
    a&=b\\
     &=c
  \end{split}
\end{equation}
split

式番号の階層

(1a), (1b), ... のような式番号を振るには subequations 環境を使います.

\begin{subequations}\label{hoge}
  \begin{align}
    x_1&=y_1\label{hoge1}\\
    x_2&=y_2\label{hoge2}
  \end{align}
  and
  \begin{equation}
    x_3=y_3\label{hoge3}
  \end{equation}
\end{subequations}

\eqref{hoge}, \eqref{hoge1}, \eqref{hoge2}, \eqref{hoge3}.      
subequations

式番号の参照

(\ref{hoge}) とわざわざ書かなくても,\eqref{hoge} で OK です.

場合分け

\left\{\begin{array}[ll]...\end{array}\right. などと長ったらしく書く必要はありません.cases 環境が使えます.

\[
  \delta_{i, j}=
  \begin{cases}
    1 & \text{if $i=j$},\\
    0 & \text{if $i \neq j$}.
  \end{cases}
\]
cases

行列

pmatrix 環境で一発です.

\[
  \begin{pmatrix}
    a & b\\
    c & d
  \end{pmatrix}
\]
pmatrix

() じゃなくて [] がいい方には bmatrix 環境です.

\[
  \begin{bmatrix}
    a & b\\
    c & d
  \end{bmatrix}
\]
bmatrix

そして,行列式は vmatrix 環境で.

\[
  \begin{vmatrix}
    a & b\\
    c & d
  \end{vmatrix}
\]
vmatrix

二項係数

\binom で.

\[
  \binom{n}{k}=\frac{n!}{k!(n-k)!}
\]
binom

連分数

\cfrac で.

\[
  \cfrac{1}{c_1+\cfrac{1}{c_2+\cfrac{1}{c_3+\cdots}}}
\]
cfrac

amsmath ではなくて蛇足ですが,縦に長くて嫌だという人は以下を使いましょう (TeX Q & A 24450 より拝借,misc 様に感謝).

\makeatletter
\DeclareRobustCommand*\CFrac[2]{%
   \mathinner{\mathchoice
      {\@CFrac\textstyle\textfont{4}{#1}{#2}}%
      {\@CFrac\scriptstyle\textfont{}{#1}{#2}}%
      {\@CFrac\scriptscriptstyle\scriptfont{}{#1}{#2}}%
      {\@CFrac\scriptscriptstyle\scriptscriptfont{}{#1}{#2}}}}
\def\@CFrac#1#2#3#4#5{%
   {\dimen\tw@\fontdimen8#23\relax \dimen\tw@#3\dimen\tw@
    \setbox\z@\hbox{\m@th$#1\;{#4}\;\mathstrut$}%
    \@tempdima\dp\z@ \advance\@tempdima\dimen\tw@
    \setbox\tw@\hbox{\m@th$#1\;{#5}\;\mathstrut$}%
    \@tempdimb\ht\tw@ \advance\@tempdimb\dimen\tw@
    \dimen@ \ifdim\wd\z@>\wd\tw@ \wd\z@ \else \wd\tw@ \fi
    \setbox\z@\hbox to\dimen@{%
       \hss\unhbox\z@\hss
       \vrule \vrule\@width\z@\@depth\@tempdima}%
    \setbox\tw@\hbox to\dimen@{%
       \vrule\@width\z@\@height\@tempdimb \vrule
       \hss\unhbox\tw@\hss}%
    \dimen\tw@\fontdimen22#22\relax
    \advance\dimen\tw@\ht\z@ \advance\dimen\tw@\dp\z@
    \advance\dimen\tw@ .2\p@
    \setbox\z@\vbox{\box\z@ \hrule \box\tw@}%
    \advance\dimen\tw@-\ht\z@
    \raise\dimen\tw@\box\z@}}
\makeatother

\[
  \CFrac{1}{c_1}+\CFrac{1}{c_2}+\CFrac{1}{c_3}+\cdots
\]
CFrac

Σ の下に複数行の数式を書く

\substack が使えます.

\[
  \sum_{\substack{0 \leq i \leq m \\ 0 \leq j \leq n}} x_{i,j}
\]
substack

proof 環境

amsthm パッケージでは,定理環境に関する便利な機能が提供されます.詳しい使い方は Using the amsthm Package を参照してもらうことにして,ここでは一番目に見えやすい proof 環境 について触れておきます.使い方は簡単です.

\begin{proof}
  We can see that
  \[
    x=y.
  \]
  This completes the proof.
\end{proof}
proof

このように,先頭に ``Proof'' を出力し,末尾には自動的に「証明終わり」の記号が追加されます.一時的に ``Proof'' の部分を変えたい場合はオプションで指定します.

\begin{proof}[Proof of Theorem 1]
  We can see that
  \[
    x=y.
  \]
  This completes the proof.
\end{proof}
proofoption

日本語の文章で,恒常的に ``Proof'' の部分を「証明」に変えたい場合は,preamble で \renewcommand{\proofname}{証明} とします.また,「証明終わり」の記号は \qedsymbol を定義し直すことで指定できます.例えば,よく本などで見かける縦長の四角を使いたい場合,私は次のようにしています:

\renewcommand{\qedsymbol}{\rule{0.33em}{1em}}
\begin{proof}
  We can see that
  \[
    x=y.
  \]
  This completes the proof.
\end{proof}
qedsymbol

ところで,証明が数式で終わる場合,ちょっと困ったことになってしまいます.

\begin{proof}
  We can see that
  \[
    x=y.
  \]
\end{proof}
qedproblem1

この場合,\qedhere を追加することで回避できます.

\begin{proof}
  We can see that
  \[
    x=y.\qedhere
  \]
\end{proof}
qedhere1

さらに,式番号が振られている場合,

\begin{proof}
  We can see that
  \begin{equation}
    x=y.\qedhere
  \end{equation}
\end{proof}
qedproblem2

となってしまいますが,\mbox\qedhere を囲えば

\begin{proof}
  We can see that
  \begin{equation}
    x=y.\mbox{\qedhere}
  \end{equation}
\end{proof}
qedhere2

となります.あまり解決になっていない気もしますが.

数式環境途中での改ページ

gather 環境や align 環境で長々と数式を連ねていると,スペースが足りないために次のページに全ての数式が送られて間抜けな余白が生じてしまうことがよくあります.これを防ぐためには,\allowdisplaybreaks と書いておくと,そこから先では gather 環境中でも適宜改ページされるようになります.逆に改ページされないようにするには \allowdisplaybreaks[0] とします.

数式の表示スタイル

\documentclass のオプションに leqno を指定すると,式番号が左側に表示されるようになります.逆に右側に表示するには reqno です.また fleqn を指定すると式が左寄せになります.

参照されていない式番号のリストアップ

幾度もの改訂により使われなくなった式番号が残ってしまうことがよくありますが,そんなときに使えるのが refcheck パッケージです.これを使えば,参照されていない式番号を簡単にリストアップすることができます.

例えば,下のようなソースがあったとします:

\documentclass{article}

\usepackage{amsmath}
\usepackage{refcheck}

\begin{document}
\begin{align}
  a_1&=b_1, \label{hoge1} \\
  a_2&=b_2, \label{hoge2} \\
  a_3&=b_3.
\end{align}
\eqref{hoge1}.
\end{document}

これを2回コンパイルすると,次のような出力が出ます:

...
Package: `refcheck' v1.9 <2004/03/31>
options: showrefs, showcites, msgs, chckunlbld
<Info by RefCheck> Unused label `hoge2' on page 1
<Info by RefCheck> Unlabelled equation (3) on page 1
...

出力の DVI ファイルにもラベルなどの情報が表示されるので,これを見ながら未使用番号を削除しましょう.

mathtools パッケージも参照して下さい.

右上がりの \ddots

右下がりの点3つは \ddots でよく使いますが,右上がりの点3つを出力するにはどうすればよいでしょうか.探してみたところ,mathdots パッケージを読み込めば,\iddots で出力できるようです.

なお,mathdots を読み込むと \ddots, \vdots も微妙に変わります.どちらがよいと感じるかは人それぞれかと思います.

比較用です.上がデフォルト,下が mathdots です.

nonmathdots
mathdots

複数の PDF ファイルを結合する

Acrobat があれば何も困らない話ではありますが,Linux でやるにはどうすればよいか.調べてみたところ,PDFjam というものを使うのが手っ取り早いようです.正体はただのシェルスクリプトなのですが,便利です.主要な Linux ディストリビューションではパッケージ化されているようなので,さくっとインストールしてしまいましょう.

インストールが終わったら,あとは結合したい PDF ファイルを並べて pdfjoin に読ませるだけです.

$ pdfjoin note1.pdf note2.pdf
This is pdfjoin version 1.20
  Temporary LaTeX file for this job is /var/tmp/6308.tex
  Calling pdflatex...
  Finished: output is /home/kmaeda/note2-joined.pdf

とまあ,こんな感じで簡単です.何をやっているかが気になったので,途中で止めてみました.

$ pdfjoin note1.pdf note2.pdf
This is pdfjoin version 1.20
  Temporary LaTeX file for this job is /var/tmp/6537.tex
  Calling pdflatex...
^C^Z
[1]+  Stopped                 pdfjoin note1.pdf note2.pdf
$ cd /var/tmp
$ ls -l 6537*
-rw-r--r-- 1 kmaeda kmaeda     0 2008-12-30 18:44 6537.aux
-rw-r--r-- 1 kmaeda kmaeda  4096 2008-12-30 18:44 6537.log
-rw-r--r-- 1 kmaeda kmaeda   310 2008-12-30 18:44 6537.msgs
-rw-r--r-- 1 kmaeda kmaeda 30833 2008-12-30 18:44 6537.pdf
-rw-r--r-- 1 kmaeda kmaeda   322 2008-12-30 18:44 6537.tex
lrwxrwxrwx 1 kmaeda kmaeda    22 2008-12-30 18:44 6537source1.pdf -> /home/kmaeda/note1.pdf
lrwxrwxrwx 1 kmaeda kmaeda    22 2008-12-30 18:44 6537source2.pdf -> /home/kmaeda/note2.pdf
$ cat 6537.tex
\documentclass[a4paper,portrait]{article}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages=-,fitpaper=true,trim=0 0 0 0,offset=0 0,turn=true,noautoscale=false]{/var/tmp/6537source1.pdf}
\includepdf[pages=-,fitpaper=true,trim=0 0 0 0,offset=0 0,turn=true,noautoscale=false]{/var/tmp/6537source2.pdf}
\end{document}

なかなか力技でした.

mathtools パッケージ

mathtools パッケージamsmath パッケージを更に拡張するものです.ここではその機能のうち,よく使うものだけ紹介します.

参照されている式番号のみを表示する

\mathtoolsset{showonlyrefs=true} と書くと,参照されている式番号のみを表示するようになります.ただし,コンパイルが3回 (つまり1回余分に) 必要になります.\mathtoolsset{showonlyrefs=false} とすれば,そこからは全ての式番号が振られるようになります.

dcases 環境

dcases 環境は,cases 環境の式部分を displaystyle にしたものです.さらに dcases* 環境を使うと,2列目 (条件を書く部分) がローマン体になります.

textpos パッケージ

textpos パッケージ はたぶん図とか文字とかの位置を指定するためのものです (未確認).プレゼンテーションとか向き? そのうち追記予定.

M+ 1MN フォントをタイプライタ体として使う

私はエディタなどでは M+ 1MN フォントを気に入って使っています.そこで,このフォントを LaTeX でもタイプライタ体として使うことを考えました.やり方は ``任意の欧文TrueTypeフォント・和文フォントの半角英数字部分を扱う方法(質は保証しない)'' とほぼ同じなのですが,一応ここでもメモしておきます.

まず,M+ 1MN フォントがあるディレクトリに移動し,tfm ファイルを作成します. そして,できた tfm ファイルを,texmf の tfm ディレクトリに移動します.

# cd /usr/share/fonts/mplus-outline-fonts/
# ttf2tfm mplus-1mn-regular.ttf mplus-1mn-regular@Unicode@
# ttf2tfm mplus-1mn-medium.ttf mplus-1mn-medium@Unicode@
# mkdir /usr/local/texlive/share/texmf/fonts/tfm/mplus
# mv *.tfm /usr/local/texlive/share/texmf/fonts/tfm/mplus
# mktexlsr

texmf/fonts/map/ttf2pk/config/ttfonts.map の末尾に以下のように書きます:

mplus-1mn-regular@Unicode@    mplus-1mn-regular.ttf    Fontindex = 0
mplus-1mn-medium@Unicode@    mplus-1mn-medium.ttf    Fontindex = 0

dvipdfmx でのフォント埋め込みのために,texmf/fonts/map/dvipdfm/base/cid-x.map の末尾に次のように書きます (これをやらないと,一見うまく埋め込めているように見えても不具合が出ることがあります):

mplus-1mn-regular@Unicode@ unicode mplus-1mn-regular
mplus-1mn-medium@Unicode@ unicode mplus-1mn-medium

これでうまくいかない場合,texmf/dvipdfmx/dvipdfmx.cfg に以下の記述があるかどうかチェックし,なければ追記して下さい:

f  cid-x.map

これで準備は終わりです.実際に使うには,プリアンブルに以下のように書きます:

\usepackage{ifpdf}

\DeclareFontFamily{OT1}{mplus-1mn}{}
\DeclareFontShape{OT1}{mplus-1mn}{m}{n}{%
<-> s * mplus-1mn-regular00
}{}
\DeclareFontShape{OT1}{mplus-1mn}{bx}{n}{%
<-> s * mplus-1mn-medium00
}{}

\ifpdf
\pdfmapline{=mplus-1mn-regular@Unicode@ <mplus-1mn-regular.ttf}
\pdfmapline{=mplus-1mn-medium@Unicode@ <mplus-1mn-medium.ttf}
\fi

\renewcommand{\ttdefault}{mplus-1mn}

なお,\ifpdf の部分は pdfLaTeX も使う人用です.pLaTeX しか使わない人には不要です.

txfontsvarg のフォントだけ拝借する

mathptmx などの Times 系の数式フォントを用いる場合,v と \nu の区別がつかないことが問題になります.

v \nu

一方,txfonts には varg というオプションがあり,g, v, w, y を数式らしいフォントで代用することができます.これを使えば区別がつきやすくなります.

v \nu (varg)

mathptmx を使っていて,この txfonts の v のフォントだけを拝借したい場合,次のようにプリアンブルに書けば OK です.

\usepackage{mathptmx}

\DeclareSymbolFont{lettersA}{U}{txmia}{m}{it}
\SetSymbolFont{lettersA}{bold}{U}{txmia}{bx}{it}
\DeclareFontSubstitution{U}{txmia}{m}{it}
\DeclareMathSymbol{v}{\mathalpha}{lettersA}{"33}

mathptmx と boldmath について

mathptmx は数式フォントを Times 系のフォントに置き換えるパッケージですが,boldmath が欠けているという欠点があります.

Package mathptmx Warning: There are no bold math fonts on input line XX.

mathptmx の後に bm を読み込めば一応出力されるようになりますが,Linux + TeX Live の環境の場合,これで出力されるのはアルファベットは NimbusRomNo9L-ReguItal を,ギリシャ文字は StandardSymL を重ねただけのものであり,非常に汚くなります.

mathptmx

また,bmmathptmx の前で読み込めば boldmath が Computer Modern になりますが,これはあまりにもミスマッチです.

cm

一方,txfonts を使うとアルファベットが NimbusRomNo9L-MediItal に,ギリシャ文字が TX Fonts のものになります.

tx

というわけで,txfonts よりも mathptmx を使いたくて,かつ boldmath を出力したいという方は,boldmath のときだけ txfonts を拝借すればよさそうです.これは,プリアンブルを以下のようにすることで実現できます.

\usepackage{mathptmx}

\SetSymbolFont{operators}{bold}{OT1}{txr}{bx}{n}
\SetSymbolFont{letters}{bold}{OML}{txmi}{bx}{it}
\SetSymbolFont{symbols}{bold}{OMS}{txsy}{bx}{n}
\SetSymbolFont{largesymbols}{bold}{OMX}{txex}{bx}{n}

\usepackage{bm}

なお,これは下で紹介している Belleek フォントを使う場合にも同様に活用できますが,mathtime ではギリシャ大文字のテーブルが合わずに文字化けを起こしてしまうので,これらの boldmath も使いたい場合は txfonts 用に再定義しておく必要があります.

\usepackage{mathtime}

\DeclareMathVersion{bold}
\SetSymbolFont{operators}{bold}{OT1}{txr}{bx}{n}
\SetSymbolFont{letters}{bold}{OML}{txmi}{bx}{it}
\SetSymbolFont{symbols}{bold}{OMS}{txsy}{bx}{n}
\SetSymbolFont{largesymbols}{bold}{OMX}{txex}{bx}{n}

\DeclareSymbolFont{txoperators}{OT1}{txr}{m}{n}
\SetSymbolFont{txoperators}{bold}{OT1}{txr}{bx}{n}
\DeclareFontSubstitution{OT1}{txr}{m}{n}
\DeclareMathSymbol{\Gamma}{\mathalpha}{txoperators}{0}
\DeclareMathSymbol{\Delta}{\mathalpha}{txoperators}{1}
\DeclareMathSymbol{\Theta}{\mathalpha}{txoperators}{2}
\DeclareMathSymbol{\Lambda}{\mathalpha}{txoperators}{3}
\DeclareMathSymbol{\Xi}{\mathalpha}{txoperators}{4}
\DeclareMathSymbol{\Pi}{\mathalpha}{txoperators}{5}
\DeclareMathSymbol{\Sigma}{\mathalpha}{txoperators}{6}
\DeclareMathSymbol{\Upsilon}{\mathalpha}{txoperators}{7}
\DeclareMathSymbol{\Phi}{\mathalpha}{txoperators}{8}
\DeclareMathSymbol{\Psi}{\mathalpha}{txoperators}{9}
\DeclareMathSymbol{\Omega}{\mathalpha}{txoperators}{10}

\usepackage{bm}

Belleek フォントを使う

Belleek フォント (TrueTeX から入手可能) は,商用 Times フォントである MathTime のフリーな代替フォントです.普段は mathptmx などを使っていたのですが,こちらも試してみました.以下,TeX Live 環境の前提で (teTeX の場合は最初からファイルが揃っているので,即使えるみたいです).この場合,Belleek フォント自体は既にインストールされているはずなので,足りないファイルを追加して設定するだけです.

必要なファイル一覧:

mathtime.zip~/texmf/tex/latex/ にて展開,mtsyn.tfmmtsy.tfmにリネーム,*.tfm~/texmf/fonts/tfm/mathtime/, mtmi.vf~/texmf/fonts/vf/mathtime/ あたりに置いておきます.~/texmf/tex/latex/mathtime/ にて

$ latex mathtime.ins

を実行すれば,mathtime.sty 他,必要なファイルが生成されます.あとは my{1,2,3}mtt.fdこのメッセージに従い編集します (編集済みの my{1,2,3}mtt.fd は TeXLive に含まれていて,find すれば出てくるかも).あとは mktexlsr すれば準備完了です.

...
\usepackage{mathtime}
...
\begin{document}
...

で使えます.

なお,英語 (pdflatex など) の場合はこれでいいのですが,日本語 (platex など) で使う場合はさらに下記のようにプリアンブルに書く必要があります (cf. TeX Q & A No.18587):

\DeclareFontSubstitution{TS1}{ptm}{m}{n}
\DeclareFontShape{JY1}{mc}{b}{n}{<->ssub*gt/m/n}{} 
\DeclareFontShape{JT1}{mc}{b}{n}{<->ssub*gt/m/n}{} 

その他の Times 系数式フォントについては以下の通り: