f

2013-12-29

欧文フォントにフリーで高品質なTeX Gyreフォントを使おう

修士論文の研究室内最終報告書の印刷・提出で失敗した。TeXで書いていたのだが、欧文書体の太字の設定が反映されていなかった。

今まではTeXのディストリビューションとしてW32TeXを使って作業しており、そのときに欧文のセリフ体とサンセリフ体にTimes New RomanとArialが埋め込まれるようにしていた。しかし、つい最近になってTeXのディストリビューションをTeX Live2013に変えた。TeX側にフォントをインストールするのを忘れていたため、フォントが埋め込まれず太字が反映されなかったようだ。

以前から思っていたが、Times New RomanとArialは広く使われているが、フリーでないのであまり使うべきでないと思う。この機会に一生使えるようなフリーで高品質な欧文フォントを探してみた。

探した結果、フォント名にTeXの名を冠するTeX Gyreフォントに出会った。このフォントはTimesやHelveticaなどの「Adobe 基本 35 書体」に対応するOpenTypeフォントを提供しており、フリー(商用利用可能)で品質が高い。

フォントは公式サイトで配布されている。ライセンスはGUST Font Licenseというもので、法的にはLaTeX Project Public License (LPPL), version 1.3c以降と同等とのことだ。

参考:http://www.gust.org.pl/projects/e-foundry/licenses

TeX Gyreフォントのファミリは以下のとおりになっている。

TeX Gyreフォントのファミリー一覧
TeX Gyre ファミリ名元のAdobe フォントTFM名
TeX Gyre Adventor Avant Garde qag
TeX Gyre Bonum Bookman Old Style qbk
TeX Gyre Chorus Zapf Chancery qcs
TeX Gyre Cursor Courier qcr
TeX Gyre Heros Helvetica qhv
TeX Gyre Heros Cn Helvetica Narrow
TeX Gyre Pagella Palatino qpl
TeX Gyre Schola New Century Schoolbook qzc
TeX Gyre Termes Times qtm

どのファミリも基本的にRegular、Italic、Bold、Bold Italicの4スタイルを持っている。

引用元:http://zrbabbler.sp.land.to/xelatex1.html

TeX Gyreフォントの内、それぞれSerif、San serif、Typewriter体である以下の3書体は重要度が高いと思われる。

  1. TeX Gyre Termes
  2. TeX Gyre Heros
  3. TeX Gyre Cursor

serifやsan serif体のフォントはTeX Gyreフォントの中に他にもあるが見比べたところ上記のフォントが個人的に良いと思った。これらのフォントを使うには以下のように提供されている各種パッケージを使うのが楽だ(TeX Live 2013では標準でインストールされている)。

\usepackage{tgtermes,tgtheros,tgcursor}    

しかし、これらの提供されているパッケージを使うと日本語のフォントが固定され、ウェイトが変えられない。具体的には、太明朝や太ゴシック類が使えなくなってしまう。 従来の日本語フォントとTeX Gyreフォントを使うには以下のように英字フォントの指定に必要な部分だけ直接入力する。

\renewcommand{\rmdefault}{qtm} % TeX Gyre Termes
\renewcommand{\sfdefault}{qhv} % TeX Gyre Hereos
\renewcommand{\ttdefault}{qcr} % TeX Gyre Cursor

参考:http://fugenji.org/thomas/diary/index.php?no=r829

または、パッケージを読み込んだ後に太字の設定を調整すれば良いらしい(未確認)。

\usepackage{tgtermes,tgheros,tgcursor}
\renewcommand{\bfdefault}{bx}

参考:http://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=902

こうすることでTeX Gyreフォントを使える。品質が高くてかつフリーなのでおそらく一生使っていけるのではないかと思っている。

個人的にはTeX Gyre Cursorは数字0とアルファベットOの区別がつきにくいので、以下のようにしてTX Typewriterを使っている。

\renewcommand{\ttdefault}{txtt}

TeX Gyre Termesは@の斜体(italic)など記号関係で太字や斜体に対応していないものが一部ある。

TeX GyreフォントはTeXに限らずLibreOffice WriterやWordなどの他のソフトでも使え、しかもM+フォントとは異なりフォントを指定しなくても太字・斜体の変更も対応できている。今後は特に理由がなければTeX Gyreフォントをメインの欧文フォントに使うことにしよう。

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で我慢するしかない。

2013-12-08

Breakable \url with long-hyphenation-word

