パイ生地みたいにふくらんで。 - TeXに関する覚え書き


TeX関連のリンク集

MacTeX 2015 のメモ


MacTeX-2015 をインストールしてみた。
MacbookAir (2011), OS X 10.10.4 (Yosemite), TeXShop 3.51 で一通り問題なく動いているようだ。

少し面倒なこと


インストール直後の状態ではヒラギノフォントがPDFに適切に埋め込まれないようで、
ターミナルで次を実行する必要がある。
$ sudo updmap-sys --setoption kanjiEmbed hiragino

MacTeX 2013 のメモ


MacTeX-2013 distribution がリリースされている。
(e-pTeX のバージョンは Version 3.1415926-p3.4-110825-2.6)
MacbookAir (2011), OS X 10.8.4 (Mountain Lion), TeXShop 3.18 で pTeX は問題なく動いている。

やっておくべき?おまじない:
(1) texmf.cnf の書き換え
shell_escape_commands = \
bibtex,bibtex8,\
kpsewhich,\
makeindex,\
mpost,\
repstopdf,\
の部分を
shell_escape_commands = \
bibtex,bibtex8,bibtexu,pbibtex,upbibtex,biber,\
kpsewhich,\
makeindex,mendex,texindy,\
mpost,pmpost,\
repstopdf,epspdf,extractbb,\
に書き換える(\の部分は実際にはバックスラッシュ)。
(2) ヒラギノフォントを埋め込むための設定。
ターミナルで次を実行する。
$ sudo updmap-sys --setoption kanjiEmbed hiragino

※主たる情報源:Mac - TeX Wiki

困っていること


MacTeX 2013 をインストールしたら、pMetaPost が使えなくなった(バイナリ pmpost も見当たらなくなった)。
→久しぶりにやってみたら、今度は再インストールできた(何がまずかったのだろう…?)。
しかもヒラギノフォントも使えるようになっている!
以下は自分用の対応表です。
hminrn-hヒラギノ明朝 Pro W3・横
hminrn-vヒラギノ明朝 Pro W3・縦
hminrbn-hヒラギノ明朝 Pro W6・横
hminrbn-vヒラギノ明朝 Pro W6・縦
hgothrn-hヒラギノ角ゴ Pro W3・横
hgothrn-vヒラギノ角ゴ Pro W3・縦
hgothrbn-hヒラギノ角ゴ Pro W6・横
hgothrbn-vヒラギノ角ゴ Pro W6・縦
hgothrebn-hヒラギノ角ゴ Std W8・横
hgothrebn-vヒラギノ角ゴ Std W8・縦
hmgothrn-hヒラギノ丸ゴ Pro W4・横
hmgothrn-vヒラギノ丸ゴ Pro W4・縦

MacTeX 2012 のメモ


MacTeX-2012 distribution がリリースされている.
(e-pTeX のバージョンは Version 3.1415926-p3.3-110825-2.4)
Mac mini (Mid 2010) および MacbookAir (2011), Mac OS X 10.7.4 (Lion), TeXShop-64 で pTeX は問題なく動いている.
OTFパッケージが含まれているが,ヒラギノフォントを使うためにはちょっとした作業が追加で必要.
インストールおよび追加設定についての具体的手順が TeX Wiki内のページ で説明されており,これに従えば良い.

pMetaPost


最新版のMetaPostを日本語化したpMetaPostがtlptexliveリポジトリにて提供されている.
このインストール手順も上述の TeX Wiki内のページ にある.ありがたい.
タイプセットエンジン
pMetaPost用のタイプセットエンジンを fuhmi's backyard にて配布しています.
ご自由にどうぞ.

MacTeX 2011 のメモ


MacTeX distribution の最新版がリリースされている(2011.7.4 に公開).
(pTeX のバージョンは,e-pTeX, Version 3.1415926-p3.2-110415-2.3)
Mac mini (Mid 2010), Mac OS X 10.7 (Lion), TeXShop-64 で pTeX は問題なく動いている.
OTF パッケージの有無については未確認(後述の方法でインストールした OTF パッケージは問題なく使えている模様).
MetaPost も問題なし(MetaPost のバージョンは 1.504).

OTFパッケージの追加


熊本学園大の小川先生のサイトにて
MacTeX 2011 の pTeX でヒラギノフォントを使えるように設定する
Additional Tools for MacTeX/TeXLive 2011 というツールが配布されている.
合わせて GPL Ghostscript 9.02 もインストールするようにとのこと.

MacTeX 2010 のメモ


MacTeX distribution の最新版がリリースされている(2010.9.8)。
このバージョンから、日本語TeXもパッケージに含まれるようになった。
(pTeX のバージョンは 3.1415926-p3.1.11)
奥村先生による jsclass ファイル群も含まれている。
(ディレクトリは /usr/local/texlive/2010/texmf-dist/tex/platex/jsclasses )
インストールしたばかりなので、自分の日本語TeX環境では Drag and Drop pTeX を利用する状態のまま。
後で TeXShop で pLaTeX をデフォルトで使うための設定を調べてみよう。

OTFパッケージのインストール

ymatz :: log – TeX Live 2010にOTFパッケージを導入する にインストールの手順が示されている。
その手順をスクリプトにまとめたものが以下。
適当な名前で保存してターミナルで実行すると必要なファイルをダウンロードして OTF パッケージをインストールする。
#!/bin/sh

