XyMTeXで価標だけが描画されない。

XyMTeXで価標だけが描画されない。

- 椎名町 (@shiinatown) の投稿
返信数: 11
お世話になります。
Macを使用しています。

XyMTeXを使用して化学構造式を描画しようとすると、価標だけが描画されません。(下図の状態)

ターミナルからのコンパイル

サンプルソースとして後述のPDFから 3.3 節のコードを引用し、
xymtextest.tex というファイルを作成して、ターミナルからコンパイルしてみました。

%---(以下 xymtextest.tex の中身)---
\documentclass{jarticle}
\usepackage{xymtex}
\usepackage{xymtexps}
\usepackage{xymtexpdf}

\begin{document}
\decaheterov[d{a\fivefusev[%
{b\sixfusev[f]{2s==\fiveheterov[%
{b\sixfusev{1==\upnobond{N}{H}}%
{3B==CH$_{3}$}{e}}%
]{1==O;5s==\WedgeAsSubst(0,0)(5,-3){130};%
2s==\WedgeAsSubst(0,0)(-5,-3){120}%
}{5==(yl);2GA==H;4GA==CH$_{3}$;3FB==H}[ae]%
}{1==\lmoiety{H$_{3}$C}}{e}}]%
{}{5FA==H;4D==O;2GA==H}{e}}%
]{}{{10}B==\lmoiety{H$_{3}$C};2FB==H;%
6B==\lyl(3==O){0==\sixsugarh{6==O;%
1s==\WedgeAsSubst(0,0)(-3,-5){120};%
4s==\WedgeAsSubst(0,0)(3,-5){120};
3s==\psline[linewidth=30\unitlength,%
linestyle=solid,linecolor=black]%
(-17,0)(307,0)%
}{1==(yl);2Sa==OH;3Sb==OH;4Sa==HO;%
5Sb==CH$_{2}$OH}[abc]}}
\end{document}
%---(以上)---



出力結果は、うまくいけば『化学構造式をXyMTeXで描く』の 3.3 にあるような構造式が描けるはずなのですが(下図)、

サンプルにある出力

冒頭の図のように、ここから価標が落ちた状態のものしか描画できませんでした。



LaTeXiT を使って行っても、同じ結果になりました。

LaTeXiTからの出力。やはり価標が落ちる。



ちなみに、xymtex は、以下のディレクトリに置いてあります。
/usr/local/texlive/2015/texmf-dist/tex/latex/xymtex
試しに、/tex 内の同列にある /platex 内に置いても同じ結果になりました。

LaTeXのpicture環境との兼ね合いなどに原因があるのでしょうか?
椎名町 (@shiinatown) への返信

Re: XyMTeXで価標だけが描画されない。

- Akira Kakuto の投稿
\documentclass{jarticle}
\usepackage{graphicx}
\usepackage{xymtex}
\usepackage{xymtexps}
\begin{document}
... ...
\end{document}

(1) platex xymtextest
(2) dvips xymtextest
(3) ps2pdf xymtextest.ps

で xymtextest.pdf ができました。
(2) と (3) の過程をされたでしょうか?
Akira Kakuto への返信

Re: XyMTeXで価標だけが描画されない。

- 椎名町 (@shiinatown) の投稿
ありがとうございます、ターミナルから試してみました。
\documentclass{jarticle}
\usepackage{graphicx}
\usepackage{xymtex}
\usepackage{xymtexps}
\usepackage{xymtexpdf}
\begin{document}
... ...
\end{document}
xymtex* のパッケージを3つとも記述すると
(1) platex xymtextest
(2) dvips xymtextest
(3) ps2pdf xymtextest.ps
この過程を踏んでも少し化けました(下図)
xymtexpdf も併記すると化ける
そこで
%\usepackage{xymtexpdf}
を殺したうえで同じ手順を踏むと、正しく描画されました。
xymtex, xymtexps のみを使用し tex > dvi > ps > pdf とすると正しくレンダリングされた



直接 tex から dvipdf で pdf を生成しようとするとうまくいかない、ということなのでしょうか(必ず postscript を咬ませる必要がある?)

前回の質問でも LaTeXiT について触れましたが、同じ過程を LaTeXiT で手軽に行う環境を整備したいので、原因がどこにあるのかを探っている段階です…
椎名町 (@shiinatown) への返信

Re: XyMTeXで価標だけが描画されない。

- 椎名町 (@shiinatown) の投稿
補足ですが、価標が出力はされるものの、サンプルPDFにあるような状態には描けないです(紙面より手前にある価標は太い三角で描けるのに、紙面より奥に伸びる価標は三角形に描画されないなど)

