Tips & Information 今回のお題:
『(p)(La)TeX (など)に関するメモ』


●動機

とりあえず、自分用メモ。

●内容

B5 → A4 変換 (13pt / 2枚割付 9pt の実現)

このようなときは、11pt で B5 に印刷して、それを A4 に変換すると、 そこそこいい感じの出力が得られる。B5 は 257x182[mm], A4 は 297x210[mm] なので、前者の出力は 11[pt] × (297 ÷ 257) = 12.71[pt] 、後者の出力は 11[pt] × (210 ÷ 257) = 8.988[pt] となる。手順は以下。

% head -1 b5.tex                         # documentclass は次のように指定
\documentclass[11pt,b5j]{jarticle}
% platex b5.tex                          # タイプセット
% platex b5.tex                          # タイプセット(\ref の解決)
% xdvi -paper b5 b5.dvi                  # B5 サイズで preview
% dvips -T 182mm,257mm b5.dvi            # サイズ明示して変換
% psresize -pA4 -Pb5 b5.ps > a4.ps       # A4 サイズに変換
% psnup -2 a4.ps > a4-2.ps               # (2枚割付)

タイプセット後、プリントアウトまで一息にやりたい場合は、 dvips に -f (フィルタとして動作)を指定して、次のようにする。

% dvips -f -T 182mm,257mm b5.dvi | psresize -pa4 -Pb5 | psnup -2 | lpr -Plpn

(TUT 学内限定) F-101 の環境では、dvips の設定 (下記「印刷結果が上にずれる対策 (根本的版)」参照)をした上で、 dvips に追加のオプション -O 0pt,0pt を渡す必要がある (こうしないと、変な方向にオフセットがかかる)。 dvips の設定をしていない状態での動作は未確認。


minipage 環境の中でインデントがなされない

minipage 環境では、変数 \parindent が 0\Cwd になるために起こる。インデントをつけたい minipage の始まり (\begin{minipage} の後)に、\setlength{\parindent}{1\Cwd} (これが通常時の値)と書けばよい。

私の記憶によれば、breakbox 環境内でも同じことが起こったように思う。


ページをまたいで screen 環境が使いたい

breakbox 環境が使えるかもしれない。角が四角いのはご愛敬。

……探したんだけど、ダウンロードできるサイトが見つからなかった。 F-101 でなら、~e001041/(texinputs/?)eclbkbox.sty がスタイルファイルなので、適当にコピーして使うとよい。


YaTeX でタイプセットできない

YaTeX で C-c t j したら、"Enter your main text:" と言われた。

"\documentclass" の前に何か文字が入ってないか確認すること。 C-c t j したときに間違って "j\documentclass" になってた、 とか。


YaTeX (on Meadow) でタイプセットできない

C-c t j したら、"Spawning child process: no such file or directory" と言われた。

私の場合は、YaTeX が直接の原因じゃなくて、Shell の設定が問題だった。

  1. Shell に Cygwin の bash を指定してた
  2. 諸事情で Cygwin が要らなくなって bash も消しちゃった
  3. Shell が見つからなくって問題発生
  4. Shell に CMD.EXE を指定 (dot.emacs.ja からコピー)
  5. Meadow/1.15/bin/cmdproxy.exe を使えと言われるのでその通りにする
  6. 何かうまくいかない。
  7. (setq shell-command-switch "\\/c") をコメントアウト
  8. うまくいった。
(setq explicit-shell-file-name "cmdproxy.exe")
(setq shell-file-name "cmdproxy.exe")

Meadow.exe があるディレクトリにパスを切って、上のように Shell の設定をすれば O.K. ということでした。


なんかタイプセットできない

