その他の話題

pLaTeX Guide で扱っていない話題です。


WinTpic

Last Modified on 10/10/2001

このページは,WinTpic の紹介ページです。このページは WinTpic の作者である堀井雅司氏から許可を得て開設しています。
バグ報告や要望は堀井氏へ直接お願いします。

WinTpic とは

WinTpic は TeX の図形用 special 命令(tpic 形式)を半 WYSWYG で作成するプログラムです。Tpic の入力は大変で,手で書けるようなものではありません。元々 DOS 上のフリーソフト「TWTPIC」(ただとくお氏作)がありましたが,PC-9800 専用でしたので,Windows 上で使えるように作成したのが「WinTpic」です。(WinTpic Help および Readme.txt の [概要] より。)

Tpic Specials について

tpic は,Brian Kernighan の Troff 用図形プリプロセッサ pic を元にして,Tim Morgan が作り上げた TeX 用図形プリプロセッサ及びそれが出力する special コマンドセットの名称です。最新バージョンは 2.2 です。tpic special コマンドセットそれ自体はごく簡単なグラフィック・プリミティブ命令ですが,インプリメントが比較的容易であるにもかかわらず応用性が広いので,多くの dvi ドライバ (iptex, xtex, texx, texsun, imagen1, dvips, dviis, quicspool) やグラフィックス・プログラムがサポートするようになりました。(dviout に同梱の tpicdoc.tex より引用)

具体的なコマンドについては,WinTpic Help をご覧ください。

変更履歴

これより以前の変更履歴は,ダウンロード後 readme.txt をご覧ください。

ダウンロード

Windows3.1 版と Windows95 版があります(が,ここでの配布は Windows95 版のみ)。現在,Ver.3.08 です。

インストール方法

c:\wtpic などのフォルダを作り,そこに解凍するだけで OK です。

WinTpic Help の補足(おまけ)

以下は,WinTpic Ver.2.16 の Help に対するもので,それ以降においては修正されている個所もあります。

WinTpic の Help の「TeXからの利用方法」の項に次のような記述があります。

> ●文の右に図を入れる(minipage環境 トータルガイドpp.237)
>   Overfull \hbox がでるのですが。
> \documentclass[11pt,b5j]{jarticle}
> %
> \newlength{\minitwocolumn}
> %
> \newenvironment{z2dan}%
> {\def\kaidan{\end{minipage}%
>              \hspace{\columnsep}%
>              \begin{minipage}[t]{\minitwocolumn}}%
>  \setlength{\minitwocolumn}{0.5\textwidth}%
>  \addtolength{\minitwocolumn}{-0.5\columnsep}%
>  \begin{minipage}[t]{\minitwocolumn}}%
> {\end{minipage}}
> %
> %
> \begin{document}
> \hspace*{-\parindent}
> \begin{z2dan}
> あいうえお
> \kaidan
> %なぜか1つvspaceが必要
> \ \vspace{2ex}\\
> \input{c:/mydoc/fig1.tex}
> \end{z2dan}
> \end{document}

ここでは,これについての補足をしておきます。

  1. Overfull が出る理由
    minipage 環境は,いわば一つの文字として扱われます。文字と文字の間にグルーとかいうスペースが入ることを考えて,0.5\textwidth ではなく,0.48\textwidth などとするべきでしょう。本当にちょうど真ん中にしたいのなら multicol.sty で \begin{multicols}{2}... を使うべきかも知れません。
  2. \vspaceを入れる理由
    picture 環境もまた,minipage 環境と同じで一つの文字として扱われます。しかも,高さが1文字分として扱われる(?)。(したがって,\kaidan の定義中の minipage 環境の t オプションは意味をなさない(?)。) むしろ,( 図の左側の文が十分長い場合など ) z2dan 環境の定義で(\kaidan の定義ではなく)
    > \begin{minipage}[t]{\minitwocolumn}}%
    
    とあるところは,
    > \begin{minipage}[b]{\minitwocolumn}}%
    
    とした方がよいかも知れません。こうすることで,\vspace は不要となります。

文字の回り込みについて

〜 picins.sty と enumerate 環境 〜

このページは,図(表)の回りへ文字を配置する,いわゆる『回り込み』を実現するスタイルファイルの 解説ページです。一般に,このようなスタイルファイルは,enumerate 環境 など list 環境を元にした環境内で用いるとうまく行きません。 この不具合に対し,picins.sty 使用時におけるの対処法を中心に述べています。

このページに関する感想・誤記報告などは,ページ最後のアドレスへお願いします。 また,関連する情報をお持ちの方はお教えいただければ幸いです。

0. はじめに

LaTeX では一般に,図には figure 環境,表には table 環境を用います。 しかし,これらの環境では,ページの横幅に満たない図(表)もページの横幅分を 占拠してしまいます。 そこで,『回り込み』を実現するスタイルファイルが, いろいろと発表されています。 しかし,その数の多さから,初心者は一体どれを用いるべきなのか,分かりづらい 状態になっています。

また,数学分野では,enumerate 環境内で,図を用いたい場合も多く発生します。 しかし,『回り込み』を実現するスタイルファイルの多くは, enumerate 環境など list 環境内で用いると不具合が発生します。

これらの状況を踏まえ,まず各スタイルファイルの特徴を比較します。 その後,enumerate 環境内で『回り込み』を実現する 方法を述べます。特に,picins.sty について詳しく扱います。 (これを扱った理由は,後述。)

1. 各種スタイルファイル

1.1 それぞれの特徴

『回り込み』を実現したスタイルファイルは, 実に様々なものがあります。これらの特徴を以下にまとめてみました。 なお,特徴欄で特に言及されていない場合,図は可能,twocolumn オプション可能と お考えください。また,「list 環境不可」という語句がないものは,全く問題 ないわけではなく,何らかの対処法があるという意味です。 デフォルトのままでは何らかの不具合が生じます。

一般的に,図表とも可,twocolumn オプション可,LaTeX2e にも(正式?)対応, という点から判断すれば,floatflt.sty, wrapfig.sty ということになるでしょう。 (list 環境のことを考えると,wrapfig.sty は不採用ですが。) どのスタイルファイルを使用するべきかは,実際に使った上で,各自の好みにより 判断してください。