LaTeXiT での描画をするときも、パッケージを xymtex だけ使用すると画質が粗いながらも価標は描画されました。

但し綺麗に描画するためにと xymtexps, xymtexpdf を併記するとうまく行かなくなるようで、原因がどこにあるのかがよく分からず質問させていただいております。
椎名町 (@shiinatown) への返信

Re: XyMTeXで価標だけが描画されない。

- aminophen の投稿
まず
「xymtex」「xymtexps」「xymtexpdf」の 3 つを併記する
という使いかたは間違っているというのが私の認識です。

私も以前使いかたを調べたことがあって、そのときのことは
http://acetaminophen.hatenablog.com/entry/2015/06/06/193411
にまとめています。

platex + dvips + ps2pdf なら
\documentclass{jarticle}
\usepackage{xymtexps}
とだけ書けば ok ですし
platex + dvipdfmx なら
\documentclass[dvipdfmx]{jarticle}
\usepackage{xymtexpdf}
と書けば ok です。

XyMTeX 公式サイトに置かれているマニュアルにも書いてあるとおり、3 種類の \usepackage は
「LaTeX 固有の機能だけを使った完全互換モード」(xymtex)
「綺麗な PostScript ファイル出力専用のモード」(xymtexps)
「綺麗な PDF ファイル出力専用のモード」(xymtexpdf)
それぞれ目的にあったときに読み込むべきものです。

マニュアルを書いた藤田氏自身は、主に xymtexps を使っていらっしゃると私は推定しています。
よって、椎名町さんのコード(=マニュアルからの引用)も xymtexps 用のコードになっているようです。
各モードはそれぞれ使えるコマンドが微妙に違っているので、出力ファイルに応じたコマンドを書く必要があります。
(もしくは、使いたいコマンドにあわせて出力ファイル、変換手順を変えるなど)
aminophen への返信

Re: XyMTeXで価標だけが描画されない。

- 椎名町 (@shiinatown) の投稿
お返事ありがとうございます。

単純なコードで試してみましたが、
少なくとも LaTeXiT 上からだと、

\usepackage{xymtex}

xymtex パッケージのみを使用するとうまくいくのですが、
xymtex の使用だと描画が出来る




xymtexpdf の使用ではうまく行きませんでした。
xymtexpdf だと価標がレンダリングされない

使用環境が platex > dvipdfmx なので、こちらでも通って良さそうなのになぜ
と考えています。(立体構造のない単純な構造式では xymtex のみの使用で事足りるので問題ないとも思えるのですが……)




ターミナルから platex > dvips > ps2pdf と手打ちすると立体構造をもつ構造式の描画にも成功するのですが、どうも「紙面奥にある置換基」の価標の描画は綺麗に行きません。(ただの太い破線になってしまい、三角形の形をした破線になってくれない。)
ps を咬ませてターミナルからコマンドを手打ちすると成功するが、画面奥への価標の描画がうまくいかない

藤田さんのサイトにある『化学構造式をXyMTeXで描く』のPDF内にある出力結果(下記画像)では、破線になっている価標も三角形をしているので、これが再現できないものか……というところも疑問です。

『化学構造式をXyMTeXで描く』の 3.3 にある出力画像


もう一度自分でもマニュアルなどを詳細に読んでみますが、
以上2点が疑問のままなので、ご経験があるかたがいらっしゃればと思い質問させていただいております。
椎名町 (@shiinatown) への返信

Re: XyMTeXで価標だけが描画されない。

- aminophen の投稿
> 使用環境が platex > dvipdfmx なので、こちらでも通って良さそうなのになぜ…

試してみると

\documentclass[dvipdfmx]{jarticle}
\usepackage{tikz}
\usepackage{xymtexpdf}
\begin{document}

\Ethyleneh{1==C;2==C}{1==H;2==H;3==H;4==H}

\end{document}

と書くと、platex + dvipdfmx でも通りますね。

> platex > dvips > ps2pdf と手打ちすると立体構造をもつ構造式の描画にも成功するのですが、
> どうも「紙面奥にある置換基」の価標の描画は綺麗に行きません。
これはマニュアルを見て調節してください。(「wedgehashedwedge」がキーワードですね)
aminophen への返信

Re: XyMTeXで価標だけが描画されない。

- aminophen の投稿
もう少し詳しく回答すると:

そもそもの問題の根源は
「xymtex 全体が古くて昔の dvipdfm しか知らない」
だと私は考えています。