Runaway argument?
{\contentsli 
! File ended while scanning use of \@writefile.
<inserted text>
        \par 
l.18 \begin{document}
           
? 

もし、上のようなエラーが出ているなら、まず (p)latex を終了し、 .aux ファイルを削除する。タイプセットしようとしたファイルが foo.tex だったら、foo.aux を削除する。その後タイプセットし直す。

\ref だとか \cite だとかを使っている場合は、 2 度タイプセットすること。

2 つの平行して動いている LaTeX タイプセッタが、 同じファイルを処理しようとしたときに発生するらしい。 YaTeX を使っていて、C-c t j を 2 連発するとよく発生する。 2 つの shell を使っていて、片方の shell でタイプセットを始めて、 それが終わらないうちにもう片方の shell でタイプセットをしようとしても、 同様のことになると思う。


\ref の図表番号がおかしい

図表番号が \section の番号と同じになっているっぽいとか、 figure 環境や table 環境の中の \label を参照しているなら、 \caption との位置の兼ね合いをチェック。 \label\caption より後に来てないとアウト。

\begin{figure}
 % \label{fig:fobar}  % ×: これはダメ
 \caption{図表キャプション}
 \label{fig:fobar}    % ○: ここなら O.K.
 :
\end{figure}

\input されるファイルで \includegraphics

\input されるファイルで \includegraphics を使う場合、指定する eps ファイルのパスには、親玉の .tex ファイルからのパスを書くこと。

以上のような場合、bar.tex には次のように書く。

\includegraphics{../eps/quux.eps}   % ×
\includegraphics{eps/quux.eps}      % ○

\input でなくて \include の場合はどうなのかわからないので要調査。


"Too Many unprocessed float" と言われた

図表がやたらとたくさんある場合に出る。 プログラムのテスト結果をレポートに載せるときなんかに起こりがち。

手作業で直す

エラーが出ている行のちょっと前に \clearpage 命令を入れる。これで未処理の float を flush してくれる。

here.sty を使う

here.sty を利用 (\usepackage{here}) して、 [htbp] が指定できるところに [H] と書く。 図表の配置が換わるかもしれないから、2 度タイプセットすること。

morefloats.sty を使う

morefloats.sty というのがあるらしい。使ったことがない。


横置き縦書きを指定する

\usepackage{landscape}

で横置き指定。

\documentclass[a4j]{tarticle}

で縦書き指定。

こいつを xdvi でプレビューするには、以下のようにする。

% xdvi -paper a4r hoge.dvi

latex と platex の微妙な差

「ページの残りの空白に、続く内容を詰めて入れるか?」というときに、 latex は割と入れてくれる方。platex は割と入れてくれない方。微妙な差だけど。


\item の間隔が広すぎる

itemize とか enumerate とか description とかでお困りの人に。

\begin{itemize}
\setlength{\itemsep}{-1mm} % この行を追加。1mm 程度がいい感じ
\item ほげほげ
 :
\end{itemize}

こんな感じに書く。itemize でも enumerate でも description でも、 \item の間隔は \itemsep。


行の間隔(行間)が広すぎる

 % これをプリアンブルに書いておく
\renewcommand{\baselinestretch}{0.95}

値は 1 が通常時。0.9 位までは問題ない、と思う。0.85 はキツめ。


\section とかの上の空白が広すぎる

 % プリアンブルにこれを張り付ける
\makeatletter
\renewcommand{\section}{\@startsection{section}{1}{\z@}%
   {1\Cvs \@plus.5\Cdp \@minus.2\Cdp}%
   {.5\Cvs \@plus.3\Cdp}%
   {\reset@font\Large\bfseries}}
\renewcommand{\subsection}{\@startsection{subsection}{2}{\z@}%
   {.9\Cvs \@plus -1ex \@minus -.2ex}%
   {.4\Cvs \@plus .2ex}%
   {\normalfont\large\bfseries}}
\renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{\z@}%
   {.8\Cvs \@plus -1ex \@minus -.2ex}%
   {.3\Cvs \@plus .2ex}%
   {\normalfont\normalsize\bfseries}}
\makeatother

私は何も考えずにこれを張り付けているが、 一応(間違っているかもしれない)説明。 各 \renewcommand に続く 2 行目が上、3 行目が下の空白の調整。

行の先頭の 「1\Cvs」みたいなのが基本の空白幅。 defalut では上が 1.5\Cvs 、下が 0.8\Cvs だったはず。

続く「\@plus どうたら \@minus こうたら」というのが、 「±この範囲で調整可能」の意味。 default は忘れた。自分でいじってたかもしれない。

余談だが、TeX では 「0.5」を「.5」と書けるっぽい。


日本語版 Illustrator から TeX で使える .eps を作る

日本語版 Illustrator から吐かれた EPS ファイルは、LaTeX で

% LaTeX なら \documentstyle[a4j,eclepsf]{……}
\usepackage{eclepsf}
 :
\epsfile{file=hogehoge.eps,scale=1.0}

(野寺隆志 著「楽々 LaTeX 第2版」に書いてある方法) として埋め込もうとしても、エラーが出てしまう。

% LaTeX なら \documentstyle[a4j,graphicx]{……}
\usepackage{graphicx}
 :
