MePoTeXで図形を出力できません

MePoTeXで図形を出力できません

- イシハラ タロウ の投稿
返信数: 11
MacTeX 2016+TeXshop の環境下ですが、MePoTeXによる図形出力ができません。MePoTeXのバージョンは3.80です。PDF出力まで行くのですが、図形部分んが空の状態です。
OSは10.12.4です。

(ソース)
\documentclass[a4j]{jarticle}

%\usepackage[xdvi]{graphicx}
\usepackage[dvipdfmx]{graphicx}
\usepackage{MePoTeX380} %ファイル名をリネームしてます

\begin{document}

\[\int_0^\pi \sin x\,dx\]


\begin{MPpic}<1cm,1cm>(3.5,0)(0,3)


\mptPoint{z0}[\texttt{z0}][b]<0mm,1mm>{(3w,3h)}
\mptPoint{z.o}[O][tr]<-1mm,-1mm>{(0,0)}
\mptPoint{z.x}[\texttt{z.x}][tr]<0mm,-2mm>{(w,0)}
\mptPoint{z.y}[\texttt{z.y}][r]<-2mm,0mm>{(w,2h)}
\sendMP{z0x+z0y=z0; z0x=whatever*z.x; z0y=whatever*z.y;}
\mptLabel{z0x}[t]<0mm,-1mm>{\texttt{z0x}}
\mptLabel{z0y}[b]<0mm,1mm>{\texttt{z0y}}
\sendMP[1pt]{fill ya(z.o,z0,4pt); draw ya(z.o,z.x,4pt); draw ya(z.o,z.y,4pt);}
\mptDrawPath[arrowtype=<->,pensize=1pt]{z0x--z.o--z0y}
\mptDrawPath[linetype=dashed evenly]{z0x--z0--z0y}
\mptLabel{(w,-0.5h)}[t]{\texttt{z0=s*z.x+t*z.y}}
\mptZuLabel{(3w,0)}{等置1}
\end{MPpic}

\[\int_0^\pi \sin x\,dx\]

\end{document}

