研究で必要な雑多な知識をごった煮で
プロフィール

termoshtt

Author:termoshtt
大学院生
専攻:流体物理学
Editor: vim
Language: C++,python

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--/--/-- --:-- スポンサー広告 TB(-) CM(-)
makeは非常に優秀なツールだ。
一度依存関係を書いておきさえすれば、それにしたがって勝手にコンパイルしてくれる。
しかも一つの言語ともいえるような機能を持っている。

例えば変数を持てる。Makefile中では
ARG = value
ARG := value

の2つの代入の形式がある。
ちょっと複雑なことを使用とするとき、両者の違いは重要だ。
違いは右辺に変数が含まれるときに生じる。
前者は右辺に含まれる変数も代入された変数が評価されるときに初めて評価される。
一方後者では、代入時に右辺値が確定される。
C言語でいえば、前者は引数のない関数の定義、あるいは参照変数に近く、後者は通常の手続きにおける代入に対応する。

さらにmakeの機能にinclude文がある。
include sub.mk
とすればsub.mkの中身を今読んでいるMakefileに追加したのち、コンパイルを行ってくれる。

もう一つ、makeには文字列操作に関して非常に強力な組み込みの関数がある。
今回使うのはword,words,wordlistの3つである。
これらはlistの管理を簡単にしてくれる関数である。
list = a b c d
$(word 2,$(list)) # b
$(words $(list)) # 4
$(wordlist 2,3,$(list)) # b c

wordは所定の位置の要素を抜きだし、wordsはlistの長さを返し、wordlistは部分listをつくる。



さて、本題のfor文に取り掛かろう。
種を先にあかしておくと、再帰的にsub.mkを読み込むのである。
幸いにもinclude文は自分自身を読み込むことを拒否しないので、自己再帰的にfor文を構成する。
次のMakefileを見て欲しい。
main.mk:
TARGET = test
LIST = a b c d
all : $(TARGET)
$(TARGET) : subd
touch $(TARGET)
include sub.mk

sub.mk:
VAR := $(word 1,$(LIST))
LIST := $(wordlist 2,$(words $(LIST)),$(LIST))
sub$(VAR):
touch $@
ifneq ($(VAR),) # VARが空でなければ真
include sub.mk
endif

依存関係を解決するだけの簡単なMakefileだが、
制御が自己再帰的になっているので読みにくいかもしれない。
ポイントはsub.mkの2行目のLISTを一つずらすところと、
最後のsub.mkからsub.mkをincludeするところである。
LISTの先頭の値をVARに受け取り、LISTは一つ前につめる。
この変数は次のincludeのときにも引き継がれるので、
LISTが空になるまでsubdの生成方法が検索され続ける。
これによりsubdが4回目のincludeの後に発見され、めでたくtestはコンパイルされるのであった。


。。。とまぁ、for文が出来上がったのだが。
なんに使おうかな?

これを調べている途中で、

LIST = a.c b.c c.c d.c
$(LIST) : %.c : %.o
icpc $< -o $@

のような条件付きルールを書く方法を知り、当初の目的が果たせたので、
このfor文は今回必要ないのであった。
2011/09/07 23:51 Programming TB(0) CM(0)
LuaTeXについて2(日本語の扱い)

前回は所々はしょりつつLuaTeXの特徴をあげてみたが、今回は使ってみる。

この記事を書いているArchLinux上のtexlive2011にはLuaTeX 0.70.1が含まれている。
本家のsvnのtagsには0.70.2があるが、とりあえずこれでいいだろう。


LuaTeXではunicodeが使えるので、日本語はデフォルトで通る。
\documentclass{article}
\usepackage{fontspec}
\setmainfont{IPAGothic}
\begin{document}
てすと Lua\TeX
\end{document}