curl http://psitau.kitunebi.com/otfstable.zip > ~/Desktop/otfstable.zip
sudo unzip ~/Desktop/otfstable.zip -d /usr/local/texlive/texmf-local/tex/latex/
cd /usr/local/texlive/texmf-local/tex/latex/otfstable
sudo ./makeotf

cd /usr/local/texlive/texmf-local/fonts/tfm
sudo ln -s ../../tex/latex/otfstable/tfm otfstable
cd ../vf
sudo ln -s ../../tex/latex/otfstable/vf otfstable

sudo mkdir /usr/local/texlive/texmf-local/fonts/map
sudo mkdir /usr/local/texlive/texmf-local/fonts/map/dvipdfm
cd /usr/local/texlive/texmf-local/fonts/map/dvipdfm/
sudo ln -s "../../../tex/latex/otfstable/fontmap/hiraginox.map(for dvipdfmx)" hiraginox.map

sudo mkdir /usr/local/texlive/texmf-local/fonts/opentype
sudo mkdir /usr/local/texlive/texmf-local/fonts/opentype/public
sudo mkdir /usr/local/texlive/texmf-local/fonts/opentype/public/hiragino
cd /usr/local/texlive/texmf-local/fonts/opentype/public/hiragino/
sudo ln -s "/Library/Fonts/ヒラギノ明朝 Pro W3.otf" HiraMinPro-W3.otf
sudo ln -s "/Library/Fonts/ヒラギノ明朝 Pro W6.otf" HiraMinPro-W6.otf
sudo ln -s "/Library/Fonts/ヒラギノ角ゴ Pro W3.otf" HiraKakuPro-W3.otf
sudo ln -s "/Library/Fonts/ヒラギノ角ゴ Pro W6.otf" HiraKakuPro-W6.otf
sudo ln -s "/Library/Fonts/ヒラギノ角ゴ Std W8.otf" HiraKakuStd-W8.otf
sudo ln -s "/Library/Fonts/ヒラギノ丸ゴ Pro W4.otf" HiraMaruPro-W4.otf

sudo texhash


※ このやり方だと expert オプションが正しく機能しないようだ。
これは otf パッケージの配布元の注意書きにあるように、
makeotf において ovp2ovf の ver. 2.1 (MacTeX 2010 同梱?) を使うため
VFファイルが適切に作成されないことに依るのだろう。

TeX for Snow Leopard (Mac OS X 10.6)


小川先生のウェブページ (JIS X0212 for pTeX)で配布されている Drag & Drop pTeX をインストールするのが良い。これは「TeXShopからの使用を主目的に、ApplicationsフォルダにDrag & Dropすればインストールが済むバンドル・パッケージ」とのこと。
TeXShopでの設定の仕方は同梱の readme に書いてあるけれども、自分用の覚え書きとして。
(私は Shift_JIS / ヒラギノ埋め込み を利用)
  • 内部設定で pTeX のパスを /Applications/pTeX.app/teTeX/bin に変更する。
  • TeX + dvips + distiller の LaTeX の欄を dotexshop に変更する。
pTeX.app/teTeX/share/texmf/ptex/platex/misc あたりに自作スタイルファイルを置くことにする。
デスクトップにエイリアスを作っておくと便利かも。
pTeX.app を実行すると mktexlsr してくれる。

新しいマシンでTeX環境を構築する (for Mac OS X)

から pTeX と otf.sty のインストーラをダウンロードしてインストールする。
Beamerを使うならばGhostScriptもダウンロードしてインストールしておく。 から TeXShop をダウンロードしてインストールする。
  • ハードディスクの容量が逼迫していないならば
http://www.tug.org/mactex/
から MacTeX-2008 distribution をダウンロードしてインストールする。
これは上記の pTeX と共存できる。

画像の読み込み関連

どうやる?


graphicxパッケージを利用する。
\usepackage[dvips]{graphics}
で、epsファイルを(たとえばそれが hogehoge.eps ならば)
\includegraphics{hogehoge}
によって取り入れることが出来る。

epsファイルへの変換


ImageMagick を使う。
コマンドライン上で
convert hogehoge.jpg hogehoge.eps
とすれば、hogehoge.jpg というjpeg画像ファイルを hogehoge.eps というepsファイルに変換してくれる。

pdfファイルの読み込みは?


コマンドラインで
ebb hogehoge.pdf
として hogehoge.ebb というファイルを生成する必要がある。

※ pdfファイルのバージョンが高い(1.4以上)だと
Version of PDF file (1.4) is newer than version limit specification.
Can't handle file type for file named hogehoge.pdf
というエラーメッセージが返される.
一つの対処法として,pdfファイルのバージョンを無理矢理書き換えることで
ebb が通るファイルを作るという方法があり,
具体的には(もし hogehoge.pdf のバージョンが 1.4 ならば)
sed s/PDF-1.4/PDF-1.3/ hogehoge.pdf > fuwafuwa.pdf
とすることで得られる fuwafuwa.pdf では ebb によって bounding box が取得できる.

参考にしたページ

"LaTeX Font Warning"を回避する


