TeX Live をホンキで語る ― 「TeX Live ってなんだろう?」
これは TeX & LaTeX Advent Calendar 2016 の 5 日目の記事です。昨日は tex-ut-tex さんでした。明日は doraTeX さんです。今年はあと一回、7 日目にも参加しました。
最近では、TeX Live のインストール手順のわかりやすい解説がたくさん世に出ています。内容も「最近はデフォルトの設定で簡単にインストールできますよ!」という事例紹介が多く、昔に比べると日本語の TeX 環境を整えるのが楽になったことの表れで好ましく思います。しかし同時に、TeX Live が成長し大きくなるにつれて、全体を俯瞰することがほとんど不可能になってしまったように思います。
たとえばこんな疑問を持ったことはないでしょうか。
- なんでパッケージは頻繁に新しくなるのに、LuaTeX は(既に v1.0 がリリースされているはずなのに)まだ 0.95.0 なの?
- パッケージを作ったんだけど、TeX Live に入れてもらうにはどうしたらいいの?
- プログラムのバグを見つけたんだけど、ソースコードはどこにあるのかな?
今回は、成長を続ける TeX Live の裏側、特に「TeX Live の開発者たちの行動」や「(pLaTeX やなんとかパッケージのような)一般の開発者と TeX Live の中央の開発者との関係性」に焦点を当てて、普段は意識しない TeX Live そのものに注目して「ホンキの解説」を試みます。開発活動について知りたい人にとっても、ちょっとカスタマイズしたい一般のユーザの方にとっても知って損はしない情報だと思います。
続きを読む
新しい pLaTeX / upLaTeX 2016/11/29 版の解説
昨日リリースした最新のコミュニティ版 pLaTeX / upLaTeX (2016/11/29) について解説します。
フォーラムにおける告知は forum:2081 です。
今回はめずらしく機能拡張にあたる変更が入っている点が魅力です。数式アルファベットを多種類(ローマン、イタリック、タイプライタ、ボールド、ボールドイタリック、カリグラフィ、黒板、…)使用したい場合にありがたい変更なのではないでしょうか。
目次
- 1. 数式ファミリの上限を 16 から 256 に増加(機能拡張)
- 2. 標準クラス jclasses / ujclasses の本家 classes への追随
- 3. plext のバグ修正と本家 LaTeX への追随
- 参考:数式ファミリの上限についての詳細分析
なお、前回の記事 (2016/09/03, 2016/09/08) はこちら。
続きを読む
TeX ユーザの集い 2016 で講演しました
発表スライドをお求めの方はこちらをどうぞ ↓
TeX Live 2016 の新しい pLaTeX(山下 弘展)
PDF へのリンクは(GitHub page のディレクトリを整理するなどの関係上)今後変わる可能性もあります。今後も本記事からのリンクは維持しつづける予定ですので、上の PDF へのリンクではなく本ブログ記事にリンクしていただけると、到達できる可能性が高まります。
2年前に続いて「TeX ユーザの集い」でしゃべってきました。
TeX ユーザの集い 2016
日付:2016年11月5日(土)全日
会場:九州大学伊都キャンパス・センターゾーン センター2号館2106教室
主催:TeXユーザの集い2016実行委員会
今回は一般講演「TeX Live 2016 の新しい pLaTeX」という題で、(本ブログで何度も解説してはいますが)pLaTeX の最近の動向や今後の開発に関する話をしました。
pLaTeX は日本語組版のデファクトスタンダードとなっている.しかし,幾つかの組版上の問題点や LaTeX の修正との不整合も指摘されていた.本講演では,TeX Live 2016 以降に収録されている,日本語 TeX 開発コミュニティによる新しい pLaTeX の現状を整理する.
発表スライドとアブストラクトは以下にあります:
- アブストラクト:hytexconf16-abst.pdf(GitHub page の PDF 直リンク)
- 発表スライド:hytexconf16-slide.pdf(GitHub page の PDF 直リンク)
今回は特別にソースコードも公開してあります。
発表の要点としては、前半が(本ブログで既に解説した)「コミュニティ版 pLaTeX」の変更点の解説、後半が今後の開発をどのように進めていくかという自分なりの考えを表明した、というところです。
続きを読むpLaTeX の新しいパッケージバンドル「platex-tools」の紹介
先日、新しい pLaTeX 対応パッケージ群をアップロードした。
既に TeX Live にも W32TeX にもインストールされたので、簡単に入手可能。
- TeX Live r42263 (2016/10/15) ← collection-langjapanese に含まれる
- W32TeX (2016/10/16) ← platex.tar.xz の一部
現在入っているのは、以下の5つのパッケージである。
- latex-tools バンドル (by LaTeX team) のサポート用
- plextarray.sty:「縦書きでも array パッケージを使いたい!」
- plextdelarray.sty:「縦書きでも delarray パッケージを使いたい!」
- pxftnright.sty:「縦書きで脚注(傍注)を下カラムにまとめたい!」
- ms バンドル (by Martin Schröder) のサポート用
- pxeverysel.sty:「pLaTeX で everysel パッケージを使いたい!」
- pxeveryshi.sty:「縦書きでも TikZ パッケージを使いたい!」
いずれも「pLaTeX で海外製パッケージがうまく動かない」という現象に対処するうえで有用だろう(特に縦組対策)。これらについて簡単に紹介(宣伝?)しておく。
GitHub リポジトリはこちら → platex-tools - The pLaTeX standard tools bundle
続きを読む
LaTeX パッケージのオプションには空白を含めないほうがよい話
この記事は、サブブログの 2016-09-17 投稿記事を移転してきたものです。
LaTeX team からいただいた情報によると、「パッケージ読込時に “,
” 区切り周囲にスペースを入れると Option clash する例」が最近発覚したらしい。以下の例示ソースで再現可能*1。
\documentclass{article} \usepackage[a, b, c]{foo} \usepackage[a ]{foo} \stop
! LaTeX Error: Option clash for package foo.
同じパッケージが 2 回以上使われそうになった場合、本来ならば「2回目のオプションたちが1回目のオプションたちの部分集合であればスルー、もし増えていたら Option clash エラー」となるべきである。ところが、上記ソースでは空白がおかしな作用をして、部分集合になっているのに clash している。これも次回リリース(2017-01-01)で直すつもりらしい。
\def\@if@pti@ns#1#2{% \let\reserved@a\@firstoftwo \edef\reserved@b{\zap@space#2 \@empty}% <- new \@for\reserved@b:=\reserved@b\do{% <- changed \ifx\reserved@b\@empty \else \expandafter\in@\expandafter{\expandafter,\reserved@b,}{,#1,}% \ifin@ \else \let\reserved@a\@secondoftwo \fi \fi }% \reserved@a}
ついついやってしまいがちな「空白」。特にオプションを多数指定する場合、コード上は改行して書くことも多いだろう:
\usepackage[dvipdfmx,% bookmarks=true,% bookmarksnumbered=true,% colorlinks=true,% setpagesize=false,% pdftitle={LaTeX研修課程},% pdfauthor={ななしのごんべぇ},% pdfsubject={hyperref入門・演習},% pdfkeywords={TeX; dvipdfmx; hyperref; color;}]{hyperref}
最後の %
を書く習慣は付けておくと無難、ということであろう。
LaTeX パッケージ作者もオプションには空白を含めないほうがよい話
こんなタレコミも。
「LaTeXパッケージのオプションで空白するとアレ」で思い出した話:
— ZR-TeXnobabbler🤔 (@zr_tex8r) September 18, 2016
実は \ExecuteOptions の引数の中の余計な空白は無視されない。#TeX #LaTeX pic.twitter.com/bf3Np41Rwr
\begin{filecontents}{test3.sty} \DeclareOption{foo}{\typeout{*** FOO OPTION ***}} \DeclareOption{bar}{\typeout{*** BAR OPTION ***}} \DeclareOption{baz}{\typeout{*** BAZ OPTION ***}} \DeclareOption{qux}{\typeout{*** QUX OPTION ***}} \ExecuteOptions{foo, bar} \ProcessOptions\relax \end{filecontents} \documentclass{article} \usepackage[baz, qux]{test3} \begin{document} a \end{document}
パッケージが既定で foo と bar を実行し(パッケージ内で作者が \ExecuteOptions
で指定)、さらにユーザが baz と qux を指定する(\usepackage
のオプション)ので、全部で四つのメッセージが出そうである。ところが
*** FOO OPTION *** *** BAZ OPTION *** *** QUX OPTION ***
確かに、本来は出るはずの BAR が表示されなかった!「\usepackage
はコンマの周りに空白があってもよいのに、\ExecuteOptions
はダメ」というトラップがあったようだ。この件を報告したところ、LaTeX team の方も「20年経って今頃なんでこんなに…?」と戸惑っていた…。
追記:対処されたようです (2016-10-04)
LaTeX2e public svn をみると、2016/10/02 付けで「\ExecuteOptions
に空白があるとオプションを無視する話」と「\@if@pti@ns
で空白があると Option clash する話」について対処された (r1227) 。いちばん難しい「\ProcessOptions
の干渉」はまだで、バグ懸念で慎重になっているようだ(2018-12-01 現在も未対応の模様)。
*1:これは一般化した記述であるが、たとえば foo → graphicx、a → dvipdfmx、b → dvips、c → dvipsone 等と置き換えてみるとよいだろう。