xymtexpdf は(まだ pgf パッケージが読み込まれていない場合、)内部で pgf パッケージを呼び出します。このとき
\usepackage[dvips]{xymtexpdf}
なら「dvips 用の pgf コード」を呼び出し
\usepackage[dvipdfm]{xymtexpdf}
なら「dvipdfm 用(=dvipdfmx 用)の pgf コード」を呼び出します。しかし
\usepackage[dvipdfmx]{xymtexpdf}
という使いかたは想定されていません。そのため、pgf に間違って dvips 用のコードを呼ばせてしまいます。
だから、dvipdfmx が解釈できずに価標が欠落してしまうのですね。

xymtexpdf に任せずに先に(=この時点で pgf が読み込ませてしまう)
\usepackage{tikz}
としてしまえば通る、というのはこのためです。


…とここまで platex + dvipdfmx 用の回答をしておいてなんですが、冒頭の

\decaheterov[d{a\fivefusev[%
{b\sixfusev[f]{2s==\fiveheterov[%
{b\sixfusev{1==\upnobond{N}{H}}%
{3B==CH$_{3}$}{e}}%
]{1==O;5s==\WedgeAsSubst(0,0)(5,-3){130};%
2s==\WedgeAsSubst(0,0)(-5,-3){120}%
}{5==(yl);2GA==H;4GA==CH$_{3}$;3FB==H}[ae]%
}{1==\lmoiety{H$_{3}$C}}{e}}]%
{}{5FA==H;4D==O;2GA==H}{e}}%
]{}{{10}B==\lmoiety{H$_{3}$C};2FB==H;%
6B==\lyl(3==O){0==\sixsugarh{6==O;%
1s==\WedgeAsSubst(0,0)(-3,-5){120};%
4s==\WedgeAsSubst(0,0)(3,-5){120};
3s==\psline[linewidth=30\unitlength,%
linestyle=solid,linecolor=black]%
(-17,0)(307,0)%
}{1==(yl);2Sa==OH;3Sb==OH;4Sa==HO;%
5Sb==CH$_{2}$OH}[abc]}}

なるコードが通るのは platex + dvips + ps2pdf だけです。
なぜなら、この中に一度だけ登場する \psline という命令は(名前からわかるとおり)PS ファイル専用だから。
したがって、このコードを本当に使いたいなら

\documentclass{jarticle}
\usepackage{xymtexps}

と書いて platex + dvips + ps2pdf を実行すべきです。
aminophen への返信

Re: XyMTeXで価標だけが描画されない。

- 椎名町 (@shiinatown) の投稿
詳しい解説、ありがとうございます。
原因が分かってすっきりしました……

無事に描画することが出来ました。
xymtexpdf が使えると本当に綺麗に描けて感動です。

XyMTeXを用いたLaTeXiTでの化学構造式のレンダリング

ご指導本当にありがとうございました。
頑張って使いこなします。
椎名町 (@shiinatown) への返信

Re: XyMTeXで価標だけが描画されない。

- 藤田 の投稿
藤田@湘南情報数理化学研究所です

xymtexpdfパッケージは,オプションとしてdvipdfmxを指定
できません.もしもdvipdfmxをグローバルドライブオプション
として指定した場合は,xymtexpdfのオプションとして明示的
にdvipdfmを指定したらうまくゆくと思います.
(私の環境では,明示的に指定しなくともうまくゆきました.
ここは推測で書いています.どなたか確認をお願いします)

\documentclass[dvipdfmx]{jarticle}
\usepackage[dvipdfm]{xymtexpdf}
\begin{document}
....
\end{document}

\pslineはxymtexpsモードでしか使えませんが,どちらの
モードでも使用できる命令として,\PutBondLineが使えます.
たとえばxymtexpdfモードでは, 次のように入力すれば 同等の
出力がえられます.ついでに太破線(デフォルト)を楔形に変更
してあります.

%platex + dvipdfmx

\documentclass{jarticle}
\usepackage{xymtexpdf}
\wedgehashedwedge

\begin{document}
\begin{XyMcompd}(2800,1200)(-500,50){}{}
\decaheterov[d{a\fivefusev[%
{b\sixfusev[f]{2s==\fiveheterov[%
{b\sixfusev{1==\upnobond{N}{H}}%
{3B==CH$_{3}$}{e}}%
]{1==O;5s==\WedgeAsSubst(0,0)(5,-3){130};%
2s==\WedgeAsSubst(0,0)(-5,-3){120}%
}{5==(yl);2GA==H;4GA==CH$_{3}$;3FB==H}[ae]%
}{1==\lmoiety{H$_{3}$C}}{e}}]%
{}{5FA==H;4D==O;2GA==H}{e}}%
]{}{{10}B==\lmoiety{H$_{3}$C};2FB==H;%
6B==\lyl(3==O){0==\sixsugarh{6==O;%
1s==\WedgeAsSubst(0,0)(-3,-5){120};%
4s==\WedgeAsSubst(0,0)(3,-5){120};%
3s== \PutBondLine(-17,0)(307,0){30\unitlength}%
}{1==(yl);2Sa==OH;3Sb==OH;4Sa==HO;%
5Sb==CH$_{2}$OH}[abc]}}
\end{XyMcompd}
\end{document}

