Show page source of FrontPage #103181

= e-pTeX についての wiki =

元々 ~~!http://www.ms.u-tokyo.ac.jp/~kitagawa/~~(リンク切れ) で公開していたものであるが,諸事情によってこの ~~sourceforge.jp~~ osdn.jp(サイト名称変更)内の wiki に一本化した.

== 概要 ==

現在の pTeX は,TeX の持っていたレジスタ 256 個という制限を未だに引きずっている.その一方,欧文の世界では,TeX Live ですでに e-TeX 機能が取り込まれた pdfTeX が標準となり,32768 個のレジスタを利用できるようになっている.

この状況を受け,僕は東京大学理学部数学科 3 年対象の授業「計算数学II」( http://ks.ms.u-tokyo.ac.jp/ ) 内の project として pTeX に e-TeX 機能を取り込むということを行った.skip レジスタを使用した 10 進 21 桁の浮動小数点演算も暇だったので新たに書き起こした('''注:浮動小数点演算の機能はしばらく前から取り外されています''').これが本プロジェクトの e-pTeX である.

なお,2007/12/30 に角藤さんから同様の peTeX が発表された([http://oku.edu.mie-u.ac.jp/%7Eokumura/texfaq/qa/50527.html qa:50527] 以降)が,本プログラムはそれとは独立に実装したものである(残念ながら peTeX は廃棄されたようである([http://oku.edu.mie-u.ac.jp/%7Eokumura/texfaq/qa/50551.html qa:50551])).

ライセンスについては,最初はあまり深く考えていなかったが,
[http://oku.edu.mie-u.ac.jp/%7Eokumura/texfaq/qa/50654.html qa:50654] を契機に定めることにした.
( pTeX や奥村さんの jsclasses が採用している)modified BSD を使うのが適当だと思ったので,そのようにした.

最近は,[http://sourceforge.jp/projects/luatex-ja/wiki/FrontPage LuaTeX-ja] プロジェクトの方を中心に取り組んでいます.

== TeX Live 2014 の情報 ==
[http://www.tug.org/texlive/ TeX Live 2011 以降]や,[http://w32tex.org/index-ja.html W32TeX] では,pTeX をインストールすると,e-pTeX も導入されるようになっています.
そのため,本ページでは,今後'''(1年に1回リリースされる)TeX Live に対する修正の情報を載せる'''という形になります.

TeX Live 2014 の e-pTeX で利用できる pdfTeX のプリミティブは以下のとおりです.
 * {{{\pdfstrcmp}}}: 文字列の比較.和文文字は UTF-8 バイト列に直して比較しています.
 * {{{\pdffilemoddate}}}, {{{\pdfcreationdate}}}, {{{\pdffilesize}}}: standalone パッケージを使う場合に必要. 
   TeX フォーラム中の [http://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=1024 pLaTeX と standalone パッケージ(TikZとTexLive2012使用時)] が発端.
 * {{{\pdfsavepos}}}, {{{\pdfpage{width,height} }}}, {{{\pdflast{x,y}pos}}}: 出力結果 (dvi) における絶対値の取得.
 * {{{\pdffiledump}}}: ファイルの中身を 16 進でダンプ.{{{bmpsize}}} パッケージ等で使われる.(角藤さん,実装ありがとうございます)

== TeX Live 2015 の情報 ==
TeX Live 2015 の e-pTeX では,上記に加えて以下の 2 プリミティブが使用可能です.
 * {{{\pdfshellescape}}}: pdfTeX の同名のプリミティブ.1: \write18 有効, 2: restricted \write18, 0: \write18 無効.
 * {{{\lastnodechar}}}: 直前のノードが文字(欧文のリガチャも含む)の場合,その文字コードを出力します.
   * [http://www.adventar.org/calendars/553 TeX & LaTeX Advent Calender 2014] 用に解説記事を本 Wiki 内の [lastnodechar]に書きました.(2014/12/15) 
上記 2 プリミティブについては TeX Live SVN !r35615, !r35619 としてコミットされました.角藤さん,ありがとうございます. 

また,2015/07/04 に,TeX Live SVN !r37756 として
 * {{{\pdfmdfivesum}}}: pdfTeX の同名のプリミティブ.{{{\pdfmdfivesum{...} }}} で引数の MD5 sum を,
   {{{\pdfmdfivesum file {<filename>} }}}でファイル {{{<filename>}}} の中身の MD5 sum を計算.
の実装が行われました.これは !XeTeX のメーリングリストの[http://tug.org/pipermail/xetex/2015-July/026044.html 投稿]以降の議論を元に,
角藤さんからリクエストのあったものです.e-pTeX の内部漢字コードで結果が変わるのは困るので,
内部漢字コードに関わらず,{{{\pdfmdfivesum{...} }}} の引数中の和文文字は,UTF-8 だとして MD5 sum を計算しています.

{{{ comment
以下は TL11 以降の情報
 * eplatex というコマンドはなくなり,platex というコマンドで e-pTeX が起動されるようになりました(参考:[http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/55944.html qa:55944]).
 * '''TeX Live 2011 の iso に収録されているバージョンにはバグが存在します.'''以下のどれかを用いて更新することをお勧めします.
   * [http://tutimura.ath.cx/ptexlive/?tlptexlive%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA tlptexlive リポジトリ] からアップデートする.
   * ↑の元になった [TeX_Live_2011] のページにある(やや古い)「追加の日本語関連パッチ」を使ってバイナリを作る.
   * TeX Live 2012(2012/7/8にリリースされました)では修正されています.
 * '''[http://sourceforge.jp/projects/eptex/wiki/FrontPage/attach/eptex-pdffilemoddate-130605.diff.xz eptex-pdffilemoddate-130605.diff.xz]''': pdfTeX で実装されている {{{\pdffilemoddate}}}, {{{\pdfcreationdate}}}, {{{\pdffilesize}}} を e-pTeX, e-upTeX に追加するパッチ.
   * TeX フォーラム中の [http://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=1024 pLaTeX と standalone パッケージ(TikZとTexLive2012使用時)] が気になったので作成.
   * TeX Live SVN !r30819 で作業しています.パッチ適用後は ./reautoconf が必要です.TeX Live 2013 には間に合いませんでしたが,
     TeX Live SVN !r30897 で取り込まれたので TeX Live 2014 には入るでしょう.
   * 早速角藤さんが !W32TeX のバイナリを更新してくださいました.
   * パッチを適用すると,サンプル modtest/test1.tex が作られます(これでしかテストしていません).
   * このパッチにより,e-pTeX のバージョンは '''130605''' となります.
}}}

== その他の情報 ==
 * 以前の版は,[旧版 旧版のページ]からたどれます.
 * 文書類:
   * [https://sourceforge.jp/projects/eptex/document/resume/ja/1/resume.pdf resume.pdf]:2008/1/31 までの「計算数学II」での作業記録であり,
     eptex-100131.tar.bz2 中にも入っている.内輪ネタも入っているが,その一方で,実装方法とかの若干詳しい情報も書いてある.
   * 以前のページに載せていた WEB のサンプルはこちら:[websample WEB のサンプル]
 
== コメント ==
長くなってきたので,2010/9/27 以前のコメントは[wiki:過去コメント 過去コメント]の前半部に移しました.

コメントは下のボックスに遠慮なくお書きください.
また,バグ報告・機能リクエストなどは[http://sourceforge.jp/projects/eptex/ticket/ こちら]へどうぞ(コメント欄だと管理しきれなくなる).

[[LineComment(direction=below, rows=3)]]
  * pTeX-ng のページを見ていたら,e-pTeX では {{{\fontcharwd}}} 等の日本語対応をサボっていたことに気づきました.近日中に直します.[[BR]]-- [id:h7k h7k] (2014-12-10 12:28:18 JST)
  * pTeXの\inhibitglueのバグを修正するパッチ([http://www.ms.u-tokyo.ac.jp/~kitagawa/ptex-3.1.11-inhibit_glue_flag-091107-1.patch ptex-3.1.11-inhibit_glue_flag-091107-1.patch])は,eptex-110315と両立可能でしょうか?[[BR]]-- 通りすがり (2011-03-16 09:58:50 JST)
    * 今から試しますが,あのパッチ自体がきちんとしたパッチではないです(そのためリンクも外していました).[[BR]]-- [id:h7k h7k] (2011-03-16 11:13 JST)
    * 次のようにすれば適用できるようです.\inhibitglue 問題は,もう一回きちんと考えないといけませんね. (2011-03-16 11:46 JST)
{{{
(in: /opt/home-supp/tl10)
$ scripts/unpack.sh -p -e -r ; scripts/build.sh -p -e -r
$ pushd /tmp/texlive-20100720-source/texk/web2c/ptexdir/
$ patch -p0 < /tmp/ptex-3.1.11-inhibit_glue_flag-0911107-1.patch 
$ cd ../eptexdir
$ rm ptex-base.ch
$ ln -s eptex-base.ch ptex-base.ch
$ patch -p0 < /tmp/ptex-3.1.11-inhibit_glue_flag-0991107-1.patch 
$ cd ../../../Work/texk/web2c/
$ make ptex eptex
$ cp ptex ../../../inst/bin/x86_64-unknown-linux-gnu 
$ cp eptex ../../../inst/bin/x86_64-unknown-linux-gnu
$ popd
(scripts/texmf.sh -p -e -r 以降を実行)
}}}
  * eptex-101231, scripts/unpack.sh l.6 の /tmpは,$TMPDIRの間違いです.[[BR]]-- [id:h7k h7k] (2011-01-02 15:34:54 JST)
  * eptex-101231 のインストールに用いる utfsrc.zip は,例えば ptexlive-20100711 に同梱されています.[[BR]]-- [id:h7k h7k] (2011-01-02 08:54:47 JST)
  * TeX Live 2010 への対応ですが,一応スクリプト類は作ってあります.しかし,upTeX 部分のパッチも勝手に再構成してしまったので,公開はまだまだ.[[BR]]-- [id:h7k h7k] (2010-09-28 13:09:55 JST)