プリアンブルに
\DeclareFontShape{JT1}{gt}{m}{it}{<->ssub*gt/m/n}{}
\DeclareFontShape{JT1}{mc}{m}{it}{<->ssub*mc/m/n}{}
\DeclareFontShape{JT1}{mc}{m}{sl}{<->ssub*mc/m/n}{}
\DeclareFontShape{JT1}{mc}{m}{sc}{<->ssub*mc/m/n}{}
\DeclareFontShape{JY1}{gt}{m}{it}{<->ssub*gt/m/n}{}
\DeclareFontShape{JY1}{mc}{m}{it}{<->ssub*mc/m/n}{}
\DeclareFontShape{JY1}{mc}{m}{sl}{<->ssub*mc/m/n}{}
\DeclareFontShape{JY1}{mc}{m}{sc}{<->ssub*mc/m/n}{}
という8行のおまじないを貼付けると良い。
otfパッケージを利用している場合には
\DeclareFontShape{JT1}{mg}{bx}{n}{<->ssub*mg/m/n}{}
\DeclareFontShape{JY1}{mg}{bx}{n}{<->ssub*mg/m/n}{}
の2行も付け加えておくと良いかも。

★参考にしたページ:
http://auemath.aichi-edu.ac.jp/~khotta/ghost/psfon...

Mac OS X の pTeX でヒラギノフォントを使う


otf パッケージを利用するのが一番簡単。
JIS X0212 for pTeX
から pTeX と otf.sty のインストーラをダウンロードして、インストールする。
必要に応じて mktexlsr をターミナルで実行。
TeX のソースファイルで
\usepackage[deluxe,expert]{otf}
を読み込むことで、ヒラギノフォントが使える。

見本用のサンプルコード:
\documentclass{jsarticle}
\usepackage[deluxe,expert]{otf}

\begin{document}

\begin{itemize}
\item {\rmfamily ヒラギノ明朝ProW3}
\item {\rmfamily\bfseries ヒラギノ明朝ProW6}
\item {\gtfamily ヒラギノ角ゴProW3}
\item {\gtfamily\bfseries ヒラギノ角ゴProW6}
\item {\gtfamily\ebseries ヒラギノ角ゴStdW8}
\item {\mgfamily ヒラギノ丸ゴProW4}
\end{itemize}

\end{document}

TeXShop用のマクロ


TeXShopに追加しておくと(個人的に)便利なマクロの覚え書き。

自作TeXスタイルを更新


--Applescript direct

set Source to "~/Documents/TeXstyles/"
set Destination to "/usr/local/share/texmf/ptex/platex/misc/mystyle/"
set Extentions to {".sty", ".cls"}

repeat with ext in Extentions
set ext to "*" & ext & " " 
do shell script "cp " & Source & ext & Destination with administrator privileges
end repeat
do shell script "/usr/local/bin/mktexlsr" with administrator privileges

自作TeXスタイル置き場を開く


--Applescript direct

set Directory to "~/Documents/TeXstyles/"
do shell script "open " & Directory

「今日のメモ」を開く


--Applescript direct

set Directory to "~/Documents/memo/"

set today to current date
set y to (year of today) as text
set y to (character 3 of y) & (character 4 of y)
set m to (month of today) as integer
if m < 10 then set m to "0" & (m as text)
set d to (day of today) as text
set ToBeOpen to "memo" & y & m & d & ".tex"
set ToBeOpen to Directory & ToBeOpen

do shell script "touch " & ToBeOpen
do shell script "open " & ToBeOpen & " -a TeXShop"

環境で囲む


--Applescript direct

set Environments to {"pmatrix", "equation", "proof", "enumerate"}

tell application "TeXShop"
set Selected to the content of the selection of the front document

choose from list Environments with prompt "選んで。"
set env to result

set Selected to "\\begin{" & env & "}\n" & Selected & "\n\\end{" & env & "}\n"
set the content of the selection of the front document to Selected

	tell application "System Events"
	repeat with i from 1 to 2
	keystroke "p" using control down
	end repeat
	end tell

end tell

TeXShopでのtips

engine ファイルの追加に際する一般的注意


私自身が(注意点を忘れてしまって)「なんでうまくいかないんだろう?」と考え込みがちなちょっとしたポイントのメモ.
  • engine ファイルは文字コードを utf-8,改行コードを LF にして作成しないと正しく動作しない
  • 最後の空行は必要で,これを外すと正しく動作しない
  • engine ファイルに実行権限が与えられていないと動作しない

landscapeオプションの文書を扱う

~/Library/TeXShop/Engines に、以下の内容のファイルを
たとえば Landscape.engine というファイル名で保存する。
(既にある XeTeX.engine をコピーして中身を書き換えるとよい)
#!/bin/tcsh

set path= ($path /usr/texbin /usr/local/bin)
set tex_source = $argv[1]:r

platex $tex_source.tex
dvipdfmx -l -o $tex_source.pdf $tex_source.dvi

※ 最後の空行も含めること。

TeXソースファイルの先頭の行に
%!TEX TS-program = Landscape
というコメント行を加えておくと、
そのファイルをタイプセットする際には上記のスクリプトに従ってコンパイルするようになり、
適切に横長のPDFファイルが生成される。

※追記:engineファイルを利用しなくても、TeXソースの冒頭に
\usepackage[reset,papersize={297truemm,210truemm},vmargin=2truecm,hmargin=3truecm]{geometry}
\AtBeginDvi{\special{pdf: pagesize width 297truemm height 210truemm}}
などと書き込んでおけば良い。
紙のサイズを geometry パッケージで指定しているのは個人的な好みなので,
この行は必ずしも必要ではない。
\AtBeginDvi 命令によって出力される PDF ファイルのサイズを指定できる、
というのがポイント。
(→奥村晴彦さんの美文書作成入門第5版,322ページ)