1.2 ダウンロード先

上記のファイルのダウンロード先を示しておきます。ダウンロード先は一例であり,ダウンロード先としてCTANを記しているものでも,bear_collectionsに登録されているものもあります。また,その逆もあるでしょう。

スタイル名ダウンロード先
cut.sty http://mechanics.civil.tohoku.ac.jp/~bear/bear-collections/style-files/cut.sty
floatfig CTAN/macros/latex209/contrib/floatfig/
floatflt CTAN/macros/latex/contrib/other/floatflt/
picins CTAN/macros/latex209/contrib/picins/
http://mechanics.civil.tohoku.ac.jp/~bear/bear-collections/style-files/picins.lzh
picinpar CTAN/macros/latex209/contrib/picinpar/
wrapfig CTAN/macros/latex/contrib/other/misc/
wrapfloat http://mechanics.civil.tohoku.ac.jp/~bear/bear-collections/style-files/wrapfloat.lzh
wrapfthttp://crocus.sci.kumamoto-u.ac.jp/physics/phys_rep
emathMwhttp://homepage3.nifty.com/emath/

なお余談ですが,style file の検索には,以下が役に立ちます。

2. picins.sty 詳説

2.1. インストール方法

上記アドレスより, picins.sty をはじめ必要となるものをダウンロードします。 各ファイルの説明を下に載せておきます。 (なお,ここでは picins-j.tex を除き会津大学に リンクしています。picins-j.tex は 本来の picins には含まれません。)

ファイル名簡単なファイル内容の説明
LIES.MICH 各ファイルのファイル内容の説明。
README.1st readme です。
extpic.sty \special コマンドのためのマクロ。
mandel.msp mpic.dvi で使う画像。
mexhat1.msp
mexhat2.msp
mpic.dviドイツ語による コマンド解説(dviout で解釈できない special がある)。
picins.alt 古い(Ver.2.1) picins.sty。
picins.docドイツ語によるマクロ解説。
picins.styスタイルファイル。 必須。
picins.txt英語によるコマンド解説。
  
picins-j.tex mpic.dvi の一部を岩熊氏が日本語訳したもの。 こちらからも入手可能。

これらを $TEXMF/tex/latex/picins などのフォルダに入れます。

2.2 使用方法

以下,使用方法を簡単に述べます。 詳しくは,picins.txt, picins-j.tex, mpic.dvi, picins.doc をご覧ください。

テキストの流し込みに用いるコマンドは \parpic で,その書式は以下の通りです。

\parpic(width,height)(x-offset,y-offset)[Options][Position]{Picture}

Picture 以外のパラメーターは,省略可能です。 図は,左または右に配置可能です。 長方形,長円形,影付き,破線,立方体で囲むことも可能です。 これらは,Options で指定します。それぞれのグループで,高々1つが指定可能です。

l - 段落の左側に配置
r - 段落の右側に配置

f - frame the picture
d - put a dashed frame aroud the picture
o - 長円形(oval)で囲みます
s - 影付き(shadowbox)で囲みます
x - 立方体(3D box)で囲みます

Position は,以下のものが指定できます。

l - ボックスの左側(left)に配置
r - ボックスの右側(right)に配置
t - ボックスの上側(top)に配置
b - ボックスの下側(bottom)に配置

デフォルト(無指定)は,中央(centering)です。 offsets を指定した場合,Position は使われません。(offsets が優先します。)

width と height を省略したときは,Picture 本来の大きさが使われます。

簡単な例として,foo.tex が Tpic specials や picture 環境の場合,

\parpic{\input{foo.tex}}

また,画像ファイルを読み込む場合は,

\usepackage{graphicx}
...
\parpic{\includegraphics{abc.eps}}

のようになります。

caption は,\piccaption コマンドを用います。 この \piccaption コマンドは \parpic コマンドよりも前に書かなければいけません。 相互参照をする場合は次のようにします。

\piccaption{...\label{....}}

また,caption の出力位置については, \piccaptionoutside, \piccaptioninside, \piccatpionside, \piccaptiontopside の 4 つが指定できます。

\picskip{n} は,後何行分流し込むかを指定するものです。 \picskip{0} とすると,流し込むのをやめ,図の下から新たに段落をはじめます。 また,\picskip{5} などとすると,図の下に空白をあけることが可能になります。 (なお,enumerate 環境内で用いるとうまく行きませんでした。)

\pichskip は,図と流し込む段落の間隔を変更します。デフォルトは 1em です。 \picskip は,図とその下の段落の間隔を調節します。特に指定は不要だと思います。

枠付き環境というのがあって,frameenv(長方形), dashenv(破線), ovalenv(長円形), shadowenv(影付き) の 4 つの環境があります。 書式は以下の通りです。

\begin{frameenv}[width]
.....
\end{frameend}

この他,\newcaption コマンドや\hpic コマンド(\parpicと同様の引数をとる)があります。

2.3 問題点と対処方法

2.3.1 list 環境で左右のマージン不正

enumerate 環境など list 環境内で picins.sty の \picpar コマンドを 用いた場合,

といった問題があります。

この問題を回避するため,まず picins.sty の270〜274行を以下のようにコメントアウトします。

270: %   \hangindent 0pt%
271: %   \leftskip \d@leftskip%
272: %   \if@list\parshape \@ne \@totalleftmargin \linewidth%
273: %     \advance\hsize \rightmargin%
274: %   \fi%

私は picins.sty の内部処理をほとんど理解していないので, 思わぬ副作用が発生するかも知れませんが, 少なくとも WinTpic の Help で報告されている不具合は解消します (test0.tex)。

しかし,enumerate 環境を入れ子にしたりなど様々な状況が考えら, そのような場合は不具合が発生します。 そこで,次のようなコマンドを用意しました。

\citem.......インデント(回り込み)を続ける(continue)とき
\middleend...\item(\citem) の途中で回り込みを中断するとき
\xitem.......インデント(回り込み)を終える(x)とき
\yitem.......インデント(回り込み)を終えるとき
             (\parpic を使った一つ外側の enumerate 環境で用いる)

\citem は,\ivparpic を再定義することにより,Options の l , r の指定による場合分けを行っています。