これで通る。しかしながら、改行してくれない。
LuaTeXは欧文と和文を区別せず(これによりフォントの問題もある)、
両者で改行の方針が違うので結局和文ではうまく改行できないのである。
LuaTeXはこの辺をパッケージレベルで実装する方針らしく、
日本語用のパッケージをどこかで見つけてこないといけない。
とりあえず次の2つがある。
・luajalayout
En toi Pythmeni tes TeXnopoleos [電脳世界の奥底にて] によると、とりあえず使う分にはこれが一番完成度が高いとのこと。luajalayout パッケージ ―LuaLaTeX による日本語組版―にて入手可能。
・LuaTeX-ja
他にもLuaTeX-jaというプロジェクトが進行中らしい。
とりあえず使えるものが最近完成したらしい。今後はこっちに移行するようだ。


さらにLuaTeXではjsarticle等、pTeX用のdocumentclassはそのままでは使えない。
En toi Pythmeni tes TeXnopoleos [電脳世界の奥底にて] にはjsarticleからpTeX用の部分を抜き出したdocumentclassが用意されている。BXjscls パッケージにて入手できる。


これで晴れてLuaTeXで日本語の文章がかける、と思う。

>>3に続く(予定)。

参考にしたHP:
En toi Pythmeni tes TeXnopoleos [電脳世界の奥底にて]
LuaTeX-ja(仮称)プロジェクト wiki
2011/09/04 01:19 TeX TB(0) CM(0)
台風で外出できないため、気になっていたことを調べる。


LuaTeXについて(非常に基本的なこと)

以前どこかで、En toi Pythmeni tes TeXnopoleos [電脳世界の奥底にて] で公開されているプレゼンを見てから気になっていたLuaTeXについて調べる。

どうやら日頃何気なく使っているlatexだが、どうも海外では国内より進んでいるらしい。
latexはとりあえず動かせる程度の知識しかなかったので、せっかくなので調べてみる。


まずはいつも使っているplatexコマンドがなんなのか確認する。
Fedora14に入っているのはyumでいれたtexlive2007のpTeX+LaTeX2e、
自宅のArchLinuxではtexlive2011のe-pTeX+LaTeX2eとなっている。
分けて書いた通り、前者はTeXのエンジン、
つまり.texを解釈して.dviなり.pdfを生成するプログラム、
後者はその上で解釈されるマクロの集合を表す。

pTeXというのはオリジナルのTeXの16bitの拡張でこれがあって初めて日本語が扱える。
これはさらに縦組もできる。このp-はPublishingの意味らしい。
もともとエンコーディングとしてsjis,jis,eucが対応していたが、最近utf-8のコードも扱えるようになった。

e-pTeXは所謂e-TeX拡張をpTeXにマージしたもので、どうやらtexlive2011になって標準に取り込まれるようだ(HPによるとまだ未解決のバグが放置とのこと)。
e-TeX拡張は基本的な機能の拡張で、使えるレジスタやプリミティブが増えたり、右から左に書けるようになった。
これだけ聞いても特に面白くないが、最近はこの拡張を必須とするマクロが増えているらしい。

LaTeX2eはTeX上で動くマクロの集合であって、数式の機能などもこのLaTeX2eによるものである。
どうもLaTeX3が開発中らしい。普段使っている機能は基本的にLaTeX2eのものである。
尚、LaTeXの他にもConTeXtというマクロパッケージがあるそうだ。そのうち調べよう。

さて、今回の本題であるLuaTeXに入る前に海外で主流のpdfTeXについて。
pdfTeXはe-TeX拡張をとりこみ、さらに.texから.pdfに.dviを解さず変換することで、いくつか品質が向上している。
このpdfTeXの後継として開発されているのがLuaTeXである。
LuaTeXでは大幅な改良が見込まれる。
・unicodeのサポート
・MetaPost
・Lua interpreterの導入
・フォントに関して
これは面白そう!ということで、これについて調査する。
>>2以降に続く。

参考にしたHP:
アスキー日本語TeX(pTeX)
e-pTeX についての wiki
En toi Pythmeni tes TeXnopoleos [電脳世界の奥底にて]
2011/09/03 23:27 TeX TB(0) CM(0)
検索フォーム
ブロとも申請フォーム
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。