(コンソールメッセージ)
This is ptex2pdf[.lua] version 0.9.
Processing 名称未設定-1.tex
This is e-pTeX, Version 3.14159265-p3.7-160201-2.6 (utf8.euc) (TeX Live 2016) (preloaded format=platex)
restricted \write18 enabled.
entering extended mode
(./å^^90^^8dè±äº^^9c
イシハラ タロウ への返信

Re: MePoTeXで図形を出力できません

- Akira Kakuto の投稿
TeX Live 2016 以降の場合,配布されている dvipdfmx.def,
xetex.def を使うときは,MetaPost 出力の eps の拡張子が .mps
である場合にはデフォルトでうまく行きますが,それ以外の場合
には dvipdfmx コマンドのオプションに --mvorigin
を付けないと,図形は正しい位置に出力されません。
このオプションは,MetaPost 出力の eps だけに関係し,他には
無関係です。

説明:
dvipdfmx で通常の eps を扱うには,Ghostscript で -dEPSCrop
オプションによって,pdf を作成してこれを使っています。この
場合,BoundingBox の左下を常に (0, 0) にしないと,うまく行かない
ので,dvipdfmx.def, xetex.def で特殊な変換をしています。
さて,MetaPost 出力の eps は,Ghostscript を使わないので,
変な変換をしないでも OK なわけです。ところが拡張子が .mps で
ないとき,現在の dvipdfmx.def, xetex.def は通常の eps と見なして
しまうので,それを打ち消すために --mvorigin オプションに
よって必要な平行移動をするようになっています。

TeX Live 2015 では,--mvorigin オプションは無く,でデフォルト
だったのですが,実行ファイル dvipdfmx で変なことをしない方が
よいということになって,(--mvorigin オプションを付けないかぎり)
dvipdfmx 自身は普通に振る舞うようになっています。
Akira Kakuto への返信

Re: MePoTeXで図形を出力できません

- イシハラ タロウ の投稿
ご回答ありがとうございます。
どうも、plataxでのコンパイル時に不具合が起こっているようなのです。
というのも、ターミナルでの出力が以下のようになります。dviファイルは
出力されますが、ご指摘のようにオプションをつけて dvipdfmx を通しても
空っぽのpdfが出力されるだけなのです。
MePoTeX.styは読み込んでいるようですが、その他 metapostファイルを読み込んでないという可能性はないのでしょうか。調べ方がわかりません。

MacBook-Pro:test5 jupiter$ platex test5
This is e-pTeX, Version 3.14159265-p3.7-160201-2.6 (utf8.euc) (TeX Live 2016) (preloaded format=platex)
restricted \write18 enabled.
entering extended mode
(./test5.tex
pLaTeX2e <2016/11/29> (based on LaTeX2e <2017/01/01> patch level 3)
Babel <3.9r> and hyphenation patterns for 83 language(s) loaded.
(/usr/local/texlive/2016/texmf-dist/tex/platex/jsclasses/jsarticle.cls
Document Class: jsarticle 2017/03/05 okumura, texjporg
(/usr/local/texlive/2016/texmf-dist/tex/platex/jsclasses/jslogo.sty))
(/usr/local/texlive/2016/texmf-dist/tex/latex/graphics/graphicx.sty
(/usr/local/texlive/2016/texmf-dist/tex/latex/graphics/keyval.sty)
(/usr/local/texlive/2016/texmf-dist/tex/latex/graphics/graphics.sty
(/usr/local/texlive/2016/texmf-dist/tex/latex/graphics/trig.sty)
(/usr/local/texlive/2016/texmf-dist/tex/latex/graphics-cfg/graphics.cfg)
(/usr/local/texlive/2016/texmf-dist/tex/latex/graphics-def/dvips.def)))
(/usr/local/texlive/texmf-local/tex/latex/MePoTeX/MePoTeX380.sty)
No file test5.aux.
No file @test5.1.
No file @test5.sav.
[1] (./test5.aux) )
Output written on test5.dvi (1 page, 348 bytes).
Transcript written on test5.log.

(ソース)test5.tex
¥documentclass[a4paper]{jsarticle}

%¥usepackage[xdvi]{graphicx}
%¥usepackage[dvipdfmx]{graphicx}
¥usepackage{graphicx}
¥usepackage{MePoTeX380}
%===========================
¥begin{document}
¥raggedbottom
¥noindent
¥begin{center}¥gt
本日は晴天なり
¥end{center}
%
¥begin{MPpic}<50mm,15mm>(1.3,3)(-0.1,-1.5)
¥mptPath{ptha}{kansu( cosd 90t)(0,1,50)}%y=cos (x/2)
¥mptDrawPath[pensize=1pt]{ptha}
¥mptPath{pthb}{kansu( cosd (180t))(0,1,50)}%y=cos x
¥mptDrawPath[pensize=1pt]{pthb}
¥mptPath{pthl}{(1w,-1.2h)--(1w,1.2h)}
¥mptDrawPath[pensize=1pt]{pthl}
¥mptPath{pthA}{buildcycle(pthb,pthl,ptha)}
¥mptDrawPath[filltype=amikake,amidir=60,linetype=none]{pthA}
¥mptXaxis[l]<1mm,0mm>{$x$}% x軸
¥mptYaxis[b]<0mm,1mm>{$y$}% y軸
¥mptLabel{(0.5w,1h)}[l]<-1mm,0mm>{¥small $y=¥cos¥frac{x}{2}$}
¥mptLabel{(0.5w,0.5h)}[rt]<-8mm,-1mm>{¥small $y=¥cos x$}
¥mptLabel{(0,0)}[rt]<-1mm,-1mm>{¥small O}
¥mptLabel{(1w,0h)}[lt]<1mm,-1mm>{¥small$¥pi$}
¥mptLabel{(0.5w,0h)}[t]<-1.2mm,-1.2mm>{¥small$¥frac{¥pi}{2}$}
¥mptLabel{(0w,1h)}[r]<-1mm,0mm>{¥small 1}
¥mptDrawPath[pensize=0.4pt, linetype={dashed evenly}]{(0w,-1h)--(1w,-1h)}
¥mptLabel{(0w,-1h)}[r]<-1mm,0mm>{¥small $-1$}
¥mptLabel{(0.5w,-1.2h)}[t]{(図1)}
¥end{MPpic}

¥begin{center}¥gt
本日は晴天なり
¥end{center}

¥end{document}


イシハラ タロウ への返信

Re: MePoTeXで図形を出力できません

- aminophen の投稿
2016年11月30日に,外部コマンドとして mpost の実行が禁止されたからだと
思います。セキュリティ上の問題が心配ない場合は,
platex -shell-escape test5.tex
としてください。
詳細は TeX Wiki の「外部コマンドの実行」に → こちら
aminophen への返信

Re: MePoTeXで図形を出力できません

- イシハラ タロウ の投稿
ありがとうございました。解決いたしました。

イシハラ タロウ への返信

Re: MePoTeXで図形を出力できません

- みなも の投稿
出遅れました。

MePoTeX 作者の みなも です。

すでに アセト アミノフェン さんにご指摘いただいた通り,昨年 11 月 30 日に mpost の呼び出しが(デフォルトでは)禁止され,かわりに rmpost で呼び出すように変わったため,MePoTeX の方でも対応版を出しています。

現在の最新バージョンは 4.30 です。
うちのサイトからダウンロードできます。
ver3.80 から比べると,マニュアルの整備や新機能の追加もなされていますので,よろしければどうぞ。
みなも への返信

Re: MePoTeXで図形を出力できません

- aminophen の投稿
> 昨年 11 月 30 日に mpost の呼び出しが(デフォルトでは)禁止され,
> かわりに rmpost で呼び出すように変わったため,

これは W32TeX では正しいですが、TeX Live では正しくありません。

・2016/11/30 にセキュリティホールが発見されたため、
  TeX Live / W32TeX では「mpost」が texmf.cnf の「許可コマンド」から削除された。
・この時点では「mpost」バイナリ自体に restricted mode が存在すらしていなかった。
・2016/12/03 に W32TeX だけ「mpost」バイナリが更新された。
  ヘルプメッセージを見れば
  -restricted              be secure: disable tex, makempx and editor commands
  が増えているので判別がつく。
・上記と同時に、W32TeX では「rmpost」が追加された。
  これは「mpost を -restricted 付で起動する」のと等価。
  これを利用できるように、texmf.cnf に「rmpost」が追加された。
・TeX Live 2017 pretest で「mpost」バイナリが更新された。
  ヘルプメッセージを見れば
  -restricted              be secure: disable tex, makempx and editor commands
  が増えているので判別がつく。

ここまでが現在の状況です。したがって

・「rmpost」はまだ TeX Live には存在しません。
・「rmpost」は TeX Live ではまだ texmf.cnf の「許可コマンド」に入っていません。

イシハラタロウさんの環境は MacTeX-2016 なので、TeX Live 2016 ということで
MePoTeX 4.30 でも使いづらい状況なのは変わりないはずです。
(\mptMP{mpost} して -shell-escape するほかない)
aminophen への返信

Re: MePoTeXで図形を出力できません

- みなも の投稿

>・「rmpost」はまだ TeX Live には存在しません。
>・「rmpost」は TeX Live ではまだ texmf.cnf の「許可コマンド」に入っていません。

調査不足で大変失礼いたしました。


この場合,
mpost -restricted (パラメータ)
をバッチファイル化して rmpost という名前で保存して rmpost を texmf.cnf (texmf-local にリスト部分のコピーを作成)に追加する,っていう手は使えるんでしょうか。
(うちの環境(Windows7 + w32tex) ならこの手も使えることを確認した(もちろん初めから入っている rmpost では意味がないので別名で実験しました)のですが,Mac + TeXLiveだとどうなるんだろう。)

-shell-escape とあまりリスクは変わらない?

最近,バッチファイルが無条件でメール添付ファイルから削除されたりと,こっちはこっちで何か引っかかる気がしなくもないですが。
みなも への返信

Re: MePoTeXで図形を出力できません

- aminophen の投稿
TeX Live ML で問い合わせたところ
http://tug.org/pipermail/tex-live/2017-May/040171.html
とのことです。つまり,
**TeX Live 2017 以降のバイナリであれば**(または W32TeX 2016/12/03 以降ならば)
という条件付きですが

Windows なら mpost.exe を rmpost.exe という名前でコピー
Unix なら mpost の symlink を rmpost という名前で作成

とするだけで,mpost -restricted と等価になるとのことです。

# この仕組みは extractbb が dvipdfmx と同じバイナリの別名で,
# 呼出コマンド名によって異なる機能で働くのと同じですね。

もちろんバッチファイルを作るという手もアリですね。
**TeX Live 2017 以降のバイナリであれば**(または W32TeX 2016/12/03 以降ならば)
という条件付きです。
aminophen への返信

Re: MePoTeXで図形を出力できません

- みなも の投稿
> Windows なら mpost.exe を rmpost.exe という名前でコピー
> Unix なら mpost の symlink を rmpost という名前で作成

> とするだけで,mpost -restricted と等価になるとのことです。

なるほど。この仕様ならバッチファイルを作るより簡単ですね。

ちなみに,この話を聞いて気付いたんですが,
w32tex の rmpost.exe は,
バイナリエディタで比べてみると mpost.exe と完全に同じでしたね。

おそらく配付セットの時点で,上記の「コピー」を入れていただけているのでしょう。
みなも への返信

Re: MePoTeXで図形を出力できません

- aminophen の投稿
かなり前のトピックですが,TeX Live 2019 では ((u)p)mpost -restricted が
* 制限付 mpost →「r-mpost」(rmpost ではない)
* 制限付 pmpost →「r-pmpost」(rpmpost ではない)
* 制限付 upmpost →「r-upmpost」(rupmpost ではない)
という名前で収録される見込みとなりました。(r49614, r49616)

このうち「r-mpost」は texmf.cnf の shell_escape_commands にも追加される見込みです。(r49551)

名前が以前と変わったのは,rmpost や rpmpost という名前だと紛らわしいためです。
(rm post とか rpm post と区切ると,別の物に見えてしまうので。)
https://tug.org/pipermail/tex-live/2018-December/043022.html

なお,W32TeX には 2019/01/07 付で反映されたようです。
みなも への返信

Re: MePoTeXで図形を出力できません

- イシハラ タロウ の投稿
ご回答ありがとうございます。
マニュアルにちゃんと書いてありましたね。ご迷惑をかけて申し訳ありませんでした。現在はヴァージョン4.30を使わせて頂いております。