これらのコマンドを定義した mypicins.sty を作成しました。 (先の picins.sty の修正も取り込んでいますので, picins.sty の修正は不要です。) mypicins.sty と mypicins.txt を まとめた mypicins.lzh を入手してください。 なお,mypicins.sty は,内部で picins.sty を呼び出すようにしていますので,

\documentclass{jarticle}
\usepackage{mypicins}
\begin{document}
.....
\end{document}

の様に使います。 簡単な使用例は,test1.tex をご覧ください。

2.3.2 \piccaption の出力位置変更

\piccaption で caption が出力できますが,figure環境での \caption と 比べて縦方向の空白がやや狭いようです。これを回避するには,picins.sty を以下のように修正します。

89:\setbox\@TEXT=\vbox{\vskip 7pt\hsize\hsiz@\caption[\sh@rtf@rm]{\capti@nt@xt}}%
                       ~~~~~~~~~~数値は好みで

2.4 なお残る問題点

2.4.1 \parpic の Options に l を指定した場合にうまく行かない

最も内側の enumerate 環境内で,かつ Options に l を 指定した場合にうまく行かないことがあります。 enumerate 環境を入れ子にした場合,\parpic コマンドを 用いる階層,流し込む部分の \item の数や長さなど,ケースバイケースなので すべて自動化するのは,難しい状況にあります。

2.4.2 \item,\citem,\xitem,\yitem の使い分けが分かりづらい

私のマクロが不完全なため,上記の4つのコマンドを使い分けなければなりません。 原則は,\item とお考えください。(一旦すべてを \item で記述して,組版結果を 見てください。)流し込みを続けたいところでは \citem (ただし, \parpic が最も内側の enumerate 環境内にあるときは \item),流し込みを 終えたいところでは \xitem (ただし,\parpic を用いた階層より外の階層では \yitem,さらに外は \item? ) です。 もっと,picins.sty の内部処理を把握して picins.sty に手を加えないと, これらのコマンドは統一できないでしょう。私には気力と時間がないので, 意欲ある方のチャレンジを期待します。

3. その他のスタイルファイル

その他の各スタイルファイルについて,使用方法や問題点を述べておきます。

3.1 cut.sty

leftfigure, rightfigure, lefttable, righttable の 各環境が使用できます。書式は,以下の通りです。

\begin{leftfigure}{width}{lines}
       .....
\caption{....}
\end{leftfigure}

width - 図(表)の横幅
lines - 図(表)の高さ分の行数

図(表)を含む段落が図(表)を回り込むだけの長さがない場合, 次の段落には \Par コマンドを使います(空行を作らなくても改段します)。 その他,制限事項など詳しくは,cut.sty をご覧ください。

なお,104行目に \endinput を追加した上でお使いください。 また,twocolumn オプションを指定しても,うまく行かないようです。 list 環境ではうまき行きませんが,\parshape で制御可能のようです。

3.2 floatfig.sty

floatfigure 環境が使用できます。書式は以下の通りです。

\begin{floatingfigure}{width}
.....
\caption{....}
\end{floatingfigure}

詳しくは,The LaTeX コンパニオン(アスキー出版局) pp.176-177 をご覧ください。 なお,twocolumn オプションは組み合わせられないと あります(が,動作しているような...)。

3.3 floatflt.sty

floatingfigure, floatingtable の各環境が使用可能です。書式は,以下の通りです。

\begin{floatingfigure}[position]{width}
\begin{center}
.....
\end{center}
\caption{....}
\end{floatingfigure}

オプション引数の position については,以下のようになります。

r...常に右寄せ
l...常に左寄せ
p...奇数ページでは右寄せ,偶数ページでは左寄せ
v...package option により動作が異なる(default)
    rflt を指定          → v=r
    lflt を指定          → v=l
    vflt を指定(default) → v=p

floatingtable 環境を追加し,表の扱いを可能にするなど,floatfig.sty を 改良したものです。また,list 環境のことも考え, \fltitem コマンドも あるようです。しかし,これは不完全なようで 回避策が @nifty FTEX(TeX フォーラム) MES9 #102-#128 で 議論され,ある程度の成果を得ています(122,123,126-128)。

3.4 picinpar.sty

window, figwindows, tabwindows の各環境が使用可能です。 書式は以下の通りです。

