不可能のようです(was Re: pdfTeX は tpic \specials を扱えますか?)

名前: 森本
日時: 2002-09-01 23:08:52
IPアドレス: 63.51.88.*

>>10000 しばらく間が空いてしまいましたが,8/8にcontext.tar.gz を入手していろいろ 七転八倒しておりました。 現在のところ成功していません。 supp-tpi.tex は,tpic 命令をマクロで変換し MetaPost 経由で EPS 化して 取り込む構造になっているようですが,supp-pdf.tex とは比較にならないほど 依存関係が多く,generic には出来ていないようです。 私にはとても手に負えないので,とりあえず諦めようと思います。 (dvipdfm や GS を使えば良いことなので,無理して pdfTeX に手を出す 必要はない) ---------------------------- 以下は経過報告までです。 かなり体当たり的な試行なので,役立たずの長文,ご容赦ください。 普通の plain TeX で以下のようにして得られる結果を pdfTeX で得ることを 考えます。 ============================ \nopagenumbers \special{pn 50}% \special{pa 0 0}% \special{pa 1000 1000}% \special{fp}% \bye ============================ 何もしなければ Non-PDF special ignored! になります。 単に先頭に \input supp-tpi.tex を追加するだけでは Undefined control sequence となります。 supp-tpi.tex 自身が自動で読み込むもの以外に未解決の依存関係を たどった結果,次のようになりました。 一部,三つ巴の依存関係もあるようです。 ============================ \input syst-pln.tex \input syst-gen.tex \input syst-ext.tex \input supp-tpi.tex \unprotect\def\!!zeropoint{0pt}\protect \nopagenumbers \mimmickspecials \special{pn 50}% \special{pa 0 0}% \special{pa 1000 1000}% \special{fp}% \bye ============================ \mimmickspecials とすると \special が tpic エミュレーションルーチンに 切り替わり,\normalspecial で元に戻るそうです。(->supp-spe.tex) \def\!!zeropoint{0pt} の定義は mult-sys.tex にありますが, mult-sys.tex を \input するとまた依存関係が増えてしまうので,今回は コピー&ペーストしています。 \protect と \unprotect は \makeatletter と \makeatother のような意味で @, !, ? の \catcode を変更するものです。 supp-mis.tex 他いくつかのファイルで定義されています。 (LaTeX での定義と競合しないか少し心配です) しかし,この状態で実行すると,おかしなことになります。 以下はコンソールの表示です。 ============================ C:\_\pdftpic>pdftex pdftpic4 This is pdfTeX, Version 3.14159-1.10a-devel-x (Web2C 7.3.7) (./pdftpic4.tex{c:/tex/share/texmf/pdftex/base/pdftex.cfg} Babel <v3.7h> and hyphenation patterns for american, french, german, ngerman, n ohyphenation, loaded. (c:/tex/share/texmf/tex/context/base/syst-pln.tex Runaway definition? ->\ifx \next ! Forbidden control sequence found while scanning definition of \sett@b. <inserted text> } <to be read again> \+ l.518 {\ifx\next\+ % ? x No pages of output. Transcript written on pdftpic4.log. ============================ context.tex を読んでも依存関係が不明なので,とりあえず急場しのぎに syst-pln.tex の 533 行目 ============================ \let\+\tabalign % no outer here ============================ を 516 行目に移動してみると(この辺からして既に怪しい), 実行はできるようになります。 しかし,グルーピングの対応関係が取れないらしく,結果が何も得られません。 以下はログファイルの中身です。 ============================ This is pdfTeX, Version 3.14159-1.10a-devel-x (Web2C 7.3.7) (format=pdftex 2002.7.22) 12 AUG 2002 09:51 **pdftpic4 (./pdftpic4.tex{c:/tex/share/texmf/pdftex/base/pdftex.cfg} Babel <v3.7h> and hyphenation patterns for american, french, german, ngerman, n ohyphenation, loaded. (./syst-pln.tex \maxdimen=\dimen10 \hideskip=\skip10 \centering=\skip11 \p@=\dimen11 \z@=\dimen12 \z@skip=\skip12 \voidb@x=\box10 \interdisplaylinepenalty=\count23 \interfootnotelinepenalty=\count24 \bigskipamount=\skip13 \jot=\dimen13 \medskipamount=\skip14 \normalbaselineskip=\skip15 \normallineskip=\skip16 \normallineskiplimit=\dimen14 \smallskipamount=\skip17 \mscount=\count25 \tabs=\box11 \tabsyet=\box12 \tabsdone=\box13 ) (c:/tex/share/texmf/tex/context/base/syst-gen.tex \protectionlevel=\count26 \scratchcounter=\count27 \scratchdimen=\dimen15 \scratchskip=\skip18 \scratchmuskip=\muskip10 \scratchbox=\box14 \scratchtoks=\toks10 \!!counta=\count28 \!!countb=\count29 \!!countc=\count30 \!!countd=\count31 \!!counte=\count32 \!!countf=\count33 \!!widtha=\dimen16 \!!heighta=\dimen17 \!!deptha=\dimen18 \!!widthb=\dimen19 \!!heightb=\dimen20 \!!depthb=\dimen21 \!!widthc=\dimen22 \!!heightc=\dimen23 \!!depthc=\dimen24 \zerocount=\count34 \commalevel=\count35 \processlevel=\count36 \commalistcounter=\count37 \statuscounter=\count38 \emptytoks=\toks11 \hss \tenrm 1\hss loading : Context System Macros / General ) (c:/tex/share/texmf/tex/context/base/syst-ext.tex \hss \tenrm 1\hss loading : Context System Macro's / Extras \maximumsignal=\dimen25 \outerrecurse=\count39 \innerrecurse=\count40 \teverypar=\toks12 \everyline=\toks13 \teveryline=\toks14 \neverypar=\toks15 \tneverypar=\toks16 \BeforePar=\toks17 \AfterPar=\toks18 \@@scratchtoks=\toks19 \localhsize=\dimen26 \comparedresult=\count41 ) (c:/tex/share/texmf/tex/context/base/supp-tpi.tex (c:/tex/share/texmf/tex/context/base/supp-spe.tex \hss \tenrm 1\hss loading : Context Support Macros / Specials ) (c:/tex/share/texmf/tex/context/base/supp-mps.tex \hss \tenrm 1\hss loading : Context Support Macros / MetaPost Inclusion \nofMPgraphics=\count42 \currentMPgraphic=\count43 \MPinitializations=\toks20 \MPwrite=\write0 \everyMPTEXgraphic=\toks21 \everyMPgraphic=\toks22 \MPgraphicbox=\box15 \maxnofMPgraphics=\count44 \minnofMPgraphics=\count45 \MPtoks=\toks23 \MPbox=\box16 ) (c:/tex/share/texmf/tex/context/base/supp-eps.tex \hss \tenrm 1\hss loading : Context Support Macros / EPS \extraEPSpreambleresets=\toks24 \extraEPSpreambleparsers=\toks25 ) \hss \tenrm 1\hss loading : Context Support Macros / TPIC Conversion \TPICcounter=\count46 ) \@MPG@@MPG@mpgraph=\write1 \openout1 = `mpgraph.mp'. ) (\end occurred inside a group at level 2) No pages of output. ============================ このとき,mpgraph.mp という中間ファイルが生成されてはいますが, 以下のように,尻切れです。 ============================ % collected graphics of job "pdftpic4" mpgraph:=1; ;; let mprunend = end ; beginfig(1); input mp-tool.mp; pair p[]; pickup pencircle scaled 3.61328pt; p[1]:=(0.0pt,0.0pt); p[2]:=(72.26563pt,72.26563pt); draw for i:=1 upto 2-1: p[i]--endfor p[2] ; ============================ どうやら,\stopTPICspecials (->supp-tpi.tex line.128) がうまく動いていない 模様です。 生成された mpgraph.mp に以下の3行 ============================ currentpicture:=currentpicture reflectedabout ((0,0),(4095,0)); endfig; end. ============================ を補って mpost にかけてみたところ,図形は出来ていました。 supp-tpi.tex を調べてみると,一連の tpic \special の終了を 「グループの終了」で検出してフラッシュする構造になっているようです。 (supp-tpi.tex の95行目付近にそれらしい説明があります) 試しに \bye の前に \egroup を一つ入れても効果なし,二つ入れると エラー(! Too many }'s.)となります。 また,supp-tpi.tex の記述に従って \hbox{\special{pn 1}.....} と してみても失敗します。 どうやらこの「グループの終了」は,単なる \egroup などではなく, ConTeXt パッケージのどこかにあるもののようで,すなわち supp-tpi.tex は plain TeX でも LaTeX でもなく ConTeXt の中でしか動かないように なっているようです。 また,前記の改変を施した syst-pln.tex を用いて以下の3行から なるファイル ============================ \input syst-pln.tex a \bye ============================ を通そうとすると,このようにおかしな (dead cycles) 結果になります。 以下はコンソールの表示です。 (途中の ? は ENTER キーで逃げています。) ============================ C:\_\pdftpic>pdftex pdftpic5 This is pdfTeX, Version 3.14159-1.10a-devel-x (Web2C 7.3.7) (./pdftpic5.tex{c:/tex/share/texmf/pdftex/base/pdftex.cfg} Babel <v3.7h> and hyphenation patterns for american, french, german, ngerman, n ohyphenation, loaded. (./syst-pln.tex) ! Output loop---25 consecutive dead cycles. <to be read again> \end l.3 \bye ? [1{c:/tex/share/texmf/pdftex/base/pdftex.map}] )<c:/tex/share/texmf/fonts/type1 /bluesky/cmr10.pfb> Output written on pdftpic5.pdf (1 page, 3685 bytes). Transcript written on pdftpic5.log. ============================ \input syst-pln.tex を外すと,当たり前ですが普通のTeX,pdfTeXとも 正常に処理できます。 対処法がわからず,ここで挫折してしまいました。 以上から,現状では tpic を含む plain TeX や LaTeX 文書を pdfTeX で処理する ことはかなり困難のようです。当然,>>7134 にもあるように eepic パッケージなどとの併用も無理です。

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます)