利用可能なパッケージ一覧を取得する方法

利用可能なパッケージ一覧を取得する方法

- Kobayashi Ryota の投稿
返信数: 10
現在自分が使用しているパソコンで利用可能な,LaTeXパッケージの一覧を取得する方法を探しています.LaTeXはTeX Liveのものを使用しています.
ネットで調べたところ,TeX Liveに付属のkpsewhichを使い,ターミナルで

kpsewhich -expand-path='$TEXMF'

を実行することでLaTeXがパッケージを読みに行くパスを取得できることがわかりました.そこでMacのターミナル(bash)から

find $(echo $(kpsewhich -expand-path='$TEXMF') | tr ':' ' ') -name '*.sty' | xargs -I% basename % .sty | sort

とすることで,ひとまずパソコンに入っているパッケージ一覧を取得することができました.

しかしこの方法はWindowsでは使えませんし,TeX Liveに含まれるプログラムの中にはもっと簡単にパッケージ一覧を出力してくれるものがあるのではないか,とも思います.
なにか良い方法はありませんでしょうか.

また,上記のbashのコマンドは「そのパソコンで利用可能なLaTeXパッケージ一覧を取得する」という目的を達成できているでしょうか.

皆様のご意見をお聞かせください.
よろしくお願いいたします.
Kobayashi Ryota への返信

Re: 利用可能なパッケージ一覧を取得する方法

- 和田 勇 の投稿

提示されている方法で調べられる style file が例えば platex で全て使える
わけではないと思います ... というのがまず頭に浮かびました。

それと TEXMF に含まれているものの重複も気になります。

内容の重複の簡易チェックを行うため OSX に通常インストールされている
/sbin/md5 を使って調べています。なお、途中 awk 以下の処理は見やすくす
るため固定長項目を先頭に並べ替えたり件数や種類を数えたりと技巧を駆使し
ています。

find $(kpsewhich -expand-path='$TEXMF' | tr ':' ' ') -type f  -name \*.sty \
    | xargs /sbin/md5 \
    | sort -t= -k 2 \
    | awk -F' = ' '$2 != OLD { print ""; OLD = $2 } { print $2, $1 }' \
    | awk -v RS="" 'NF > 4' \
    | cat -n \
    | awk '$2 != OLD { OLD=$2; print "重複", ++C } { print } '

なお TeXLive 2015 のみでも総数 74 ファイル、25種類のファイルの重複があ
りました。

# Windows の環境がないので find に変わる探索方法を試せません :-(
和田 勇 への返信

Re: 利用可能なパッケージ一覧を取得する方法

- Akira Kakuto の投稿
W32TeX であれば
(1) kpsewhich -expand-braces $TEXINPUTS >inputs.txt
    でファイル input.txt を作る
(2) 次のような showpkg.bat を作る
@echo off
setlocal
set TEXDOCS=ファイル inputs.txt の内容
texdocc -s -l .sty
endlocal

(3) showpkg.bat を実行すると,全てのパッケージを表示します。

TeX Live W32 の場合は, W32TeX に含まれている texdocc.exe を
bin/win32 にコピーしておけば,同じことができます。

document 表示用のプログラムを騙して使用しています。
標準の texdoc では成功していません。
TeX Live の場合も texdocc.exe をコピーしておくと,便利かも
しれません。
Akira Kakuto への返信

Re: 利用可能なパッケージ一覧を取得する方法

- Akira Kakuto の投稿
> (3) showpkg.bat を実行すると,全てのパッケージを表示します。

perl を使えば,以下で ok です:

#!/usr/bin/env/perl
# showpackages.pl
my $searchpath = `kpsewhich -expand-braces \$TEXINPUTS`;
chomp($searchpath);
$ENV{'TEXDOCS'} = $searchpath;
system "texdocc -s -l .sty";
Kobayashi Ryota への返信

Re: 利用可能なパッケージ一覧を取得する方法

- Z. R. の投稿

スクリプトを作ってみました。

これを実行するには、「Lua インタプリタとしての LuaTeX」(texluaコマンド)を利用します。

texlua zrshowpkg.lua platex

で、「platex において“読み込み可能”なパッケージの名前の一覧」を出力します。(実際に platex で“利用できる”とは限りません。)

texlua zrshowpkg.lua -p platex

のように -p オプションをつけると、各々のパッケージに対するファイルのパス名も一緒に出力されます。

Z. R. への返信

Re: 利用可能なパッケージ一覧を取得する方法

- 和田 勇 の投稿
OSX で試したら 全て stderr 担ったのでスクリプトを眺めてみました。

lua プログラムは全くの門外漢ではありますが .. 
53 行目は path = path:explode(';') 「セミコロンで..」ではなく path = path:explode(':') 「コロンで ..」かしら?



和田 勇 への返信

Re: 利用可能なパッケージ一覧を取得する方法

- Akira Kakuto の投稿
texmf.cnf では ';' (セミコロン) で記述してありますが,
Unix の場合,kpathsea で ':' (コロン) に置き換えられます。
従って
os.type == "windows"
で分類すればよいように思います。
Akira Kakuto への返信

Re: 利用可能なパッケージ一覧を取得する方法

- Z. R. の投稿

修正しました。

Ubuntu の環境で正常動作することを確認しました。

Z. R. への返信

Re: 利用可能なパッケージ一覧を取得する方法

- Kobayashi Ryota の投稿
返信が遅くなって申し訳ありません.

Z. R. 様のluaスクリプトを実行したところ,bashのコマンドよりも圧倒的に早く結果を取得することができ,驚きました.

zrshowpkg.luaの出力の行数がbash版に比べて少なかったので,出力を詳しく見てみたところ,jarticleのようなドキュメントクラス系のstyファイルが除かれているのですね.

皆様のご回答をありがとうございました.