\includegraphics[scale=1.00,clip]{3-3a.eps}

を使うと上手くいく。試した限りでは、こっちだと Illustrator で EPS ファイルを吐き出すときのオプションに関わらず、問題なく読んでくれる。

なお、Illustrator から EPS ファイルを出力する際には、 「フォントデータを含む」 にチェックを入れておくか、 全ての文字をアウトライン化しておくこと。そうしないと、 プリントアウトの際、文字が傾いたり、レイアウトが崩れたりする。

CCLUB の森本さんから、Illustrator 8J for Mac から UNIX で読める EPS を作る場合は

  1. 保存形式を、Illustrator EPS / ver5 / プレビュー無し で保存
  2. 保存した EPS ファイルを秀丸などで開き、文字コード EUC、 改行コード \LF に変換して保存
  3. recleps.sty を利用して (\usepackage{recleps})、 TeX ファイル中に挿入

とすると良いとの旨のメールを頂きました。ありがとうございます。 文字コードの変換あたりがミソですかね。


minipage 環境を使った二段組

 %プリアンブルにこれを書いておく
\newlength{\minitwocolumn}
 % 実際に使う部分はこう書く
 %%% この「0.50\textwidth」が左側の広さ。この場合は本文幅の 50%
\setlength{\minitwocolumn}{0.50\textwidth}
 %%% この 0.5\columnsep が段と段の間隔。よう知らんがこのままにしてる
\addtolength{\minitwocolumn}{0.5\columnsep}
\begin{minipage}[t]{\minitwocolumn}
 %--------------------------------------%
 %      ここに左側に入る内容を書く      %
 %--------------------------------------%
\end{minipage}
\hspace{\columnsep}
 %%% この「0.40\textwidth」が右側の広さ。この場合は本文幅の 40%
\setlength{\minitwocolumn}{0.40\textwidth}
\begin{minipage}[t]{\minitwocolumn}
 %--------------------------------------%
 %      ここに右側に入る内容を書く      %
 %--------------------------------------%
\end{minipage}

ページの途中だけ二段にするとか、図を横並びに並べるとか、 図の周りに文字を回り込まるとかいうときに使う。 ただし、回り込みの調節などは、文字の量を手作業で調節して行わなければならない。

また、左右の内容を中揃えにしたい場合、{minipage}[t] でなくて {minipage}[c] とする。そもそも位置指定は取り払って もいいように思う。


minipage 環境(など)の中で figure 環境とか table 環境を使う

正確に言うと、figure とか table の中に caption と label を書いて、 それを参照したい時に使う。

素直に table や figure を書くとエラーを吐いてくれるので、 \begin{table} なんかは書かずに、 caption と label が必要な所に、以下のように書く。

% プリアンブルにこれを書いておく
\makeatletter
\def\setcaptype#1{\def\@captype{#1}}
\makeatother
% 本文中の、本来なら caption が入るところにこう書く
% table の場合
\setcaptype{table}
\caption{キャプションほげほげ}
\label{tb:caption_hogehoge}
% figure の場合
\setcaptype{figure}
\caption{フィギュアほげほげ}
\label{fig:figure_hogehoge}

label の名前に付けている 「fig:」 とかは、まぁ習慣みたいなもの。 ハンガリアン記法みたいに、こうしておくと名前を見ただけで図か表かがわかる。


minipage 環境(など)の中で figure 環境とか table 環境を使う (2)

here.sty を使えば一発で解決する。プリアンブルで \usepackage{here} としておいてから、次のようにすればよい。

\begin{minipage}
\begin{figure}[H]
 :
 :
\end{figure}
\end{minipage}

いい感じの用紙マージン

% これをプリアンブルに書いておく
\setlength{\topmargin}{-1.5cm}
\setlength{\oddsidemargin}{-1cm}
\setlength{\evensidemargin}{-1cm}
\setlength{\textheight}{25cm}
\setlength{\textwidth}{18cm}

レポートに「空白はどうにかなりませんか」等と書かれたときにどうぞ。


印刷結果が上にずれる対策 (ad hoc 版)

豊橋技科大 F-101 の環境に入っている xdvi でプレビューをして、 さて印刷すると大分上の方にずれている。これは dvips の仕業(Y 田君調べ)。