※追記2:少なくとも MacTeX 2011 の pLaTeX や pdfLaTeX を使っている限りにおいては単に
\usepackage[a4paper,landscape]{geometry}
などとすれば出力されるPDFファイルもちゃんと横置きになっている.

Beamerクラスの文書を扱う

~/Library/TeXShop/Engines に、以下の内容のファイルを
たとえば Beamer.engine というファイル名で保存する。
#!/bin/tcsh

set path= ($path /usr/texbin /usr/local/bin /sw/bin)
set tex_source = $argv[1]:r
set temp_ps = temp.ps

platex $tex_source
dvips -P pdf -f -t a4 -o $temp_ps $tex_source.dvi
psnup -1 -W128mm -H96mm -pa4 $temp_ps $tex_source.ps
rm $temp_ps
ps2pdfwr -sPAPERSIZE=a4 $tex_source.ps $tex_source.pdf

TeXソースファイルの先頭の行に
%!TEX TS-program = Beamer
というコメント行を加えておくと、
そのファイルをタイプセットする際には上記のスクリプトに従ってコンパイルするようになり、
適切にPDFファイルが生成される。

※ psnup は psutils という名前のコマンド群の中に含まれるもの。
デフォルトではインストールされていないようなので、
FinkCommander などを用いて psutils をインストールしておく必要がある。

※ 私の当初の環境では日本語が文字化けしていた。
これは ps2pdf で ps ファイルから pdf ファイルを生成する際に問題があったための模様。
小川さんのページからGhostScriptをダウンロードしてインストールし直し、
同梱されていたスクリプトで和文フォントを pdf に埋め込む設定にしたところ、解決した。

※※ 上記のスクリプトを使うよりも、MacTeX-2008 などに含まれている XeLaTeX を利用した方が
(1) XeLaTeX を利用する方がコンパイルにかかる時間が短い
(2) Mac OS が認識する任意のフォントが使える、デフォルトで文字化けもない
という利点があるのでよさそうだ。
MacTeX-2008 は Mac OS 10.5 以前の pTeX や 10.6 以降の Drag and Drop pTeX と共存できる(HDD容量は1GB強ほど余計に食うが)。
TeXShop の設定は pTeX/Shift JIS にしておいて、XeLaTeX 文書を扱うときは文頭に
%!TEX encoding = UTF-8 Unicode
%!TEX TS-program = XeLaTeX
というコメント行を加えておくと良い。

メモ:あとでまとめる


Terminal.app ではデフォルトでは ~/.bashrc は読み込まれない。
~/.bash_profile を以下の内容で作成すると読み込まれるようになる。
if [ -f ~/.bashrc ] ; then
. ~/.bashrc
fi
★参考にしたページ:
http://memo358.blog18.fc2.com/blog-entry-30.html

~/.bashrc にて次のエイリアスを登録しておく(asymptote で日本語を通すための下準備)。
alias platex-utf8='platex -kanji=utf8'
★参考にしたページ:
http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?Asymp...

TeX macro

集合