同じ入力コードでxymtexpsモードでも描画できます.このとき
は次のようにします.ここでは,さらに,結合を太くし,
フォントをサンセリフ体に変更しています.

%eplatex + dvips

\documentclass{jarticle}
\usepackage{xymtexps}
\wedgehashedwedge
\def\thinLineWidth{0.8pt}
\let\substfont=\sffamily

\begin{document}%同じコード
\begin{XyMcompd}(2800,1200)(-500,50){}{}
\decaheterov[d{a\fivefusev[%
{b\sixfusev[f]{2s==\fiveheterov[%
{b\sixfusev{1==\upnobond{N}{H}}%
{3B==CH$_{3}$}{e}}%
]{1==O;5s==\WedgeAsSubst(0,0)(5,-3){130};%
2s==\WedgeAsSubst(0,0)(-5,-3){120}%
}{5==(yl);2GA==H;4GA==CH$_{3}$;3FB==H}[ae]%
}{1==\lmoiety{H$_{3}$C}}{e}}]%
{}{5FA==H;4D==O;2GA==H}{e}}%
]{}{{10}B==\lmoiety{H$_{3}$C};2FB==H;%
6B==\lyl(3==O){0==\sixsugarh{6==O;%
1s==\WedgeAsSubst(0,0)(-3,-5){120};%
4s==\WedgeAsSubst(0,0)(3,-5){120};%
3s== \PutBondLine(-17,0)(307,0){30\unitlength}%
}{1==(yl);2Sa==OH;3Sb==OH;4Sa==HO;%
5Sb==CH$_{2}$OH}[abc]}}
\end{XyMcompd}
\end{document}

添付したのは,platex + dvipdfmxで処理した
xymtexpdfモードの出力です.


藤田 への返信

Re: XyMTeXで価標だけが描画されない。

- aminophen の投稿
藤田先生、お返事ありがとうございます。

> xymtexpdfパッケージは,オプションとしてdvipdfmxを指定
> できません.

了解しました。ぜひ、xymtexpdf パッケージで dvipdfmx オプションを
サポートしていただけると助かります。ドライバ指定はグローバルに
するのが一般論としていちばんトラブルが少ないと私は考えております。

> もしもdvipdfmxをグローバルドライブオプションとして
> 指定した場合は,xymtexpdfのオプションとして明示的
> にdvipdfmを指定したらうまくゆくと思います.

たしかにそのようです。(pgfsys-dvipdfm.def が使われる)
ただ、dvipdfmx なら pgfsys-dvipdfmx.def が使われるほうが嬉しいです。

> (私の環境では,明示的に指定しなくともうまくゆきました.
> ここは推測で書いています.どなたか確認をお願いします)

これは TeX Live / W32TeX ではうまくゆかないです。いずれも
graphics.cfg と color.cfg が、ともに dvips.def をデフォルトにして
いますので、明示的に指定しない場合は pgfsys-dvips.def が間違って
使われてしまいます。
(藤田先生のご回答に eplatex というプログラム名が登場している
ことから、若干古い 2011 年以前の別の distribution をお使いかと
推測します。)

> \pslineはxymtexpsモードでしか使えませんが,どちらの
> モードでも使用できる命令として,\PutBondLineが使えます.

勉強になりました。
aminophen への返信

Re: XyMTeXで価標だけが描画されない。

- 藤田 の投稿
藤田@湘南情報数理化学研究所です.

dvipdfm --> dvipdfmx変更は,xymtexpdfモードの
デフォルトオプションをdvipdfmからdvipdfmxに
変更すればよいのではないかとおもいます.ただ
このようにした場合は,どんな影響がでるか
調べなければならないので,しばらく時間が
かかります.

ここ数年は,有機立体化学に関する書籍
Shinsaku Fujita "Mathematical Stereochemistry",
De Gruyter (2015)
http://www.degruyter.com/view/product/431387
の執筆出版に専念していましたので,書籍出版に
実績のあるxymtexpsモード (PSTricks使用)
でdviを作成して,dvips/distillerでpdfに
変換する方法をもっぱらにしていました.

dvipdfmxについては,本田さんの書き込み
(Re: dvipdfmx は使ってはいけないのか?
2016年 06月 22日(水曜日) 20:52 - 本田 知亮 の投稿)
にも指摘されているように,PSTricksの資産があり,
印刷指向だと,どうしても,xymtexpsモードを
使うことになってしまいます.