ad hoc(ad hoc; 場当たり的な、一時しのぎの)対策として、以下のようにする。 ただし、これを何度もやるのは結構手間なので、あまりお薦めしない。

  1. latex なり platex なりでタイプセット(コンパイル)する。 できた dvi ファイルの名前を hoge.dvi とする。

  2. この dvi ファイルを、そのままプリンタへ出力できる形式である ps (PostScript) 形式に変換する。できあがるファイル名を hoge.ps とするなら、 以下のようなコマンドを実行する。

    % dvips -O 0pt,-1.5cm -ohoge.ps hoge.dvi

    最初のオプションは 「ハイフン ラージ オー」 で、 「左に 0pt、上に -1.5cm(つまり、下に 1.5cm)ずらす」の意味。

    2つ目のオプションは、「ハイフン スモール オー」 で、 gcc 等と同じく、「これに続く文字列を出力ファイル名に指定する」の意味。

  3. できあがった hoge.ps が、いい感じになっているか確認する。

    % gv hoge.ps &

    とすると、PostScript の viewer(表示ソフト)、gv のウィンドウが開く。

    上の方に「letter」となっているボタンがある。これは用紙サイズの設定で、 このままではマズい。クリック、ドラッグして「A4」を選択する。

    また、「1.000」となっているボタンは倍率設定で、これは「1.414」位がベター。

  4. 確認したら、プリンタへ出力する。左の方にそれっぽい(print all pages とかなんとか)ボタンがあるのでクリック。 このとき、出てくるダイアログ(小さいウィンドウ)に入力するのは 「出力コマンド」で、「プリンタ名」ではないので注意。

    lpr -Plp2

    とか入力しておけばいいだろう。

    また前述の通り、この ps ファイルは直接プリンタへ出力が可能なので、 コマンドラインから

    lpr -Plp2 hoge.ps

    としてもよい。

dvips とか gv の詳しい使い方は、man なり google なりで調べればたぶん OK。 (dvips はともかく、gv は使って慣れろという気もする)


印刷結果が上にずれる対策 (根本的版)

毎度毎度 dvips でオフセット指定して gv でプレビューするのも面倒だし、 根本的な対策をした方が賢いと思うわけです。

なお、手順中で想定している環境は F-101 のそれのみです。 一応、OS は RedHat Linux 6.2 です。

  1. 設定ファイルを入れるディレクトリを作る。必要ないかもしれないが、 そういうやり方は試していないので、実際には何とも言えない。

    % mkdir ~/texinputs

    私は .sty なファイルも一緒のディレクトリに突っ込んでしまえ、 と思ったのでこういう名前(と場所)のディレクトリにしました。 違う名前で作った場合は、以降適宜読み替えて下さい。

  2. ~/.cshrc を編集する。まずは emacs で開く。

    % emacs .cshrc

    開いた .cshrc の最下部の

    setenv JSERVER    localhost

    のところを次のように書き換える(書き加える)。

    setenv JSERVER    localhost
    setenv TEXMF /usr/share/texmf
    setenv TEXMFCNF .:/usr/share/texmf/web2c
    setenv TEXINPUTS .:$HOME/texinputs:
    setenv TEXCONFIG .:$HOME/texinputs:TEXMF/dvips:

    bash なら .bashrc になるんだろうけど、shell を bash に切り替えて使ってるような人は書き方も分かるだろうから省略。

  3. config.ps をコピーしてきて編集する。

    % cp /usr/share/texmf/dvips/config.ps ~/texinputs/
    % emacs  ~/texinputs/config.ps

    続いて、emacs で開いている config.ps の 4 行目を次のように変更する。

    o |lpr → %o |lpr

    (頭に % を付けてコメントアウトする)

    さらに、24 行目を次のように変更する。

    O 0pt,0pt → O 0pt,-1.5cm

    (先頭のは「ラージオー」で、「ゼロ」ではない)

  4. うまくいったかどうか試す。

    適当な TeX ファイル(仮に foo.tex とする)をタイプセットしてできた DVI ファイルと、それを変換してできた PostScript ファイルが、 ほぼ同じ見た目になっているか確認する。

    % platex foo.tex
    % xdvi foo.dvi &
    % dvips foo.dvi
    % gv foo.ps &

    gv の方は、用紙サイズ設定をデフォルトの US Letter から A4 に変更すること(でないと根本的に見た目が合わない)。 画面上部にある、用紙サイズ設定のプルダウンで設定する ([Letter] という表示があるのでたぶん分かるかと)。見た目 (特に用紙最下部、ページ番号の出力位置)がほぼ同じなら O.K. です。


●あとがき

これもどんどん増える。多分。


戻る