LaTeXにおいて参考文献としてURLを挙げるときに以下のようにハイフン-で繋がれた長いURLを貼り付けないといけないときがある。
http://www.very-very-huge-big-long-hyphenation-many-many-word
LaTeXでリンクを貼る場合は、hyperrefパッケージで提供されている\hrefコマンドや\urlコマンドが使える。これらのコマンドの書式は以下。
\href{<URL>}{<name>}
\url{<URL>}
通常、LaTeXでは長い単語が行末にかかると自動で単語の前半と後半を2行に分けて、間をハイフンでつなぐハイフネーションを行いうまく組版してくれる。このハイフネーションは一定の規則にしたがってLaTeXで自動で行うとのことで新語にも対応できる。
しかし、最初に例に挙げたようなもともとハイフンで繋がれた長い単語郡では、どうやらLaTeXではそれ自体が既にハイフネーションの行われた単語としてみなされ、ハイフネーションが行われず欄外にはみすことがある。
この欄外のはみ出しは\urlコマンドを使うときに遭遇する。\hrefコマンドではふまく折り返しされる。
o: \href{http://www.very-very-huge-big-long-hyphenation-many-many-word}{http://www.very-very-huge-big-long-hyphenation-many-many-word}
x: \url{http://www.very-very-huge-big-long-hyphenation-many-many-word}
これに対処するには、urlパッケージを読み込みオプションにhyphensをつけるとハイフン-の箇所で自動的に折り返してくれる
\usepackage[hyphens]{url}
LyXでは、urlパッケージが自動的に読み込まれるため、以下の場所に<hyphens>を記述しdocumentclassのオプションにhyphensをつけて対処する。
Document⇒Settings⇒Document Class⇒Class option⇒Custom
参考:
  • http://tex.stackexchange.com/questions/49788/hyperref-url-long-url-with-dashes-wont-break
  • http://tex.stackexchange.com/questions/141449/lyx-how-to-add-option-to-package-automatically-load
なお、冒頭に上げたハイフンが入った長い単語の折り返しを実現するためのパッケージとしてbreakurlもある。
参考:
http://tex.stackexchange.com/questions/54946/how-to-break-long-url-in-an-item
しかし、breakurlのマニュアルのIntroductionの記述によると、このパッケージはどうやらpdflatexかdvips経由は利用可能でdvipdfmx経由は利用不可な模様。

CygwinでGNU screenを使ってターミナルの内容をクリップボードにコピー

どうやらCygwinではカーソルを使って範囲を選択してコピーできないようで、今まではマウスでドラッグして選択して他のファイルに貼り付けたりしていた。効率が悪いと思ったので、どうにかキーボードだけでできないか調べた。gnu screenでコピーした内容をうまくクリップボードにもコピーされるようにすることでCygwinのターミナルの文字列をキーボードだけでコピーできるようだ。
また、この方法によりCygwinに限らずLinux上のターミナル(端末)上の内容もクリップボードに共有できる模様。
参考:
  • http://qiita.com/k_ui/items/d0ae1e7b4d553830ccb9
  • https://gist.github.com/yoshikaw/862031
  • http://d.hatena.ne.jp/sugyan/20100706/1278357368
  • http://rcmdnk.github.io/blog/2013/03/24/screen-bash/
日本語の文字化け対策:
  • http://futurismo.biz/archives/1364
  • http://d.hatena.ne.jp/edvakf/20101017/1287285851
基本的には以下のサイトのコードをコピペした。
http://qiita.com/k_ui/items/d0ae1e7b4d553830ccb9
ただ、このままだと日本語は文字化けするので、nkfを間にはさみ-sでShift-JISに変換して対処した。
以下の内容を~/.zshrcか~/.bashrcなどに記述。

## share gnu screen clopboard
if which xsel > /dev/null 2>&1
then
# X Window System 環境でのコピー (xsel をインストールする必要あり)
copy_cmd="xsel -i -b < /tmp/screen-exchange;\
xsel -i -p < /tmp/screen-exchange"
elif which pbcopy > /dev/null 2>&1
then
# Mac OS X 環境でのコピー (要動作テスト)
copy_cmd="pbcopy < /tmp/screen-exchange"
elif which putclip > /dev/null 2>&1
then
# Cygwin 環境でのコピー(要動作テスト)
# copy_cmd='putclip < /tmp/screen-exchange'
# copy_cmd='nkf -s < /tmp/screen-exchange | putclip'
#    copy_cmd='iconv -t SJIS < /tmp/screen-exchange | putclip' # iconvは高頻度で標準で入っている。
    copy_cmd='iconv -s -t SJIS < /tmp/screen-exchange | putclip' # エスケープ文字があると、コピーは成功してもエラーメッセージが出るのでメッセージを表示しない。[20140118]
 
fi
#[ $STY ] && [ $copy_cmd ] &&\
[ $STY ] && [ "$copy_cmd" ] && {
screen -X bindkey -m ' ' eval "stuff ' '" writebuf "exec sh -c '$copy_cmd'"
screen -X bindkey -m 'Y' eval "stuff 'Y'" writebuf "exec sh -c '$copy_cmd'"
screen -X bindkey -m 'W' eval "stuff 'W'" writebuf "exec sh -c '$copy_cmd'"}
これによりgnu screenでコピーする際にクリップボードにもコピーされる。これでcygwinのターミナルの内容をキー操作だけでクリップボードにコピーして他のソフトでも使えるようになった。

2013-12-04

初心者にとってのLaTeXの問題点とLyXの紹介

この記事はTeX & LaTeX Advent Calendar 2013における、4日目の記事です。3日目はdoraTeXさんの「TeXによる化学組版」でした。5日目はCardinalXaroさんの「1つのTeXファイルから2つのPDFファイルを作る」です。

LaTeXは非常に多機能でおそらく最も高機能な組版処理ソフト(ワープロ)だと思う。特に、近年登場してきたTikZやPythonTeXは単なるワープロの限界を超える機能を提供してくれる。しかし、その難解さ・とっつきにくさからそこまで多くは普及していないのが現実だろう。

この記事ではそうしたLaTeXの問題点や、LaTeX初心者が不便に思う点を、2年前の2011年に初めて使い始めたときに感じた私の視点から指摘する。そして、こうしたLaTeXの問題点を緩和し、LaTeXの機能をマウスやキー、メニューから選択することで直感的に実現可能なGUI(Graphical User Interfac)を持ち合わせたLyX(リックやリックス)という文書処理ソフトについて紹介する。

初心者にとってのLaTeXの問題点

私がLaTeXを使い始めたきっかけは学部4回生の卒業論文だ。2011年の9月に先輩から初めてLaTeXについて教えてもらい、それ以降ゼミでの報告資料はLaTeXで書いていた。おそらくこのように卒業論文や修士論文をきっかけにLaTeXに触れる学生は多いのではないだろうか。

インストールは[改訂第4版]美文書作成入門[奥村晴彦2006改訂第4版LaTeX2美文書作成入門]に付属のディスクを使用した。LaTeXの呼び方はラテフとよんでいるが、これは指導教員にそう教わったため。エディターにはWinShellを使い、当時は基本的にコードはベタ打ち!だった。

当時を思い返し、特にLaTeXで辛かった点を以下に列挙する。

  1. 覚えるべき大量のコマンド
  2. 打ち間違いによるストレス
  3. エラーへの対処の困難さ
  4. 打鍵の多さ
  5. 長い数式の視認性が悪さ
  6. 表データの取り込み。
  7. 図の取り込み
  8. ラベルやbibtexキーの検索性

以下では上記の各項目について説明する。

覚えるべき大量のコマンド

1.について、何か新しいソフトを使うに当たって当然「覚えないといけないこと」がある。しかし、他のワープロソフトと比較してLaTeXはその「覚えないといけないこと」が非常に多いと感じている。

例えば、ページの余白を変えようと思うとgeometryパッケージを使わなければ、ページのサイズなどから自分で計算して\topmargin\textheightといったパラメータを設定して、プレビューして確認しながら調整する必要があり、各種パラメータの知識(存在や役割)が必要で非常に煩雑だ。

特に数式については大量のギリシャ文字の表記法も覚える必要があり,こういった類の無数コマンドに圧倒される。

打ち間違いによるストレス

2.について、1と関係するがパソコンを使ったミスとして打ち間違いはつきものだと思う。とりわけ、LaTeXではそれが非常に大きいのではないかと思う。LaTeXはマークアップ言語であるため、括弧や環境でテキストを囲うことが非常に多い。

括弧[{$\end{hoge}で閉じるを忘れたり、バックスラッシュ\で特殊文字をエスケープするのを忘れることはよく経験することだろう。また、コマンド名が紛らわしいものが多いのもミスを誘発する。単数形(includegraphic)なのか複数形(includegraphics)なのか、tabularなのかtableなのか graphicxなのかgraphicsなのか。特に、単数形か複数形なのかはコマンドのオプションなどで固有で新しいコマンドを使うときはいまだに覚えきれず遭遇するエラーだ。

エラーへの対処の困難さ

3.について、2で挙げた打ち間違いによるミスはその場ですぐに気付けば些細なものだ。しかし、考えた内容を一気に書き上げて最後にプレビューを確認する際に打ち間違いによるエラーが出た場合はその原因箇所を特定するのが困難である。

また、論文などの長文を書く場合は、複数のパッケージを読み込みや環境やコマンドを入れ子にしたり組み合わせることがあると思う。この場合、パッケージ間の競合や、環境・コマンド同士の組み合わせや配置によっては原因がよくわからないエラーに出くわすことがある。エラーの解決に丸1日かかることもあり、提出間際で時間のない場合に致命的になる。

打鍵の多さ

4.について、LaTeXはマークアップ言語であり,本文に対して括弧やバックスラッシュを使ったコマンドや環境でマークアップすることで文書としての構造を持たせたり、個別の処理を行える。そのため、本来の内容に加えてこれらのコマンドや環境を書く必要があり、WriterやWordをはじめとするワープロと比べて、入力する文字が増える。

打鍵量が増え指も疲れるし、入力文字数が増えることで相対的に打ち間違えの可能性も増えることになる。特に、箇条書きやその入れ子はおそらく多用すると思うが、LaTeXでそれを実現する場合、以下のように階層ごとにitemize環境で囲み、更に行頭に\itemという箇条書きの記号をその都度入力する必要がある。

\begin{itemize}
  \item hoge
  \begin{itemize}
    \item hoge
  \end{itemize}
\end{itemize}

それに対して、Wordであれば、行頭に中点・を記入してスペースを入れるとオートコレクトにより自動で箇条書きに移行し、階層の上げ下げもTabやShift-Tabなど非常に直感的で素早く実現可能だ。

長い数式の視認性の悪さ

5.TeXはもともとDonald E. Knuthが数式の組版が汚いことに不満を持って開発されたといわれている。そのためか、数式の組版は美しく、また数式を多用する分野の学生や研究者で利用者が多い印象だ。ただ、複雑な数式ではLaTeXコードが数式をうまく表現できているか確認するには非常に視認性が悪い。例えば、以下に量子力学の分野で有名なシュレイディンガー方程式を示す。

i h ψ t =- h 22m 2 ψx 2+V(x)ψ

これをLaTeXコードで書こうとすると次のようになる。

\[
i\bar{h}\dfrac{\partial\psi}{\partial t}=-\dfrac{\bar{h}^{2}}{2m}\dfrac{\partial^{2}\psi}{\partial x^{2}}+V(x)\psi
\]

慣れていなければぱっと見ただけでは実際の数式との対応関係を把握するのが困難だ。分数が入ると括弧が非常に多くなり、視認性が悪くなっている。括弧の綴じ忘れなどで何度もエラー探しをしたことがある。出力結果はきれいだが、式の誘導や展開を行うと数式だらけになりLaTeXコードを見るのはうんざりする。

表データの取り込み

6.について、LaTeXは表の扱いが苦手だ。LaTeXでは基本的に以下のように&で区切って表のセルを表現する。

\begin{tabular}{|c|c|}
\hline 
 & \tabularnewline
\hline 
 & \tabularnewline
\hline 
\end{tabular}
標準的な表の例




通常はCalcやExcelといった表計算ソフトで表を用意すると思うが、LaTeXで使えるようにするには&\tabularnewline\\でも可)を付け加えて整形しないといけない。行罫線\hlineを加えるのは厄介だ。LaTeXに貼り付けた後に列を削除したり入れ替えたりするのは面倒だ。さらに、行や列を連結させるのも一苦労。

% \usepackage{multirow}

\begin{tabular}{|c|c|c|} \hline & & \tabularnewline \hline \multirow{2}{*}{} & \multicolumn{2}{c|}{}\tabularnewline \cline{2-3} & & \tabularnewline \hline \end{tabular}
行や列を連結した表の例







連結した行や列の位置を考えてコマンドを入力し、さらに関連するセルの数の対応を把握しておかないといけない。連結した状態で表計算ソフトでLaTeXコードを用意するのは困難だ。表を図として貼り付けるという方法も考えられるが、その場合longtableを使った複数行にまたぐ表は非常に面倒であり、LaTeXで取り込むために図の変換などが必要である。

図の取り込み

7.について、LaTeXを使い始めた時は画像をepsで用意するように教えられ、epsでなければ画像を取り込めないと思い込んでいた時期があった。そのため、Excelなどで作ったグラフをInkscapeに貼り直してepsに保存するという間に面倒な作業が挟まっていた。実際には、epsの他にpdf, png, jpgなども可能(svgやemf, wmfは確か不可)だ。

しかし、pngやjpegを取り込むにはバウンディングボックスをincludegraphicsオプションのbbで指定したり、変換が必要でとにかく面倒である。更に、取り込む際には以下のようにパスとファイル名を記述して指定する必要があり、画像名を覚えていなければそれを逐一フォルダを開いて確認する必要があり、これもまた面倒である。

\includegraphics[width=5cm,bb=10 20 30 40]{IMG_0946.JPG}

また,LaTeXでは画像を文書中に埋め込むことはできないので,常に.texファイルと画像をセットで扱わないといけない。WordやWriterであれば,画像自体を文書に埋め込むことができるので,パスを意識する必要がなく,扱いやすい場合がある。

ラベルやbibtexキーの検索性

論文を執筆する際には、数式や図表、さらには文献を参照する。その際に必要なのが相互参照である。LaTeXでは\labelコマンドの引数にラベル名を書き、後から\refコマンドでそのラベルを参照することで数式や図表番号を参照することができる。また、文献の場合は\citeコマンドの引数にキーを渡すことで参照できる。

操作自体は簡単だが、論文が長くなるほど式や図表、参考文献とラベルの対応関係を把握できなくなる。\refの引数に誤ったラベルを書いてしまうと、相互参照の番号の部分が?になる。?なならまだ間違えたことがわかるからいいが、別の式や図表を参照してしまった場合、文章を読むまで参照が正しいか判断ができない。

一般的な解決方法

以上でLaTeX初心者が出くわすLaTeXの問題点について指摘した。他にもplatexの実行時に生成される大量の中間ファイルが邪魔だとか、プレビューに時間が掛かるなど挙げればきりがないだろう。

IDEの存在

これらのLaTeXの問題を解消する方法として、IDE(Integrated Development Environment:統合開発環境)の利用が挙げられる。IDEとは、一般的に作業を行う上で必要な機能を集約した環境のことである。一般的には以下の機能を持つものが多い。

  • プロジェクト管理
  • プレビュー
  • 入力補完
  • シンタックスハイライト

LaTeXの利用者はおそらくほとんどがIDEを利用するか、VimやEmacsといったテキストエディタにLaTeXで作業するためのプラグインを導入するなどカスタマイズして作業をしていることだろう。

おそらく多くのMacの利用者はTeXshopを使い、Windowsの利用者はWinshellかTeXworks、TeXmaker、EasyTeXといったところを使っているのではないだろうか。他には、秀丸、Emacs、Vim、xyzzyといったところだろうか。

私のPCはWindowsで、美文書作成入門第4版やTeXインストーラ3でインストールしたW32TeXをLaTeX環境のベースとしていたのでWinshellを当初使っていた。WinshellのUIは英語でその機能のほとんどを使いこなせていなかった。その結果、LaTeXコードも補完機能を使わないすべてベタ打ちだった。

IDEの調査

打鍵の多さと打ち間違いの多さから非常にストレスを感じた私は、2011年の学部最後の冬休みと2012年の大学院入学前の春休みにLaTeXのIDEを調べまわった。具体的にはインストールして、実際に操作して吟味するというのを繰り返した。調査対象は以下のリストだ。

  • Easy TeX
  • Yotuba TeX Editor
  • TeXnician
  • xyzzyとKaTeX
  • TeXE
  • WTexEdit
  • TeX asisstant
  • TeXEditor
  • LyX
  • TeXmaker

LaTeX初心者は往々にして、shellの初心者でもある。そのため、VimやEmac、それに類するプログラム向けエディタはそれだけで敷居が非常に高い。まして、当時の私は卒論のまっただ中でそうしたエディタの操作を覚える時間的余裕がなかった(xyzzyやEmacs、Vimが除外)。また、私は初心者であったがいちいちマウスでクリックして入力するのは面倒なので、入力補完とそのカスタマイズに優れているものを選んだ(Easy TeXが除外)。

2011年の冬休みの時点ではTeXEditor(似たような名前のものがいくつかあるので注意)が入力補完が直感的で自分でのカスタマイズも簡単で使いやすかったのでこれで卒業論文を書いた。

ただ、動作が遅くてまだ納得がいかなかったので春休みにも調査し、このときにLyXの存在を知った。その当時はLyXの独特のUIや操作になれるのに時間がかかると思って敬遠して見送った。ただ、そのUIやHPでの説明とそのロゴやマスコットキャラクターが記憶に残った。このときの調査では最終的にTeXmakerにたどり着いた。おそらく、LyX以外でWindowsでLaTeXのIDEを使うならTeXmakerかVim、Emacsあたりを使うことになると思う。それくらい、TeXmakerは完成度が高いように思った。入力補完はもちろんUIも良かった。

LyXを使うきっかけ

しかし、TeXmakerを使っても満足できなかった。大学院の講義のレポートでTeXmakerを使っていたが、コマンドは覚えきれないし、打ち間違いによるエラーはあった。長い数式を書くと括弧やスペルミスでエラーは出るし、わけのわからないエラーで提出直前になって何時間も時間を浪費した。もうLaTeXを使うのをやめてWordにしようかと何回も考えた。ただ、LyXの存在が気がかりだった。

そこで、2012年の前期の大学院の講義が終わった8月初めの時点で、LyXを試してみてそれでダメならWordかWriterで文書を書くことにしようと決めて、LyXを使い始めた。

インストールの時点では日本語がうまく表示できなくて早速躓いた。インストールの方法はTeX Wikiを参考にどうにかうまくできた。ネット上には当時は日本語の情報があまりなくて頼りになるのは付属のHelpの文書だった。Helpの文書とネットの情報を頼りにLyXとLaTeXの知識を身につけたことでLaTeXをやめずに現在まで至っている。

LyXの紹介

ここからはLyXについて説明していく。LyXを使うことで最初に8つ挙げた初心者にとってのLaTeXの問題点をかなり解消できると確信している。導入や使い方というよりはLyXの便利な機能などに重点をおいて説明し、読者に興味を持っていただくことを目標とする。

LyXとはなにか?

LyXは、TeX をバックエンドとして、GUIを有するソフト。WYSIWYG (what you see is what you get) とは異なる、WYSIWYM (What you see is what you mean) を標榜するワードプロセッサである。

Wikipedia

LyX(リックやリックスなどと呼ばれる。呼称は定まっていない)のロゴは以下のコマンドで構成されている。

\providecommand{\LyX}{L\kern-.1667em\lower.25em\hbox{Y}\kern-.125emX\@}
LyXのロゴの表示コマンド(LyX wiki | LyX / Logotype

また,TeXのTeX lionのようにLyXにはマスコットキャラクターがいて、The LyXという。哺乳類の動物であるplatypus(カモノハシ)をモチーフしているとのことだ。

LyXのマスコットThe LyX(LyX wiki | LyX / Mascot

LyXは簡単にまとめると、以下の2つの性質をもったワープロソフトだといえる。

  • WordやWriterのようなGUI。
  • LaTeXベースの組版エンジン。

ライセンスはGPL(つまり、フリーソフト)でWindows、Linux、Macのどの環境でも動作する。

LyXのチュートリアルを始めるとわかるが、LyXではWYSIWYMという思想を非常に大事にしている。普通のワープロはWYSISYG(What You See Is What You Get)といい、最終出力は現在入力して「見えている内容と同じ」である。WYSIWYM(What You See Is What You Mean)とは、最終出力は実際に入力してみえている内容とは異なり、入力時に「意図した内容」 が得られる。意図した内容とは、文書構造などのことである。

初めて使う人はその思想や操作体系に戸惑うと思う。特に決定的なのは、基本的には空行や行頭の空白及び連続した空白が許可されないことだろう。また、水平方向のスクロールバーも存在しない(LyXが自動で折り返す)。しかし、LaTeXの機能をGUIに落としこんでおり、LaTeXコードをあまり意識しなくても使えるようになっており、LaTeXのGUI版だと思って問題無い。

本家公式サイト
LyX | LyX – The Document Processor
日本語公式サイト
LyX | LyX – 文書プロセッサ

LyXのよいところ

LyXの素晴らしいところは前述した初心者にとってのLaTeXの問題点を解消・緩和できるところだ。

文書作成時の基本コマンドは、ドロップダウンリストやメニューから選択することで章・節の設定・目次の挿入、図表の挿入、minipageの挿入などLaTeXを使って普段作成するような文章を自分でLaTeXコードを直打ちしなくても簡単に作成することができる。極端な話,LaTeXコードを一切見なくても組版が可能だ。

以下でいくつかのカテゴリに分けて優れている点を列挙する。

ワープロ環境
  • UIやマニュアルのほとんどが日本語化済み。
  • 画面分割・タブウィンドウの対応。自動バックアップ。バージョン管理システムとの連携。
  • アウトラインやメッセージウィンドウ、LaTeX Sourceウィンドウなどの画面配置のカスタマイズ。
文書作成機能
  • 普段の文書に必要な節、各種箇条書き、lstlistingなどをTeXコードを入力しなくてもアイコンやドロップダウンからの選択・短絡キーにより入力可能。
  • 箇条書きはTabやShift Tab、Alt Right、Alt Leftなどで階層の上げ下げを即座に行える。
  • 数式エディタが搭載されており、入力した数式がリアルタイムで表示される。
  • 表エディタが搭載されており、ボタンクリックで行・列の削除・移動・追加・連結などが可能。
  • 図の貼付け時にLyXのエディタ上に画像をプレビュー可能。
  • ダイアログウィンドウからフォルダにアクセスして取り込む図を選択できる。
  • JPGやPNGなどのほとんどの画像をユーザー側での変換などの前処理なしでLyXで自動で変換して取り込んでくれる。
  • 図表・数式番号のラベルやBibTeXキーをダイアログウィンドウから選択したり、検索して参照できる。
玄人向け機能
  • Xy-picのXymatrixコードをLyX内で自動プレビュー
  • 楽譜組版ソフトLilipondも同上。
  • 文書途中でのLaTeXコードの直打ちにも対応。
  • HTMLやXHTMLなど他の文書へのエクスポートに対応。
  • .texファイルのインポートと.lyxから.texへのエクスポートが可能。
  • 「LyX上のほとんどの動作」にユーザー独自の短絡キー(ショートカットキー)の設定が可能。
  • 独自・新規コマンドを挿入する独自の差し込み枠の定義が可能。
  • .lyxファイルはテキストファイルなのでLyXの構文を維持すれば独自に書き込み可能(図の一括貼り付けなど)。

最近のLyX(2.0.6以降)だと標準でeLyXerがついてきており、File⇒Export⇒HTMLで一発で変換可能なので簡単だ。また,標準機能としてXHTMLへの出力機能はサポートされている。数式や箇条書き、表やlstlisting、目次もちゃんと変換できている。ただ、BiBTeXを使った参考文献は不完全となっている。

外観・操作の様子

ここまで書いてきて、LyXの具体的な機能についてようやく説明しようと思う。ただ、LyXの操作の状況を文章だけで説明するのはかなり難しい。かといって、図を大量に貼り付けるのはかなりしんどい。そこで、実際の操作画面をキャプチャした動画を以下に掲載したのでこれをご覧になって、LyXの操作やGUIがどうなっているのか見ていただきたい。

動画での操作について簡単に説明する。

  1. 最初にまず、タイトルと著者名、日付を記入。
  2. 見出しを書きながら、LyXの画面構成について説明。
    1. 基 本的にはメニューバーやドロップダウンメニューからLaTeXのコマンドや環境に相当するものを選択して挿入していく。ドロップダウンメニューはAlt-p Spaceでフォーカス可能で、メニューバーもキーボードからアクセス可能なので、基本的にはキーボードからすべて操作可能。
    2. 使いやすいようにアウトラインやLaTeXソースを表示するウィンドを表示。
      1. アウトラインは図表なども表示でき、レベルの上げ下げ、移動なども下のボタンで可能になっている。
      2. LaTeXソースにはLyXでの入力が実際のTeXではどう解釈されるかをリアルタイムで表示してくれるので便利。
  3. 続いて箇条書き。ドロップダウンやドロップダウンの下のアイコンから箇条書きがかける。
    1. レベルアップダウンはTab/Shift TabかAlt-Left/Rightで可能。 Alt-Up/Downで上下の移動も可能。組み合わせたネストも簡単。
  4. 数式。
    1. C-m/C-Mか挿入から数式ボックスを挿入する。このボックス内に数式をTeX記法で書いていく。入力すると候補が表示され、Tabで補間も可能。
    2. シュレイディンガー方程式は長くて複雑で覚えていなかったので右辺の入力は断念。
    3. C-EnterでAlign, eqnarrayに移行して多段式も可能。画面下部に式の操作アイコンも登場。
    4. 数式ボックス内で、昨日のdoraTeXさんの「TeXによる化学組版」という記事にも登場した\ceコマンドを初め、Xy-picのxymatrixなどいろいろ使える。
    5. LyX上で文字のTeXの数式を選択してC-mで一発で数式に変換可能。
    6. 併記した数式コードはlstlisting環境で表示。
    1. 挿入⇒表を選択。
    2. 画面下部に表の操作アイコンが登場。
    3. 列・行の連結・削除、追加も簡単。
    4. 右クリックで幅やlongtableの設定も可能。
    5. 表計算ソフトなどからそのまま貼り付けられる。
    1. 挿入⇒図でダイアログが表示され、そこから選べる。
    2. 例として、The LyXとTeX Lionを表示。
    3. 選んだ画像はLyX内でプレビューされる。表示しない設定も可能。
    4. フロートで囲み、キャプションやラベルも付けれる。
    5. 相互参照には全リストから検索可能。
  5. その他。
    1. BibTeXを使った文献引用。最初にbibファイルを選択する。
    2. TeXコードの直打ち。C-lで赤いボックスが登場。この中でTeXが直打ち可能。\barchartという独自コマンドを例で書いている。
    3. hyperrefのurlやhrefコマンド。
    4. なお、\#などのLaTeXの特殊文字は自動的にTeX内部でエスケープして入力される。
  6. 玄人向け
    1. LyXのGUIはユーザーが独自コマンドも定義できる。ここでいう独自コマンドとは、LyXが標準でGUIを用意していないコマンドのこと。
    2. 挿入⇒Custom Insetでボックスを追加できる。ドロップダウンメニューにも独自環境を追加できる。
    3. 例として、tcolorboxとsmartdiagramを表示。
  7. プレビュー
    1. ファイル⇒書き出し⇒PDFか文書⇒表示⇒PDFでPDFの出力かプレビューが可能。
    2. プレビューとしてSumatraPDFで出力結果をプレビュー
    3. SyncTeXにも対応。

歴史

LyXのバージョンヒストリーを以下の表に示した。

LyXの歴史
リリース年バージョンリリース備考
1999
1.0.0
2003
1.3.0
2006
1.4.0
2007
1.5.0
2008
1.6.0
2011
2.0.0
2011
1.6.10
1.6系統最終
2012
2.0.4
私の最初の使用バージョン
2013
2.0.6
2.0系統最終?
201?
2.1.0
beta版がリリース中

1999年に最初のバージョンがリリースされ更新されてきた。私が初めて使ったのはLyX2.0.4である。最新の安定バージョンは LyX2.0.6となっているが、時期バージョンのLyX2.1.0beta2も公開されており自由にDLできる。LyXのバージョン番号の見方としては以下のように、最初の2桁がメジャーバージョンを示しており、新しい機能の追加などでバージョン間で大きな変更がある。最後の1桁はマイナーバージョンアップを示しており、バクの改善などの小さいな改良が行われている。

x.x.x
メジャーバージョン1.メジャーバージョン2.マイナーバージョン

メジャーバージョンが異なるLyXのファイルはネイティブな動作が担保されない。

なお、もし新しくLyXを使いはじめるとしたらLyX2.1.0beta2をインストールすることをおすすめする。詳細は述べないが、LyX2.0系統に比べて(個人的に大幅に)機能が向上しているためだ。ユーザが独自に定義できる差し込み枠の設定オプションが増え、カスタマイズ性が向上したことと、 BeamerドキュメントクラスのUIが改善したことが個人的には大きな点だ。

LyXの動作の仕組み

LyXがどのようにファイルを処理してLaTeXを使い、最終出力を得ているかについて簡単に説明しておく。

LyXで文章を作成する際には、LyXのファイルメニューから新規作成を選択するなどして、.lyxという拡張子のファイルに文章を書いていく。この.lyxファイルはテキストファイルになっていて、LyXがこれに書かれている内容を解釈してLyXエディタ上で箇条書きやボックスなどを表示している。

LyXを使うには、MikTeXやTeXlive、W32TeXなどのディストリビューションで事前にLaTeXの使える環境が必要となっている。LyXはインストール時にlatexコマンドの存在するフォルダを指定してそこにパスを通すことでlatex関係のコマンドを使用している。当然使用できるパッケージも通常のTeXのパッケージと同じものが使える。LyX,はただGUIなど部分とlatexコマ ンドなどのプログラムの実行などを内部で行ってくれるだけで、latexの中身については関与しない。

LyXがファイルを処理してPDFなどの出力を得る過程は以下の手順になる。。

  1. LyXのメニューからDocument⇒View⇒PDF(dvipdfm)やFile⇒Export⇒PDF (dvipdfm)などを選択
  2. するとplatexの実行が開始。
  3. この時点でLyXの設定(Tools⇒Preference⇒Paths)で指定しているTempフォルダに.lyxファイルと貼り付けている図、リスト、inputしている子文書類がコピーされ、.lyxが.texに変換される。
  4. .texファイルに対してplatexや必要に応じてbibtexやmendex、さらに図の変換コマンド(comvert, metafile2eps, pdftopsなど)が実行される。
  5. そしてpdfのプレビューを表示。
  6. Exportの場合は元々の.lyxファイルと同じ場所にpdfができる。その他の中間ファイル類はTempフォルダのみに存在。
  7. lyxファイルを閉じるとこれらのTempフォルダは自動的に削除される。

上記のように、一旦Tempフォルダに関連ファイルを一式コピーしてそのフォルダ内でlatexコマンドを実行して出力を返してくれる。このようにして、ユーザにバックでlatexが動いていることを実感させないように振る舞ってくれる。余計な中間ファイルができなくてスッキリする。

課題

LyXは自分にとってとても便利でこれなしでは私はLaTeXにはもう触れない。そんなLyXでも幾つか課題があるので以下で解説する。

外部コマンドとの連携

LyX自体が画像の変換やバージョン管理、RのSweveやKniterなどで自動的にいくつかの外部コマンドと連携している。ただ、それでもカバーしきれていないものがある。特に最近登場してきたPythonTeXもそうだし、TUG2013で発表されたmultibibliographyパッケージの用に独自のコマンドやスクリプトを間に挟む場合のLyX側での対応が不十分である。おそらく、スクリプトなどを書いてうまく設定すれば対応できるのではないかと思われるが、詳細は不明。

既存のコマンド

LyXが標準で使っているコマンドでいくつか改良版があるのに古いものを使っているケースがある。代表的な例だと、longtable環境だ。LyXでは表を挿入して右クリックから選択することでtabularをlongtableに変更することができる。ただ、最近だと改ページを伴う表としてはxtabパッケージのxtabular環境の方が表の全幅を指定できたり高機能。こうしたLyXで既定で使用されているコマンドを変える方法がわかっていない。

個人的な不満

箇条書きなどを書いていると、矩形選択して特定の列を切り取ったり削除したくなる。普段使っているテキストエディタVimと同じような機能を使いたい。

たくさんの図を貼り付けるときにLyXからいちいちダイアログを開いて選択するのは面倒。かといって、全部TeXコードで書くとラベルがダイアログに表示されない。LyXコードをLyX中から編集できるようになれば、そこにスクリプトなんかで書きだしたものを貼り付けたりできるので便利だろう。

周りに使っている人がいないので、文書校閲機能などが意味を成さない。

LyXの参考文献

LyXについて記述された日本語書籍として私が知る限りでは以下の3冊がある。

  • ドキュメントプロセッサLYX入門 小浪 吉史 (2002/9)
  • LyX入門 北浦 訓行 (2009/10/16)
  • LATEX2ε論文作法 藤田 眞作 (2010/12)

書籍が少ないことは付属のマニュアルがけっこう充実していることと知名度が低く需要が少ないことが原因だと思われる。[LyX入門]は購入し、 [LATEX2ε論文作法]は後から存在を知り図書を借りて目を通した。LyX version 2.1になりメニューのToolsやDocumentの構成が若干変わったこともあり、有用性は以前より少し下がったかもしれない。[LyX入門]は私がLyXを使い始めた当初に購入した。細かい情報がのっていないので今となっては不要だが、使い始めの半年は役立った。[LATEX2ε論文作法]は本のたしか 1-2章を割いてLyXの使い方について説明していた。こちらの方が詳しい内容が書いてあったが量は少なかったと記憶している。

結局のところLyXの日本語の情報としては付属のマニュアル(メニュー⇒Help)が一番詳しいのでこれをよく読むことが大事だ。

おわりに

初心者にとってのLaTeXの問題点とそれを緩和するワープロソフトLyXについて紹介した。LyXのユーザーは昨年に比べて増えて、ネットでの情報も増えつつあるが、まだまだ情報は足りないと思う。今後もLyXについてわかったことがあったらブログに記録して公開していくつもりだ。LaTeX の操作に不満をお持ちのみなさん(特に初心者の方)はLyXを使ってみてはいかがだろうか?

2013-12-01

cygwinでのwxPythonのインストールに失敗

ここ3日ほどcygwinでwxPythonをインストールしようと頑張っていた。matplotlibのbackendにWXとかWXAggというのがあって、これを使えばcygwinでも図をpyplot.show()で画面に直接出せるらしい。

 端末から以下のコマンドでバックグラウンドで実行しておけば一応画面上にもbackend: TKAggとかでも出せるが、いちいちバックグラウンドで実行しておくのが面倒。しかもバックグラウンドに出していないとimport matplotlib.pyplotの時点でエラー出るし。
startxwin &

(なお、backendの設定は ~/.matplotlib/matplotlibrcのbackendの値を設定すれば選択できる。)


そこでwxPythonをインストールしようとしていた。
結論としては失敗した。wxWidgetsのインストールまではうまくいったと思ったのだけど、wxPythonのインストールで失敗した。

環境
Cygwin 1.7.25
以下のコマンドで確認可能。
uname -r
1.7.25

使用したPythonのバージョン 2.7.3

安定版のwxPytyhon 2.8.12.1をソースからインストールする。wxPython2.9.5.0でも試したが、wxWidgetsのインストールの時点でアウトだった。
 easy_installや pipでも試したがなかった。
wxPythonのインストールの手順はwxWidgetsとwxPythonのインストールの2つに分かれている。
wxWidgetsのインストール
mkdir -p ~/local/src

cd ~/local/src

wget http://downloads.sourceforge.net/wxpython/wxPython-src-2.8.12.1.tar.bz2

tar jxf wxPython-src-2.8.12.1.tar.bz2

cd wxPython-src-2.8.12.1

mkdir bld

cd bld

../configure –build=i686-pc-cygwin –host=i686-w64-mingw32 –disable-baseevtloop –disable-epolloop –disable-selectloop –with-msw –disable-shared –enable-unicode –disable-precomp-headers –with-sdl –without-odbc –with-libmspack –enable-stl

make
make install

これでインストールできるはず。configureとmakeに結構時間かかる。
configureのオプションでは以下がキーだったようだ。

–without-odbc

–build=i686-pc-cygwin –host=i686-w64-mingw32

コンパイルできたらdllファイルをWindowsのシステムフォルダに保存する。これをしないとコンパイルしたプログラムを実行すると、はlib*.dllがみつかりませんというエラーが出る。

/usr/i686-w64-mingw32/sys-root/mingw/bin/lib*.dll

にdllがある。以下のコマンドでコピーしよう。

cp /usr/i686-w64-mingw32/sys-root/mingw/bin/lib*.dll /cygdrive/c/Windows/system/
  
wxWidgetsの動作確認

cd samples/minimal

make

./minimal.exe
wxPythonのインストール

cd ../wxPython 
python setup.py BUILD_GLCANVAS=0 BUILD_ACTIVEX=0 WX_CONFIG="wx-config --cxxflags" build_ext --inplace
 実行中にundefined refereceというエラー。原因不明で諦めた。
 素直にWindowsのexeファイルからインストールするのが楽でいいのかな…。
参考情報
http://www.kkaneko.com/rinkou/cygwin/wxwidgets.html
http://blog.livedoor.jp/k_yon/archives/51595089.html
wxPythonの公式:
http://www.wxpython.org/BUILD-2.8.html
wxWiki:
http://wiki.wxwidgets.org/Cygwin
GNU Radio:
http://gnuradio.org/redmine/projects/gnuradio/wiki/WxPythonCygwin
MSYS:
http://wiki.kicad.jp/%E3%83%93%E3%83%AB%E3%83%89%E6%96%B9%E6%B3%95#.E4.BE.9D.E5.AD.98.E3.83.A9.E3.82.A4.E3.83.96.E3.83.A9.E3.83.AAwxPython.E3.81.AEMSYS.E3.81.AB.E3.82.88.E3.82.8B.E3.83.93.E3.83.AB.E3.83.89