f

2013-12-09

Auto reading package in LyX

前回書いたBreakable \url with long-hyphenation-wordという記事で調査の都合上breakurlパッケージをインストールしたのだが、これが原因でLyXでuplatexが通らなくなって困った。
今まではうまくいったファイルであってもなぜかうまくいかなかった。エラーメッセージをみるとどうやら内部でbreakurlパッケージを読み込もうとしてエラーが出ている。breakurlパッケージはpdflatex系でしか動作しないので、uplatexを実行しているので、もし読み込んでいるならエラーが出るのは当然だ。しかし、自分でbreakurlパッケージを読み込んだつもりはない。
不思議に思ってLyXからtexファイルを出力させて確認すると確かに以下のようにbreakurlパッケージの読み込みの記述があった。
\usepackage{breakurl}
しかし、これが記述されているのはLyXが自動的にパッケージの読み込みを行う箇所であり、ユーザーの干渉の余地がない。LyXのバージョンを2.1.0beta2にしたのが原因なのかといろいろ探ったところ、原因がわかった。
LyXはTools⇒Reconfigureを実行すると、mktexlsrコマンドを実行したあとにできるls-Rの中身を参照してパッケージが利用可能かどうかを識別する。そして、利用可能であれば.lyxファイルの作成時にいくつかのパッケージを自動的に読み込むようだ。
breakurlパッケージはどうやらLyXで自動的に読み込むパッケージに該当していたようでこれが原因だった。以下の手順でbreakurlを削除してLyXを再設定することで解決した。
  1. breakurlパッケージをアンインストール(関連ファイルを削除)
  2. mktexlsrを実行
  3. LyXでTools⇒Reconfigure⇒LyXを再起動
LyXが自動で読み込むパッケージについては私はよくわかっていない。他の人の参考になるように、私が普段作成している文書でLyXが自動に読み込んでいるパッケージのリストを掲載する(breakurlは載っていない)。
\usepackage{mathptmx}
\usepackage{helvet}
\renewcommand{\ttdefault}{txtt}
\usepackage{listings}
\usepackage{geometry}
\synctex=1 \usepackage{etex} %% HERE %%
\usepackage{color}
\usepackage[japanese]{babel}
\usepackage{longtable} %% when using long table
\usepackage{float}
\usepackage{booktabs} %% when using formal table
\usepackage{url} %% when using \url command
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage[authoryear]{natbib}
\usepackage[unicode=true,pdfusetitle,
 bookmarks=true,bookmarksnumbered=true,bookmarksopen=true,bookmarksopenlevel=3,
 breaklinks=true,pdfborder={0 0 0},backref=false,colorlinks=true]
 {hyperref}
\hypersetup{
 pdfencoding=pdfdoc}
上記リストはLyXの設定(Document⇒Settings…)によってユーザーごとに異なると思われる。上記で登場したLyXが自動的に読み込むパッケージにオプションを設定したければ、以下のいずれかの方法を取るしかない。
  1. LyXからDocument⇒Settings…やTools⇒Preferenceから設定できるものはそこで設定する。
  2. hyperrefの\hypersetupのように後からオプションを追記できる場合はそのコマンドをLyXのDocument⇒Settings…⇒LaTeX Preambleに記述する。
  3. LyXのDocument⇒Settings…⇒Document Class⇒Customにdocumentclassオプションとして設定する。documentclassのオプションに書いた内容は各パッケージにオプションとして引き渡される。
また、ユーザーが一番最初にパッケージの読み込みやコマンドの記述を自由に行える箇所は上記リストの以下のコマンドの箇所となっている。
\synctex=1 \usepackage{etex}
uplatexでなくてpdflatexやlualatex系に移行できればこうしたパッケージで引っかかる問題を気にしなくていいのだろう。現状はplatex系で実現している縦組みや日本語の禁則処理を満足できるほどの環境がpdflatexやlualatexでは整っていないのでuplatexで我慢するしかない。

0 件のコメント:

コメントを投稿