\begin{window}[#1,#2,#3,#4]
...text body...
\end{window}

#1 - 段落開始行から window までの行数
#2 - Window の配置位置 l(left), r(right), c(centered) が指定可能(デフォルトは,l)
#3 - window 内に表示するもの
#4 - 説明文 (figwindow, tabwindow の場合は,キャプションに相当)

The LaTeX コンパニオン(アスキー出版局) pp.62-63 もご覧ください。

3.4.1 若干の注意

window 環境などは4つの引数をとり,それらは「 , 」で区切ります。 したがって,以下のような例はうまくいきません。

\begin{window}[3,c,\includegraphics[width=4cm,angle=90]{tiger.ps},]

これは,\includegraphics のオプション引数の中の , が window 環境の引数の区切りと 解釈されてしまうからです。これを回避するには,

\def\aaa{\includegraphics[width=4cm,angle=90]{tiger.ps}}
\begin{window}[3,c,\aaa,]

の様にします。

3.5 wrapfig.sty

wrapfigure, wraptable の各環境が使用できます。 (初期の wrapfig.sty は,wrapfigure 環境のみでしたが,wraptable 環境が 追加されています。また,引数も増えています。) 書式については,以下をご覧ください。(wrapfig.sty から引用しました。)

%  Environments "wrapfigure" and "wraptable" place a figure or table
%  at the side of the page and wrap text around it.
%
%  \begin{wrapfigure}[12]{r}[34pt]{5cm} <figure> \end{wrapfigure}
%                     --  -  ----  ---
%  [number of narrow lines] {placement} [overhang] {width of figure}
%
%  Placement is one of   r, l, i, o, R, L, I, O,  for right, left,
%  inside, outside, (here / FLOAT).
%  The figure sticks into the margin by `overhang', if given, or by the
%  length \wrapoverhang, which is normally zero.
%  The number of wrapped text lines is normally calculated from the height
%  of the figure, but may be specified manually ("12" above).
% 
%  Environments similar to "wrapfigure" and "wraptable" may be easily added,
%  or invoked by "\begin{wrapfloat}{float_name}"

Ver.3.6 においては,float.sty との併用についてのいくつかの注意が wrapfig.sty 自身に書いてあります。詳細を理解していないので,各自ご覧ください。

なお,The LaTeX コンパニオン(アスキー出版局) p.177-179 では, 古い wrapfig.sty について解説してあります。 上記とは引数の説明などが異なりますが, 注意点などが説明されており参考になります。

3.6 wrapfloat.sty

wrapfigure, wraptable の各環境が使用できます。 書式は,以下の通りです。

\begin{wrapfigure}[number of lines]{placement}{width of figure}
       <figure> <\caption> etc. 
\end{wrapfigure}

placement - r(right) or l(left)

初期の wrapfig.sty に 表を扱うための wraptable 環境を追加する形で できあがったのが wrapfloat.sty です。 先の項でも述べたように,現在の wrapfig.sty には wraptable 環境も 追加され,また指定できる引数も増えています。さらに LaTeX2e にも正式対応しています。 また,別の問題として wrapfloat.sty が,

% which is a modified (T.Iwakuma 3/11/1992) version of WRAPFIG.STY

というものなら,深刻なバグ(下記参照)があります(nifty:FTEX/MES/19/01220,bookworm さん)。古い wrapfig.sty も同様です。 このような理由から,wrapfloat.sty を使う理由はなくなったと 思われます。

%%%%%%%%% wrapfloat.sty および 古い wrapfig.sty のバグ確認のサンプル %%%%%%%%
\documentclass{jarticle}
\usepackage{wrapfloat}
\begin{document}

ああああああああああああああああああああああああああああああ
ああああああああああああああああああああああああああああああ

\begin{wrapfigure}[2]{l}{5cm}\end{wrapfigure}
ああああああああああああああああああああああああああああああ
ああああああああああああああああああああああああああああああ
ああああああああああああああああああああああああああああああ
ああああああああああああああああああああああああああああああ

      123 ああああああああああああああああああああ
%%%   ~~~ これが出力されない。
%%%   TeX が扱えないようなもっと大きな数字にするとエラーになるので,
%%%   なにかのレジスタに足しこまれているらしい。
\end{document}

一応,以下の再定義でバグは回避できるようです(@nifty FTEX MES6 #2900, BB さん)。

\def\WF@startwrapping{\everypar{\WF@setwrapping}\WF@setwrapping
  \def\WF@savedclubp{\the\clubpenalty}\clubpenalty\@M % prevent bad pagebreak
  \def\WF@restoretol{\tolerance\the\tolerance}\tolerance\@M
  \def\par{\@@par \clubpenalty\WF@savedclubp  % will wrap more than one
    \global\advance\WF@wrappedlines-\prevgraf % paragraph if necessary
    \ifnum\WF@wrappedlines<\tw@ \everypar{}%
    \let\par\@@par\WF@restoretol\relax\fi%add "\realx" by BB PXB13650@nifty.com
  }}

なお,enumerate 環境内で wrapfigure 環境を使うことを考えると, この wrapfloat.sty の方がカスタマイズしやすいようです。 (wrapfig.sty の場合,enumerate 内で wrapfigure 環境を用いると, 図がフロートしてしまい,意図した配置になりません。) 実際, wrapfloat.sty は \parshape コマンドで制御可能でした。 \WF@raptfig[#1]#2#3 の #3 (width) をもとに \@tempdimb が 計算されており,mypicins.sty と同様の \parshape による 改良を試みたのですがうまく自動化 できませんでした(\@tempdimb の値を拾うのに失敗する)。

3.7 wrapft.sty

上記 wraploat.sty のところでも触れましたが,古い wrapfig.sty にはバグがありました。 したがって,

%  WRAPFT.STY  to use environments "wrapfigure" as well as "wraptable"
%
%    This is a modified version (by T.Kugo 15/7/1995) of 
%       T.Iwakuma's modified version WRAPFLOAT.STY (3/11/1992) of 
%       the original D.Arseneau's WRAPFIG.STY (1991)

というものではなく,

%    WRAPFT.STY   ver 1.1  (July 9, 1997)                         %
%       to use environments "wrapfigure" and "wraptable"          %
%                                                                 %
%    This is a slightly modified version (by T.Kugo for PTP) of   %
%         WRAPFIG.STY  ver 3.2x   by Donald Arseneau  

というものを入手して使ってください。

wrapfigure, wraptable の各環境が使用できます。書式は,以下の通りです。オリジナル のものと比べて position に c が追加されています。

\begin{wrapfigure}[number]{position}[overhang]{width}
    <figure> etc.
    \caption{ <caption> }
\end{wrapfigure}

 Here the arguments are:
   [number] : specify the number of narrow text lines at the side of 
              the figure; e.g., like [15] for fifteen lines. 
              But usually skip this part [..] at all like
                    \begin{wrapfigure}{position}{width} 
              since the number is automatically well calculated.
              Write this when you want to specify it explicitly.
  {position}: {r} or {l}, to place the figure HERE (i.e., non-floating)
                              at the right(r) or left(l) side.
              {R} or {L}, to place the figure at the right or left side
                              with FLOATING nature kept.
              or {c},     to place it HERE at the center with no wrapping.
  [overhang]: you can make the figure stick out into the magin by this 
              length `overhang'. If omitted, this is 0pt as the default.
     {width}: width (with unit) of the figure, like {10cm}.

3.8 emathMw.sty

mawarikomi(*),Fmawarikomi,Tmawarikomi 環境が使用可能です。基本書式は

\begin{mawarikomi}{width}
    <picture> etc.
\end{mawarikomi}

となります。いくつかのオプション引数があって,以下のようになっています。

\begin{mawarikomi}<#1>[#2](#3,#4)#5#6
   #1 : 段落当初の回り込みをしない行数
   #2 : 回り込み行数(相対指定可)
        先頭に`l'を付けたときは図を左に配置
   (#3,#4) : 図の位置修正ベクトル
   #5 : 図の横幅(単位必須)
   #6 : 図,表など

横幅(#5)はオプション引数ではないので,完全な省略はできませんが,{}と空の指定をすることができます。

mawarikomi 環境は \caption コマンドによって caption を付けることができません。\fgcaption や \tbcaption を使えば,cpation を付けることができます。

この他,zuhaiti環境,\wakudoriコマンドもあります。

4. おわりに

一般的に,図表とも可,twocolumn オプション可,LaTeX2e にも(正式?)対応, という点から判断すれば,floatflt.sty, wrapfig.sty を 詳しく扱うべきだったかも知れません。にもかかわらず,picins.sty を取り上げた理由は,

などによります。他のスタイルファイルについても十分研究するべきであり, @nifty FTEX(TeX フォーラム) MES9 における floatflt.sty についての議論は, 一読の価値があります。

また,ここでは触れませんでしたが,一般的に minipage 環境を用いて回避可能で あることを申し添えておきます。 (おまけ : WinTpic Help の補足)

enumerate 環境など list 環境内での『回り込み』について,このページがお役に立てれば幸いです。 今後,意欲ある方のさらなる改良を期待しています。


HyperTeX

Last Modified on 27/12/2002[工事中]

HyperTeX とは,TeX ソースに \special を書き込んでおくと,WWW Browser で実現されているような HyperJump ができるというものです。ここでは,HyperTeX を実現する Package とそこで定義されている主なコマンドの紹介,使用上の問題点および回避策についてまとめてみます。

HyperTeX の一般的なことについては,以下のものが参考となるでしょう。

1 HyperTeX に関する各種 Package

HyperTeX を実現するための Package はいくつかあります。以下,私の知りうるものについて,その特徴と主なコマンドを解説します。

1.1 hyperref

hyperref package は Sebastian Rahtz 氏によるものです。これは,デフォルトで 目次,脚注,参考文献,\label-\ref などに対応しています。link と anchor の色も変えることができます. CTAN から入手できますが,角藤さんの ltxpkgs.tar.gz に含まれています。

コマンドについては,manual.pdf をご覧頂くと良いのですが,いくつか紹介しておきます。

\href{URL}{text}

text は,URL へのハイパーリンクになります。 フルパスで(base URL が定義されている場合は相対パスで)設定します。

\hyperbaseurl{URL}

base URL を定義します。preamble で指定しなければなりません.

\usepackage[baseurl=...]{hyperref}という指定も可能です。

引数に ~ などを含むとまずいようです. \string を冠してください。

\hyperimage{image URL}

URL で参照される図が挿入される???

\htperdef{category}{name}text

\hyperref{URL}{category}{name}{text}

\hyperlink{name}{text}

\hypertarget{name}{text}

myhyper.sty で言えば,前者は\goto,後者は\nameに相当する.

\url{URL}

このコマンドは,url.sty で定義されているコマンドです。(hyperref.sty でも再定義されていますが。) hyperref.sty から url.sty が自動的に読み込まれているのです。

\hyperlinktext{}

\hypersetup

pdftitle などのoptionを設定できる? \hypersetup{pdftitle = {...}, pdfkeywords = {...}} option を読み込む他の方法は, hyperref.cfg を用いる?

\pdfinfo{...}

\pdfbookmark

PDF にしおりを付けるコマンドです。 \pdfbookmark[lebel]{bookmark name}{anchor name} lebel とは \part 0,\section 1 といったものを指します。 \hypertarget{anchor name}{text} としているところに飛びます? しおりは,tocdepth で指定したところまでつきます。つまり,デフォルトではreport と book が 2, article では 3 となっています。

option について

いくつかを紹介します。

bookmarksnumberedPDF のしおりに節番号をつけます。default は false
draftHyperTeX を無効にします。nohyperref.sty を指定するのと同じ??
backrefbibliography に各セクション番号がつきます。\bibitem の後に空行がないと機能しません。
pdftitle
pdfsubject
pdfauthor
pdfkeywords
pdfcreator
pdfproducer
colorlinkslink と anchor を色づけします
urlcolor=``color''colorlinks による色づけを変更したい場合に指定します. colorlinks option を並記しなくてもOKです。
pdftitle などを指定するのは面倒なので,
\newcommand{\org@maketitle}{}%
\let\org@maketitle\maketitle
\def\maketitle{%
   \hypersetup{pdftitle={\@title},pdfauthor={\@author}}%
   \org@maketitle
}
などと\maketitle コマンドを再定義すると良いようです. backpageref 先と同じですがページ番号を出力します。 やはり,\bibitem の後に空行がないと機能しません。 colorlinks このオプションを指定すると,色の指定が出来るようになります。
\documentclass[colorlinks,urlcolor=red]{jaticle}

などのように指定します。

hyper

hyper.sty は,??氏によるものです。CTAN から入手できます。インプレスの TeX for Windows に含まれている hyper.sty は別物です。

アンカーの色を変えられる?

myhyper

これは,松阪大学の奥村晴彦氏が考案したものを東京大学の大島俊雄氏が \goto コマンドを追加し,さらに私(大石)がいくつかのミスを訂正たものです。dviout for Windows に同梱されています。

\base{base URL}

base URL を定義します。hyperref.sty と違って preamble で指定しなければなりません,ということはありません。 引数に ~ などを含む場合も問題ありません。

\href{#name}{text}

\goto{name}{text}

\href と同じですが,# が不要となっています。

\name{name}{text}

\hrefや\goto でのリンク先を指定します。

\img{URL}

hyperref.sty および myhyper.sty の問題点とその対策

他のコマンドの引数内で用いる場合の注意

hyperref.sty や myhyper.sty で定義されている \href コマンドを他のコマンド(例えば,\footnote や \centerline など)の引数の中で使うとうまく機能しない場合があります。引数に ~ や # などの特殊文字を含んでいる場合に問題が起きます。

例えば,myhyper.sty で

\fbox{\href{#foo}{ここ}}

などとした場合はうまくいきません。この場合は,\goto コマンドを用いて

\fbox{\goto{foo}{ここ}}

とすればうまくいきます。あるいは,

\newsavebox{\mybox}
\begin{lrbox}{\mybox}
\href{#foo}{ここ}
\end{lrbox}
\fbox{\usebox{\mybox}}

としてもうまくいきます。URL への Jump の場合は後者の方法で対処できます。 この box を使う方法は,脚注で \verb を使う場合と同じで LaTeX2e 美文書作成入門の p.67 を参考にさせていただきました。

myhyper.sty を (my-)hyperref.sty と同時に使う場合の注意

\href コマンドが hyperref と myhyper の両方で定義されています。

という理由から,myhyper の方を後から読み込むとよいでしょう。my-hyperref.sty を 用いれば \url コマンドについては問題ないので,読む込む順番は関係ありません。

dvips と Distiller を用いて PDF ファイルに変換する場合, myhyper.sty をつかうと \href コマンドのところが おかしくなります。(手の矢印となる場所がずれる。)

古い myhyper.sty における問題

pLaTeX2e の tbook.cls など縦書きクラスでの問題

t*.cls で hyperref.sty を指定すると,目次のページ数が横に向いてしまいます。 hyperref.sty では,\addcontentsline を再定義しているためですが,これを回避するには

3326:    \addtocontents{#1}{%
3327:      \protect\contentsline{#2}{#3}{\thepage}{\@currentHref}%

とある所を

    \addtocontents{#1}{%
      \iftdir
      \protect\contentsline{#2}{#3}{\rensuji{\thepage}}{\@currentHref}%
      \else
      \protect\contentsline{#2}{#3}{\thepage}{\@currentHref}%
      \fi

などとします。このほか,\pageref, \ref でも同様の現象が起きるので,対処が必要です。(未解決)

残る他の問題

\href,\ref が行頭にくると,以前の myhyper.sty と 同様におかしくなります. \verb+\leavevmode+ を追加すればよいのでしょうが, hyperref.sty はかなり複雑で, よくわかりません. やむを得ず, \verb+\mbox{}\ref{...}+ あるいは \linebreak[4]\ref{...} などとしています.

\part などを使っている場合などで, 第1章を複数持つなどの場合,目次からの HyperJump が 不正確になります。

脚注再定義時の注意

脚注で \verb コマンドが使えるようにするなど脚注を再定義している場合, hyperref よりも後から, そのマクロを読み込んでください。 しかし,このようにすると,脚注番号から脚注への HyperJump が無効です。(dviout で hyper jump しようと するとエラーがでます。)これは,\verb+\@footnotemark+ が両方のsty で 定義されているためです。 hyperref.sty の解析は容易でないので,あきらめました。すなわち脚注でverbを使うのをやめました。 多くの場合,url.sty で定義されている \path コマンドを使うという方法が有効でしょう。

独自拡張

url.sty における ~ の問題

url.sty で定義されている \url コマンドで ~ を含むと数式の \Sim を用いているようで(roman の場合) 気に入りません。url.sty の以下の波線部分を削除すれば良いでしょう。

33: \def\Url@do{% style assignments for OT1 fonts except tt
34: \def\UrlBreaks{\do\.\do\@\do\/\do\!\do\%\do\;\do\]\do\)\do\,\do\?\do\+\do\=}%
35: \def\UrlBigBreaks{\do\:\do@url@hyp}%
36: \def\UrlNoBreaks{\do\(\do\[\do\{}% prevents breaks after *next* character
37: \def\UrlSpecials{\do\<{\langle}\do\>{\mathbin{\rangle}}\do\_{\_%
38:  \penalty\@m}\do\|{\mid}\do\{{\lbrace}\do\}{\mathbin{\rbrace}}\do
39:  \\{\mathbin{\backslash}}\do\~{\raise.6ex\hbox{\m@th$\scriptstyle\sim$}}\do
                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
40:  \ {\ }}%
41: \def\UrlOrds{\do\'\do\"\do\-}%
42: }

しかし,新しい url-style を定義することが推奨されています。具体的には,

\def\Url@myrmdo{% style assignments for OT1 fonts except tt
\def\UrlBreaks{\do\.\do\@\do\/\do\!\do\%\do\;\do\]\do\)\do\,\do\?\do\+\do\=}%
\def\UrlBigBreaks{\do\:\do@url@hyp}%
\def\UrlNoBreaks{\do\(\do\[\do\{}% prevents breaks after *next* character
\def\UrlSpecials{\do\<{\langle}\do\>{\mathbin{\rangle}}\do\_{\_%
 \penalty\@m}\do\|{\mid}\do\{{\lbrace}\do\}{\mathbin{\rbrace}}\do
 \\{\mathbin{\backslash}}\do
 \ {\ }}%
\def\UrlOrds{\do\'\do\"\do\-}%
}

および

\def\url@myrmstyle{%
\@ifundefined{selectfont}{\def\UrlFont{\rm}}{\def\UrlFont{\rmfamily}}\Url@myrmdo
}

というのを url.sty に追加しておきます。これで,\urlstyle{myrm} が使用可能になります。

\url に関する問題

hyperref.sty や myhyper.sty で定義されている \href コマンドは,

\href{Url}{text}

の様に使います。このとき,text にも URL を表記したい場合,例えば,

\href{http://www.xxx.ne.jp/~yyy/zzz.html#aaa}{http://www.xxx.ne.jp/\~{}yyy/zzz.html\#aaa}

のように第2引数の % # ~ _ などに \ を冠しなければなりません。これは面倒なので,

\url{http://www.xxx.ne.jp/~yyy/zzz.html#aaa}

とすればいいように改良したいわけです。

実は,これはすでに hyperref.sty で実現されています。\url コマンドは url.sty で定義されていますが,hyperref.sty では url.sty を読み込んだ後,\url コマンドを再定義する事により HyperTeX に対応させています。(draft option が指定された場合は,HyperTeX は無効です。)

少し前の hyperref.sty まで,『hyperref.sty を読み込んだ場合に,\url の引数に % や # を含むと \(バックスラッシュ)も表示される』という不具合がありました。 (飛び先の URL は,正常)。_ ~ については正常です。

hyperref.sty (v6.70f )では % に ついては不具合が解消されているものの, # が \hyper@hash という文字列で出力されてしまいます。

hyperref.sty (v6.70h )では不具合が解消されているようです。

現在,自分のシステムではどうなるのかを以下の test1.tex で試してみると良いでしょう。

%%-------test1.tex-------
\documentclass{jarticle}
\usepackage{hyperref}
\begin{document}
\url{%#~_}
\end{document}
%%---End of test1.tex ---

現在の最新版では,不具合は発生していないので以下は無意味ですが,いつ再発するかわからないので, 回避策を書いておきます。

hyperref.sty の \url コマンドの再定義(方法2)

本来,hyperref.sty で行われている \url の再定義を見直すべきですが,hyperref.sty で行っている内部処理を完全に理解していないので,\url コマンドを改めて再定義することにしました。また,単に再定義するだけでは option が \url に対して反映されないので,draft option に対応した以下の my-hyperref.sty を考えました。linkcolors option など は \url に対して反映されません。意欲ある方は,直接 hyperref.sty を修正してください。(\hyper@normalise あたりを修正すればよい?)

%%%%my-hyperref.sty%%%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{my-hyperref}
%
\DeclareOption{draft}{\PassOptionsToPackage{draft}{hyperref}\AtEndOfPackage{\let\url\@@url}}
\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{hyperref}}
\ProcessOptions
%
\RequirePackage{hyperref}
%
\def\@@url{\begingroup\Url}
\def\url{\leavevmode\begingroup\@sanitize\@url}
\def\@url#1{\special{html:<a href="#1">}\endgroup\@@url{#1}\special{html:</a>}}
%
\endinput

myhyper.sty への \url コマンドと draft option の追加(方法3)

myhyper.sty には,hyperref.sty(url.sty) の \url コマンドに対応するものはありません。 そこで,\url コマンドを新設しました。hyperref.sty(url.sty) と同時に用いても衝突しないように 工夫しています。

ついでに draft option を新設しました。draft option は HyperTeX の機能を無効にするもので hyperref package にも設けられています。なお,dviout において -hyperref:=1 とすることでも HyperTeX は無効となります。

\def\url{\leavevmode\begingroup\@sanitize\@url}
\def\@url#1{\special{html:<a href="#1">}\endgroup #1\special{html:}}

myhyper で書いた文章を hyperref で書き換える

\href{#foo} となっているものから# をとって\hyperlink に引数を渡す。 \href{...#..} はそのまま \name は \hypertarget にする \imag,\base は?
%%myhyper2hyperref.sty
\let\name\hypertarget
\let\img
\let\base
\let


バックスラッシュを円マーク(¥)にする方法

〜 bs2yen.sty,\yen コマンド ,verbatim 類似環境 〜

Last Modified on 26/09/2003

0. はじめに

\verb コマンドや verbatim 環境などでは,\ が バックスラッシュとなってしまいます。これを \(円マーク) で出力しようというのが,ここでのお話です。

\verb および verbatim 環境といった本来の使用はやめて,別コマンド,別環境を定義したものとしては,

がありますが,やはり \verb や verbatim 環境で¥を実現したいものです。

1. \yen コマンド

\verb や verbatim 環境など以外で¥を出力するには,

\def\yen{y\llap=}

といった定義が有名でした。(もちろん,全角で代用するすることもできます。)ここで紹介した定義とは異なりますが,¥マークを出力する \yen コマンドは,ascmac.sty(からよばれる tascmac.sty) や amssymb.sty (からよばれる amsfonts.sty) でも定義されています。

tascmac.sty と amsfonts.sty での \yen コマンドの定義は,異なります。前者の定義では,\textit{\yen} とすれば となるなど書体の変更に追従します。amsfots.sty の定義では,書体の変更は起こりません。両スタイルファイルが読み込まれた場合,その定義の仕方から,tascmac.sty での定義が優先されます。

この他,最近では,\textyen コマンドを用いるのも良いでしょう。これを使うには,textcomp.sty を読み込むようにしておきます。\textyen コマンドは,textcomp.sty からよばれる ts1enc.def で具体的に定義されています。

2. \verb および verbatim 環境に対する対処

\verb コマンドや verbatim 環境で ¥ を出力する方法としては,以下のスタイルファイルが考案されています。

3. verbatim 環境と類似の環境を実現するスタイルファイルに対する対処

以下では,verbatim 環境に類似した環境を実現するいくつかのスタイルファイルでも,¥の出力が可能かどうかを検証します。概して,そのアプローチの仕方からいって,bs2yen.sty では出力可能です。verbyen.sty や okuverb.sty の場合は,\verbh@@k を適当な場所に挿入するなどの変更が必要でしょう。

3.1 listings.sty の場合

listings.sty は, CTAN/macros/latex/contrib/supported/listings にあります。TeX の他,プログラムソースを記述するのに適した lstlisting 環境が定義されています。行番号を出力することもできます。lstlsiting 環境は,書体の変更が可能になっています。タイプライタ体を指定する場合は,バックスラッシュを¥で出力するには,乙部氏の bs2yen.sty で可能です。 okuverb.sty , verbyen.sty では不可。

タイプライタ体以外の場合は以下のようにします。ただし,ascmac.sty など \yen コマンドの定義されたスタイルファイルを併用する必要があります。

\makeatletter
\lst@CCUseMacro
    \lst@ProcessOther{"23}\#
    \lst@ProcessLetter{"24}\textdollar
    \lst@ProcessOther{"25}\%
    \lst@ProcessOther{"26}\&
    \lst@ProcessOther{"2A}{\lst@ttfamily*\textasteriskcentered}
    \lst@ProcessOther{"2D}{\lst@ttfamily{-{}}{$-$}}
    \lst@ProcessOther{"3C}{\lst@ttfamily<\textless}
    \lst@ProcessOther{"3E}{\lst@ttfamily>\textgreater}
%   \lst@ProcessOther{"5C}{\lst@ttfamily{\char92}\textbackslash}
    \lst@ProcessOther{"5C}{\yen}%           substituted by tDB 1999/10/11
    \lst@ProcessOther{"5E}\textasciicircum
    \lst@ProcessOther{"7B}{\lst@ttfamily{\char123}\textbraceleft}
    \lst@ProcessOther{"7C}{\lst@ttfamily|\textbar}
    \lst@ProcessOther{"7D}{\lst@ttfamily{\char125}\textbraceright}
    \lst@ProcessOther{"7E}\textasciitilde
    \lst@ProcessLetter{"5F}{\lst@ttfamily{\char95}\textunderscore}
    \@empty\z@\@empty
\makeatother
簡単な例1

3.2 verbatimfiles.sty の場合

verbatimfiles.sty は,CTAN/macros/latex209/contrib/misc/ にあります。外部ファイルを読む込む \verbatimfiles コマンド,同じく外部ファイルを読み込んで行番号を付加する \verbatimlisting コマンドがあります。バックスラッシュを¥で出力するには,乙部氏の bs2yen.sty で可能です。verbyen.sty の場合は,以下のように修正すればよいようです。okuverb.sty では不可。

\def\verbatimfile#1{\begingroup
                    \@verbatim \frenchspacing \@vobeyspaces\verbh@@k
                    \input#1 \endgroup
}
\def\verbatimlisting#1{\setcounter{lineno}{0}%
    \begingroup \@verbatim \frenchspacing \@vobeyspaces\verbh@@k
    \parindent=20pt
    \everypar{\stepcounter{lineno}\llap{\thelineno\ \ }}\input#1
    \endgroup
}

3.3 verbatim.sty の場合

verbatim.sty は,tools package に含まれるものです。verbatim 環境をインプリメントし直したほか,comment 環境も定義されています。ユーザー独自の環境を作ることもできます(cf.「The LaTeX コンパニオン」pp.77-78)。バックスラッシュを¥で出力するには,乙部氏の bs2yen.sty で可能です。okuverb.sty , verbyen.sty では不可。

3.4 moreverb.sty の場合

moreverb.sty は,標準で含まれています。枠で囲む boxedverbatim 環境や行番号を付けることができる listing(*) 環境などが定義されています(cf. 「The LaTeX コンパニオン」pp.78-81)。バックスラッシュを¥で出力するには,乙部氏の bs2yen.sty で可能です。okuverb.sty , verbyen.sty では不可。

4. bs2yen.sty に関する補足

4.1 部分的にバックスラッシュで出力したい

乙部氏の bs2yen.sty を使うと文書全体にわたり,cmtt10 などのバックスラッシュが円マーク(¥)になってくれます。 しかし,cmtt10 のバックスラッシュを部分的に出力したいときもあると思います。そんなときは,\ttdefault の再定義で可能です。グルーピングでも良いでしょう。

\documentclass{jarticle}
\usepackage{bs2yen}
\begin{document}
\verb+\+

\renewcommand\ttdefault{cmtt}
\verb+\+

\renewcommand\ttdefault{jcmtt}
\verb+\+
\end{document}

4.2 日本語がゴシック体となってしまう

bs2yen.sty を読み込まない状態では,\verb コマンドや verbatim 環境に日本語が含まれていても明朝体のままですが,bs2yen.sty を組み込むと日本語部分はゴシック体となります。これは,bs2yen.sty のなかで,

\def\verbatim@font{\normalfont\ttfamily\gtfamily}

と定義されているからです。\gtfamily を削除すると回避できます。

なお,日本語部分がゴシック体になるという現象は,verbatim.sty を組み込むと状況が変わります。

   bs2yen,verbatim → 日本語部分は明朝体
   verbatim,bs2yen → 日本語部分はゴシック

4.3 ¥の前後の空き

bs2yen.sty を用いると, ¥の前後に日本語がある場合,少し空きが発生します。これは,

\xspcode"5C=3

と設定されているためで,最後の数値を 0 に変えるとスペースの挿入が禁止されます。なお,最後の数字は0,1,2,3 のみが可能で,次のような意味を持ちます(cf. $TEXMFMAIN/doc/ptex/jtexdoc.tex or ptexskip.tex)。

0 ... 1 バイトコード文字と 2 バイトコー ド文字の間での処理を禁止
1 ... 直前の 2 バイトコード文字との間にのみスペースを挿入することを許可
2 ... 直後の 2 バイトコード文字との間にのみスペースを挿入することを許可
3 ... 前後の 2 バイトコード文字との間でのスペー スの挿入を許可

Adobe Acrobat (Reader) 4.0 のインストールについて

Last Modified on 23/05/2000

Adobe Acrobat Reader 4.0 または Adobe Acrobat 4.0 をインストールすると,INLOADER.DLL に関して「バージョンの競合」という画面が(Windows98 などで)出ることがあります。結論からいうと,『このファイルを保存しておきますか。』の問いに対して [はい] を選んでください。

アドビのサポートにも電話してみたのですが,「バージョンが違うときに出ます」という一般的な話しかもらえず,がっかりでした。そこで,私はあえて [いいえ] を選んで調べてみました。私のハードディスクにあったもの(c:\windows\system\inloader.dll)は

98/6/12 94,208byte

であったのに対し,[いいえ] を選ぶことによって上書きされたものは

96/10/15 78,848byte

でした。このように日付とサイズが違うにも関わらず,プロパティでは ファイルバージョン 1,0,96072601

詳細の項目と情報は

会社名 Microsft Corporation
言語 日本語
正式ファイル名INLOADER.DLL
製品バージョン2.03
製品名 Internet Assistant for Microsoft(R) Word(TM)
内部名 Catapult Interface Layer

とどちらも同じでした。プロパティの製品バージョンは何のため?FAQとかにならないのはなぜ?と納得のいかない私でした。


OLETeX

Last Modified on 11/07/2001

OLETeX は TeX で作成した数式などを OLE に対応したアプリケーションに張り付けようというソフトで,小倉信彦氏によるものです。オリジナルは

ftp://ftp.forest.impress.co.jp/pub/win/tex/oletex

から入手できます。

ところが,これはインプレスの TeX for Windows 専用です。そこで,OLETeXをpLaTeX2eで使う方法をご覧戴くときっと役に立つことでしょう。結局,乙部氏の Another Manual についている bwpvtex.exe が必要なようです。私の手元には,作者からの指示もあるんですが,転載の許可を得ていないので,ここには載せません。私自身も確認していませんし。ということで,このページはこれだけです。



Copyright © 1999-2010 Ohishi Masaru
http://www17.plala.or.jp/ohishi-masaru/tex/index.html