Lyxを使ってみました

この間LaTeXを少し勉強したついでにLyX | LyX – 文書プロセッサというLaTeX機能を持ったワープロをざっと使ってみました。


LaTeXの知識は特別必要なく、たくさんの支援機能があります。\refとかBibTeXとかの参照はもちろん、数式も直感的に作れます。ただしちょと重く感じました。まぁ個人的にはVim-LaTeXの方が軽いし、覚えてしまえばコマンド入力も楽だろうからいいかなーと思いますが、自分の作っている文章の大体の様子がコンパイルすることなくすぐ分かるところはいいですね。

で、Lyxには既存のTeXファイルをインポートする機能があるのですが(実体はtex2lyxというコマンド)、これがまだ開発途中で日本語にはいまいち対応していないようです。それだといまいち使えないなーと思っていたのですが、どうやらtex2lyxで作られた*.lyxファイルをちょこっと変更すると使えるみたいです。いちいちtex2lyxした後に自分で変更するのは面倒なので次のようなシェルスクリプトを書いてみました。(使わないのにをやってるんだろうw)


追記:2009/9/11 testコマンドってショートサーキットされないんですね。修正しました。


#!/bin/sh
# textolyx.sh
# tex ファイルを lyx 形式に変換する。
# 使い方:textolyx hoge.tex
# 複数のファイルをインポートしているファイルは、main.texとして処理する。
# (そうしないときちんと変換されない。)
# sed で置換しているところ
# 1 \lyxformat
# 2 \language
# 3 input,include
# 4 bibtex
# 5 ref,cite

if [ $# -ne 1 ]; then
echo "usage $0 hoge.tex"
exit 0
fi

if [ `basename $1 .tex` = `basename $1` ]; then
echo "usage $0 hoge.tex"
exit 0
fi

if [ $1 = "main.tex" ] ; then

for texfile in `find ./ -name "*.tex"`
do
nkf -w --overwrite $texfile
echo "nkf -w --overwite $texfile"
done

tex2lyx -f main.tex

for lyxfile in `find ./ -name "*.lyx"`
do
sed -i -e 's/\(\\lyxformat\) 247/\1 345/' \
-e 's/\(\\language\) english/\1 japanese/' \
-e 's/\(\\begin_inset\) Include \\\(.*\){\(.*\)}/\1 CommandInset include\nLatexCommand \2\nfilename "\3"/g' \
-e 's/\(\\begin_inset\) LatexCommand \\cite{\(.*\)}/\1 CommandInset citation\nLatexCommand cite\nkey "\2"/g' \
-e 's/\(\\begin_inset\) LatexCommand \\bibtex\[\(.*\)\]{\(.*\)}/\1 CommandInset bibtex\nLatexCommand bibtex\nbibfiles "\2"\noptions "\3"/g' \
-e 's/\(\\begin_inset\) LatexCommand \\ref{\(.*\)}/\1 CommandInset ref\nLatexCommand ref\nreference "\2"/g'\
-e '/preview false/d' $lyxfile
done

lyx main.lyx &

else

nkf -w --overwrite $1
echo "nkf -w --overwite $texfile"
tex2lyx -f $1
filename=`basename $1 .tex`.lyx
sed -i -e 's/\(\\lyxformat\) 247/\1 345/' \
-e 's/\(\\language\) english/\1 japanese/' \
-e 's/\(\\begin_inset\) LatexCommand \\cite{\(.*\)}/\1 CommandInset citation\nLatexCommand cite\nkey "\2"/g'\
-e 's/\(\\begin_inset\) LatexCommand \\bibtex\[\(.*\)\]{\(.*\)}/\1 CommandInset bibtex\nLatexCommand bibtex\nbibfiles "\3"\noptions "\2"/g' \
-e 's/\(\\begin_inset\) LatexCommand \\ref{\(.*\)}/\1 CommandInset ref\nLatexCommand ref\nreference "\2"/g'\
$filename

lyx $filename &

fi

exit 0

シェルスクリプトなんてはじめて書いたのでどこかおかしい所があるかもしれないです。

処理内容としてはまず、ファイルをUTF-8にして(じゃないと文字化けする)、それをtex2lyxで変換、そのあとに出来たファイルの一部を置換しています。ファイル名がmain.texだった場合は、カレントディレクトリ以下の*.texファイルをインクルードしていると仮定してそれらについても処理を行います。

*.lyxファイル中の\lyxformatと\languageを変更すれば日本語は使えるようになるようですが、そうすると一部のコマンドを変更する必要があるみたいです。とりあえず自分が気づいたところは置換していますが、まだまだ使えないコマンドがあるかと思います。(tableとかはlyx2tex自体対応してないみたいです)

まぁ、lyx->texの変換はできるので、ややこしい数式とかをこれで作ってそれをtexに変換してコピペ、っていう使い方とかいいかもしれないです