\newcommand{\set}[2]
{\setbox1=\hbox{$\displaystyle\left\{#1#2\right\}$}
\left\{#1\hskip0.35em\vrule height\ht1\hskip0.35em#2\right\}}
※e-TeXを使っているならば、\middleというプリミティブが使えるので次のようでも良い。
\newcommand{\set}[2]{\left\{#1\,\middle\vert\,#2\right\}}

置換行列(試作品)

※ \@tfor を使うので \makeatletter と \makeatother で挟む必要がある。
\makeatletter
\def\permat#1{%
\newcount\tempi%
\newcount\tempj%
\newcount\matsize%
\@tfor\temp:=#1\do{\advance\matsize by 1}%
\tempi=\matsize \multiply\tempi by 15 \advance\tempi by -8\relax%
\tempj=\matsize \multiply\tempj by 7\relax
\left(\begin{picture}(\tempi,\tempj)(-1,0)%
\@tempcnta=0%
\@tfor\temp:=#1\do{%
\advance\@tempcnta by 1\relax\@tempcntb=1\relax%
\tempi=\@tempcnta \multiply\tempi by 15 \advance\tempi by -15\relax%
\tempj=\temp \multiply\tempj by -2 \advance\tempj by 1\relax
\advance\tempj by \matsize \multiply\tempj by 6\relax%
\put(\tempi,\tempj){$1$}
} %
\end{picture}\right)}
\makeatother
使用例:
$$
\permat{123},\quad
\permat{132},\quad
\permat{213},\quad
\permat{231},\quad
\permat{312},\quad
\permat{321}
$$
成分は0は省略して1だけを書く仕様。
より正直に言えば、0を適切に書くことに成功していない。

あるマクロが既に定義されているかどうかのチェック


\csname というマクロが定義されているかに応じた条件分岐は
\@ifundefined{csname}{未定義の場合}{定義済みの場合}
というコマンドによって実行できる。
一つの応用例として、次のようなマクロを作ってみた:
\def\高{\@ifundefined{CID}{高}{\CID{8705}}}
これは、OTFパッケージを読み込んでいる場合には \CID というコマンドが定義されているので \CID{8705} という命令を実行(いわゆる「はしご高」を出力)し、そうでなければ普通の「高」を出力するようなマクロである。

★参考にしたページ:
http://www.tex.ac.uk/cgi-bin/texfaq2html?label=isd...

置換

※ \@tfor を使うので \makeatletter と \makeatother で挟む必要がある。
\makeatletter
\newcount\@permlength%
\newcommand{\@prepermcount}[1]{%
	\@permlength=0\relax%
	\@tfor\temp:=#1\do{%
		\advance\@permlength by 1\relax%
	}%
}
\newcommand{\@permupper}[1]{%
	\@tempcnta=0%
	\,\@tfor\temp:=#1\do{%
		\advance\@tempcnta by 1\relax%
		\the\@tempcnta%
		\ifnum\@tempcnta<\@permlength%
			\ \ %
		\fi%
	}\,%
}
\newcommand{\@permlower}[1]{%
	\@tempcnta=0%
	\,\@tfor\temp:=#1\do{%
		\advance\@tempcnta by 1\relax%
		\temp%
		\ifnum\@tempcnta<\@permlength%
		\ \ %
	\fi}\,%
}
\newcommand{\perm}[1]{%
	\@prepermcount{#1}%
	\genfrac{(}{)}{0pt}{0}{\@permupper{#1}}{\@permlower{#1}}%
}
\makeatother
たとえば \perm{35124} のように使う。

左線付きの定理環境


まずは最小版(amsthm を読み込まない)
% 前提となるパッケージ
\usepackage{framed,color}

% 左線を書く (needs framed, color)
\newenvironment{myleftbar}[1]{
\def\FrameCommand{{\color{#1}\vrule width 3pt }\hspace{10pt}}% 
\MakeFramed {\advance\hsize-\width \FrameRestore}}%
{\endMakeFramed\par}

% 左線付き定理環境を定義するためのマクロ
\newcommand{\newtheorembar}[2][black]{
\newenvironment{#2}{\begin{myleftbar}{#1}\begin{vir#2}}
{\end{vir#2}\end{myleftbar}}
\newtheorem{vir#2}}

% 定義の例
\newtheorembar[cyan]{ex}{例}

次に自分用(amsthm を読み込む,otf の利用を前提する)

% 前提となるパッケージ
\usepackage{amsthm,framed,color}

% 定理のスタイル (needs amsthm)
\newtheoremstyle{frame}
{\topsep}{\topsep}{\rmfamily\mcfamily}
{0pt}{\sffamily\gtfamily\bfseries}{.}{.5em}
{\thmname{#1} \thmnumber{#2}\thmnote{ (#3)}\rmfamily}

% 左線を書く (needs framed, color)
\newenvironment{myleftbar}[1]{
\def\FrameCommand{{\color{#1}\vrule width 3pt }\hspace{10pt}}% 
\MakeFramed {\advance\hsize-\width \FrameRestore}}%
{\endMakeFramed\par}

% 左線付き定理環境を定義するためのマクロ
\newcommand{\newtheorembar}[2][black]{
\newenvironment{#2}{\begin{myleftbar}{#1}\begin{vir#2}}
{\end{vir#2}\end{myleftbar}}
\theoremstyle{frame}
\newtheorem{vir#2}}

% 定義の例
\newtheorembar[cyan]{ex}{例}
otf パッケージを使う場合,デフォルトだと定理の見出しのフォントが太い明朝体になるので,
newtheoremstyle を使って見出しのフォントをゴシックとするような新しい theoremstyle を定義している.

連立一次方程式


与えられた拡大係数行列を持つ連立一次方程式を,変数の位置が縦に揃うようにして表示するためのマクロ.
alignat 環境を利用するので amsmath パッケージの読み込みが必要.
\makeatletter

\newif\iffirstterm
\newcount\c@varindex
\newcount\coefficient

\def\@pls{&{}+{}&}
\def\@mns{&{}-{}&}
\def\@eq{&{}={}&}
\def\@void{&{}&}
\def\suffix{{\@arabic{\c@varindex}}}
\def\which#1{\ifcase\c@varindex\or #1\else?\fi}

% 未知変数の命名規則
\def\unknown#1{\gdef\@unknown{#1}}
\unknown{x_\suffix} % デフォルトの変数名は x_i

\def\eq#1;#2 {
\global\c@varindex=1\relax
\global\firsttermtrue
\@for\temp:=#1\do{
  \global\coefficient=\temp\relax
  \ifnum\coefficient=0
    \@void
  \else
    \ifnum\coefficient<0
      \global\multiply\coefficient by -1\relax
      \iffirstterm
        \global\firsttermfalse
        -
      \else
        \@mns
      \fi
    \else
      \iffirstterm
        \global\firsttermfalse
      \else
        \@pls
      \fi
    \fi
    \ifnum\coefficient=1
    \else
      \@arabic{\coefficient}
    \fi
    \@unknown
  \fi
  \global\advance\c@varindex by 1\relax
}
\@eq #2
}

\def\lineq#1{\global\let\oldslash=\\\gdef\\{\oldslash\eq}\eq#1\global\let\\=\oldslash\global\let\oldslash=\relax}

\makeatother

使用例:
\begin{alignat*}{5}
\lineq{
1, 0, 1, 2; 6 \\
-2, 1, 4, 1; 3 \\
4, -3, -4, 1; -3 \\
-1, 1, 2, 1; 4
}
\end{alignat*}

\unknown{z_\suffix}

\begin{alignat*}{5}
\lineq{
1, 0, 1, 2; 6 \\
-2, 1, 4, 1; 3 \\
4, -3, -4, 1; -3 \\
-1, 1, 2, 1; 4
}
\end{alignat*}

\unknown{\which{x\or y\or z\or u}}

\begin{alignat*}{5}
\lineq{
1, 0, 1, 2; 6 \\
-2, 1, 4, 1; 3 \\
4, -3, -4, 1; -3 \\
-1, 1, 2, 1; 4
}
\end{alignat*}

default.sty


よく使うマクロの定義をまとめたスタイルファイルを作っておくと便利。
そのようなスタイルファイルの一例を挙げてみる。
(以下の内容を,ファイル名を "default.sty" として保存して使う。
 別のファイル名にする場合には,2行目の ProvidePackage 命令の最初の引数を変更すること)
※ OTFパッケージをインストールしていない場合には5行目,18行目,19行目を削除する。
\NeedsTeXFormat{pLaTeX2e}
\ProvidesPackage{default}[2009/12/21 v1.0 written by fuhmi] % 2行目
\RequirePackage{amsmath,amsthm,amssymb}
\RequirePackage{stmaryrd,pifont,okumacro}
\RequirePackage[deluxe,expert]{otf} % 5行目
\RequirePackage{type1cm}

%     Avoid unexpected font warnings by pTeX

\DeclareFontShape{JT1}{gt}{m}{it}{<->ssub*gt/m/n}{}
\DeclareFontShape{JT1}{mc}{m}{it}{<->ssub*mc/m/n}{}
\DeclareFontShape{JT1}{mc}{m}{sl}{<->ssub*mc/m/n}{}
\DeclareFontShape{JT1}{mc}{m}{sc}{<->ssub*mc/m/n}{}
\DeclareFontShape{JY1}{gt}{m}{it}{<->ssub*gt/m/n}{}
\DeclareFontShape{JY1}{mc}{m}{it}{<->ssub*mc/m/n}{}
\DeclareFontShape{JY1}{mc}{m}{sl}{<->ssub*mc/m/n}{}
\DeclareFontShape{JY1}{mc}{m}{sc}{<->ssub*mc/m/n}{}
\DeclareFontShape{JT1}{mg}{bx}{n}{<->ssub*mg/m/n}{} % 18行目
\DeclareFontShape{JY1}{mg}{bx}{n}{<->ssub*mg/m/n}{} % 19行目

%     PostScript Fonts:
%       Avant Garde, Bookman, Courier, Helvetica
%       New Century, Palatino, Times, Zapf Chancery

\newcommand{\agfamily}{\fontfamily{pag}\selectfont}
\newcommand{\bkfamily}{\fontfamily{pbk}\selectfont}
\newcommand{\crfamily}{\fontfamily{pcr}\selectfont}
\newcommand{\hvfamily}{\fontfamily{phv}\selectfont}
\newcommand{\ncfamily}{\fontfamily{pnc}\selectfont}
\newcommand{\plfamily}{\fontfamily{ppl}\selectfont}
\newcommand{\tmfamily}{\fontfamily{ptm}\selectfont}
\newcommand{\zcfamily}{\usefont{OT1}{pzc}{m}{n}}

\newcommand{\textag}[1]{{\agfamily#1}}
\newcommand{\textbk}[1]{{\bkfamily#1}}
\newcommand{\textcr}[1]{{\crfamily#1}}
\newcommand{\texthv}[1]{{\hvfamily#1}}
\newcommand{\textnc}[1]{{\ncfamily#1}}
\newcommand{\textpl}[1]{{\plfamily#1}}
\newcommand{\texttm}[1]{{\tmfamily#1}}
\newcommand{\textzc}[1]{{\zcfamily#1}}

%     Modification

\numberwithin{equation}{section}
\renewcommand{\labelenumi}{{\upshape(\theenumi)}}
\renewcommand{\emph}[1]{{\gtfamily\sffamily\bfseries\boldmath#1}}

%     Frequently used

\newcommand{\N}{\mathbb{N}}
\newcommand{\Z}{\mathbb{Z}}
\newcommand{\Q}{\mathbb{Q}}
\newcommand{\R}{\mathbb{R}}
\newcommand{\C}{\mathbb{C}}
\newcommand{\e}{\varepsilon}

\newcommand{\abs}[1]{\left|#1\right|}
\newcommand{\floor}[1]{\left\lfloor#1\right\rfloor}
\newcommand{\ceil}[1]{\left\lceil#1\right\rceil}

\newcommand{\set}[2]
{\setbox1=\hbox{$\displaystyle\left\{#1#2\right\}$}%
\left\{#1\hskip0.35em\vrule height\ht1\hskip0.35em#2\right\}}

\newcommand{\then}{\DOTSB \;\Longrightarrow \;} % implication arrow "==>"

%     log-type operators

\let\Re = \relax
\let\Im = \relax
\DeclareMathOperator{\Re}{Re}
\DeclareMathOperator{\Im}{Im}
\DeclareMathOperator*{\Res}{Res}
\DeclareMathOperator{\tr}{tr}

TeX tips

用紙サイズの自由な変更

たとえばTeXソースの冒頭に
\usepackage[reset,papersize={297truemm,210truemm},vmargin=2truecm,hmargin=3truecm]{geometry}
\AtBeginDvi{\special{pdf: pagesize width 297truemm height 210truemm}}
などと書き込んでおけば横置き(ランドスケープ)のA4用紙となる。
geometryパッケージのオプション papersize と \AtBeginDvi 命令のパラメタを連動させること。
任意のサイズを指定できる。
(→奥村晴彦さんの美文書作成入門第5版,322ページ)

用紙全体をマージンなしで利用したい

geometryパッケージを利用するのが簡単。
\usepackage[a4paper,margin=0mm]{geometry}% A4用紙,マージンなし
とすれば良い。

応用例として、たとえば
\begin{document}
\noindent
\unitlength=1truemm
\begin{picture}(210,297) % A4用紙のサイズは 210mm × 297mm
\put(0,0){\includegraphics{form.pdf}} % pdf ファイルを読み込む
% \put 命令でモノを配置する
\end{picture}
\end{document}
のようにすれば、form.pdf というPDFファイルの上に文字などを書き込んだPDFファイルを作ることが出来る。
画像ファイルを「背景」として読み込み、「文字情報のレイヤー」をTeXで処理することで、
ちょっとしたポスターやちらしを作る、といったことも考えられる。
(この用途の場合には、多様な文字種が利用出来る XeLaTeX を利用するのが良いだろう。)

enumerate環境の項目番号の出力形式を変更する


enumerate環境は番号付きのリストを出力するための環境で、たとえば
\begin{enumerate}
\item TeX
\item LaTeX
\item XeTeX
\item Omega
\end{enumerate}
などと書くと、デフォルトでは
1. TeX
2. LaTeX
3. XeTeX
4. Omega
のような出力が得られる。
ここでたとえば、あらかじめ
\renewcommand{\theenumi}{\Alph{enumi}}
\renewcommand{\labelenumi}{【\,\theenumi\,】}
のようにプリアンブルに書いておくと、上と同じソースの出力は
【A】 TeX
【B】 LaTeX
【C】 XeTeX
【D】 Omega
のようになる。
なお、カウンタの値の出力形式としては
\arabic(アラビア数字)
\roman(小文字のローマ数字)
\Roman(大文字のローマ数字)
\alph(小文字のアルファベット)
\Alph(大文字のアルファベット)
の5種類が用意されている。

自前のtheoremstyleを作る

amsthm パッケージでは \theoremstyle コマンドが認識する引数として
plain(見出しが立体ボールド、本文が斜体)
definition(見出しが立体ボールド、本文が立体)
remark(見出しが斜体、本文が立体)
が定義されている。これを追加するための原始的な方法は
以下のようにして \th@hogehoge という形のマクロを定義することである。
たとえば
\makeatletter
\def\th@comment{
\thm@headfont {\sffamily\gtfamily\bfseries }\gtfamily
\thm@preskip \topsep \divide \thm@preskip \tw@ \thm@postskip \thm@preskip
}
\makeatother
と書いておくと、\theoremstyle{comment} とすることで
見出しがサンセリフ・ゴシックの立体ボールド、本文がゴシックの定理環境が定義出来る。

jsクラスで geometry パッケージを使うときの注意


jsクラスで文字の大きさを 10pt 以外に指定するときは、
geometry パッケージのオプション引数における長さの指定を
in, cm などの単位ではなくて truein, truecm などによって行うこと。
例を挙げる。
\documentclass[a4paper,12pt]{jsarticle}
\usepackage[papersize={210truemm,297truemm},
top=3truecm,bottom=3truecm,left=2truecm,right=2truecm]{geometry}
とすれば、A4サイズ(210mm×297mm)の紙で上下に 3cm、左右に 2cm のマージンを設ける、
という指定がうまくいく。

csnameとその応用


コマンド(コントロールシーケンス)を
\csname コマンド名\endcsname
によって表現することが出来る.たとえば
\csname textbf\endcsname{hoge}

\textbf{hoge}
と等価である.
このことの簡単な応用の一例を挙げてみる.
\newcommand{\set}[3][big]
{\csname#1l\endcsname\{#2\,\csname#1\endcsname|\,#3\csname#1r\endcsname\}}
これは集合の内包的記述 { #2 | #3 } を表すマクロで,
オプション引き数 #1 によって中括弧や仕切り線の大きさを変えることが出来る.

ps2pict

※ こういう名前のソフトウェアなりパッケージなりがあるわけではない(と思う)。
※ pMetaPostという日本語化されたMetaPostがある(ことを最近知った)ので、もはや下記のような変な努力は必要ない。

これは何?

日本語化された MetaPost が鈴木秀幸氏によって配布されているが、
これは古いバージョンに基づいたものである。
最新のバージョンの MetaPost で図画ファイルを作りつつ、
そこに日本語のラベルを貼り付けるには、どうすれば良いだろう?
「あきらめる」という道を選ぶことも一つの手だが、出来ればなんとか日本語ラベルを実現したい。
う〜ん…。
あ、MetaPost が生成する PS ファイルを TeX ファイルに読み込んで、
そこに無理やり「重ねうち」すれば、手間はかかるけれど、上記の望みは実現出来るじゃん。

というわけで、PS ファイルから、上記の目的を達するのに適した TeX ソースを吐き出すような
Perl スクリプトをやっつけで書いてみました。

スクリプトの中身

#!/usr/local/bin/perl
open(IN,$ARGV[0]) || die "しかし $ARGV[0] が見当たらなかった!\n";
while ($_ = <IN>) {
 if ($_ =~ /%%BoundingBox:/)
 {
   $_ =~ s/%%BoundingBox: //g;
   $_ =~ s/ /,/g;
   @data = split(/,/,$_);
   $picturewidth = $data[2]-$data[0];
   $pictureheight = $data[3]-$data[1];
   $paperwidth = $picturewidth+10;
   $paperheight = $pictureheight+10;

   print "%!TEX encoding = UTF-8 Unicode\n";
   print "%!TEX TS-program = XeLaTeX\n";
   print "\\documentclass{minimal}\n";
   print "\\usepackage[dvipdfm]{graphicx}\n";
   print "\\usepackage[cm-default]{fontspec}\n";
   print "\\usepackage{type1cm}\n";
   print "\\usepackage{amsmath,amsthm,amssymb}\n";
   print "\\usepackage{stmaryrd,pifont}\n";
   print "\\usepackage{ifthen}\n";
   print "\\usepackage[paperwidth=$paperwidth";
   print "pt,paperheight=$paperheight";
   print "pt,margin=5pt]{geometry}\n";

   print "\\begin{document}\n";
   print "\\noindent%\n";
   print "\\begin{picture}($picturewidth,$pictureheight)($data[0],$data[1])\n";
   print "\\put($data[0],$data[1]){\\makebox{\\includegraphics{$ARGV[0]}}}%\n";
   print "\\end{picture}%\n";
   print "\\end{document}\n";
 }
}
close(IN);
特に何も工夫はない。
単に PS ファイルの Bounding Box の情報を抜き出してから
画像の大きさに「ほぼぴったり」の大きさの PDF ファイルを出力するようなオプションで
geometry パッケージを呼び出すようにしておいて、
その画像を picture 環境内にべたっと貼り付ける、という一連の作業を自動化しただけのもの。
あとは put 命令で試行錯誤しながらちまちまと文字を重ねうちしていけば良いだろう。
なお、このスクリプトは XeLaTeX での使用を想定して書かれている。

使い方

上記の内容を ps2pict.pl などという名前で保存しておき、
読み込みたい PS ファイル(それを hoge.mps としよう)と同じフォルダに置いておいて、
コマンドライン上で
perl ps2pict.pl hoge.mps > out.tex
などとやると、同じフォルダ内に
%!TEX encoding = UTF-8 Unicode
%!TEX TS-program = XeLaTeX
\documentclass{minimal}
\usepackage[dvipdfm]{graphicx}
\usepackage[cm-default]{fontspec}
\usepackage{type1cm}
\usepackage{amsmath,amsthm,amssymb}
\usepackage{stmaryrd,pifont}
\usepackage{ifthen}
\usepackage[paperwidth=150pt,paperheight=169pt,margin=5pt]{geometry}
\begin{document}
\noindent%
\begin{picture}(140,159)(-70,-89)
\put(-70,-89){\makebox{\includegraphics{hoge.mps}}}%
\end{picture}%
\end{document}
といった感じの内容を持つ out.tex というファイルが生成される。

Sublime Text2 で(p)LaTeX文書を扱う

0. 主たる情報源

mizchi blog "プログラミングエディタ Sublime Text2 を使ってみよう!"
とどろぐ! "Sublime Text 2でTeXをコンパイルする"

※ 1,2 は mizchi blog の記事を,3,4,5 はとどろぐ!の記事をそれぞれ参考にした.
※ MacTeX 2011 を使うことを前提とする.

1. Sublime Text2 をインストール

@mizchi さんに従って,とりあえず開発版をインストールしてみた.
http://www.sublimetext.com/dev

2. Package Control をインストール

View メニュー内の Show Console (ctrl+`) でコンソールを表示させておいて,
import urllib2,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();os.makedirs(ipp) if not os.path.exists(ipp) else None;open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read())
を実行する(一行で).

3. LaTeXTools をインストール

cmd+shift+p でコントロールパネルを開き,
Package Control: Install Package
を選ぶと,インストール可能なパッケージの一覧が取得される.
適当に latex とか文字を打ち込むと LaTeXTools が見つかるので,それを選ぶ.

4. LaTeXTools を微調整

そのままだとpLaTeXが通らないので,少しファイルをいじる.
~/Library/Application Support/Sublime Text 2/Packages/LaTeXTools/LaTeX.sublime-build
の34行目辺りにある
"cmd": ["latexmk", 
    "-e", "\\$pdflatex = 'pdflatex %O -interaction=nonstopmode -synctex=1 %S'",
    //"-silent",
    "-f", "-pdf"],
の最後の "-pdf" を "-pv" に変更する.
("-pdf" は pdflatex でコンパイルするためのオプション,
 "-pv" はコンパイル後にPDFファイルをプレビューするためのオプション)

5. latexmk の設定を微調整

こちらもまたpLaTeXを使うために,少しファイルを準備する.

(1) 適当な場所に dvipdfm_call.sh というシェルスクリプトファイルを作って設置する.
その中身は以下の通り.
#!/bin/sh

if [ "$2" = "" ]; then
dvipdfmx $1
else
dvipdfmx -o $2 $1
fi

(最後の空行を忘れないように)
私は ~/myscript/ というディレクトリを作って,そこに置いた.

(2) ホームディレクトリに ~/.latexmkrc というファイルを作成する.
その中身は以下のようにした.
$latex ="platex";
$bibtex = "pbibtex";
$makeindex = "mendex";
$dvipdf = "sh ~/myscripts/dvipdfmx_call.sh";
$dvips = "dvipsk";
$pdf_mode = 3;
$pdf_previewer = "open -a preview.app";