Skip to content

Instantly share code, notes, and snippets.

@t-nissie
Last active March 24, 2016 07:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save t-nissie/85005d87b3bfe31e50a7 to your computer and use it in GitHub Desktop.
Save t-nissie/85005d87b3bfe31e50a7 to your computer and use it in GitHub Desktop.
dvipdfmxでGNUPLOTで作ったEPS画像を挿入するとずれる話

dvipdfmxでgnuplotで作ったEPS画像を挿入するとずれる話

dvipdfmxを正しく使ってもgnuplotで作ったEPS画像を挿入するとずれるようです。 tgifなどで作ったEPSは大丈夫。

http://d.hatena.ne.jp/zrbabbler/20140121/1390313675 を参考にdvipdfmxは正しく使っているつもりです。

(いつもはpdflatexでPDFの図を挿入した英語のLaTeX文章をそのままPDFに変換しているので気がつきませんでした。 古い日本語のLaTeX文章をコンパイルしないといけない…)

**「uplatexを使った回避策」**を一番最後に書きました。EPSで図を挿入する時代はとっくに終わっていたみたいです。

根本的な解決方法をコメントでいただきました。ありがとうございます!

バージョンなど

Ubuntu 14.04.4 LTSのLaTeX環境と Mac OS XにMacPortsでインストールしたLaTeX環境と で確認しました。

Ubuntu 14.04.4 LTSのgnuplotは4.6.4。

下記はMac OS XにMacPortsでインストールしたLaTeXの様子。gnuplotは4.6.7。

$ latex --version
pdfTeX 3.14159265-2.6-1.40.16 (TeX Live 2015/MacPorts 2015_8)
kpathsea version 6.2.1
Copyright 2015 Peter Breitenlohner (eTeX)/Han The Thanh (pdfTeX).
There is NO warranty.  Redistribution of this software is
covered by the terms of both the pdfTeX copyright and
the Lesser GNU General Public License.
For more information about these matters, see the file
named COPYING and the pdfTeX source.
Primary author of pdfTeX: Peter Breitenlohner (eTeX)/Han The Thanh (pdfTeX).
Compiled with libpng 1.6.20; using libpng 1.6.20
Compiled with zlib 1.2.8; using zlib 1.2.8
Compiled with poppler version 0.39.0
$ dvipdfmx --version
This is dvipdfmx Version 20150315 by the DVIPDFMx project team,
modified for TeX Live,
an extended version of dvipdfm-0.13.2c developed by Mark A. Wicks.

Copyright (C) 2002-2015 the DVIPDFMx project team
Copyright (C) 2006 SIL International.

This is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
$ gnuplot --version
gnuplot 4.6 patchlevel 7

再現

下に置いたファイルで再現できます。

$ git clone https://gist.github.com/t-nissie/85005d87b3bfe31e50a7 dvipdfmx-gist
$ cd dvipdfmx-gist
$ gv sin.eps      # No problem.
$ rm -f sin.eps   # optional
$ make clean
$ make
gnuplot sin.gp
latex test.tex
This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015/MacPorts 2015_8) (preloaded format=latex)
 restricted \write18 enabled.
entering extended mode
(./test.tex
LaTeX2e <2015/01/01>
Babel <3.9l> and hyphenation patterns for 79 languages loaded.
(/opt/local/share/texmf-texlive/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/opt/local/share/texmf-texlive/tex/latex/base/size10.clo))
(/opt/local/share/texmf-texlive/tex/latex/graphics/graphicx.sty
(/opt/local/share/texmf-texlive/tex/latex/graphics/keyval.sty)
(/opt/local/share/texmf-texlive/tex/latex/graphics/graphics.sty
(/opt/local/share/texmf-texlive/tex/latex/graphics/trig.sty)
(/opt/local/share/texmf-texlive/tex/latex/latexconfig/graphics.cfg)
(/opt/local/share/texmf-texlive/tex/latex/dvipdfmx-def/dvipdfmx.def)))
No file test.aux.
<sin.eps> <img-zero.eps> <img-posi.eps> <img-nega.eps> [1] (./test.aux) )
Output written on test.dvi (1 page, 528 bytes).
Transcript written on test.log.
dvipdfmx test.dvi > test.pdf
test.dvi -> test.pdf
[1]
4759 bytes written
rm test.dvi
$ open test.pdf

result

結果: sin(x)の図が右上にずれてしまっている。 どうやらsin.eps内の50 50 translateがよくないみたい。

uplatexを使った回避策

図をepstopdfで全部PDFに変換して、uplatexを使う。

参考1: https://twitter.com/h_okumura/status/693220525833728000

参考2: http://qiita.com/zr_tex8r/items/5413a29d5276acac3771

sed 's/\.eps//' test.tex > uptest.tex
for e in *eps; do epstopdf $e; done
uplatex --shell-escape uptest.tex
make uptest.pdf
open uptest.pdf

EPSで図を挿入する時代はもう既に終わっていたみたい。

注意:uplatexは\includegraphics{foo.bar}とPDFファイル名の本体にピリオドを含めることができない。 foo.bar.pdfではなく foo-bar.pdffoo_bar.pdfかを用意すること。

問題1:uplatexでゴシックをより太くする方法を見つけなくてはいけない

問題2:古い日本語LaTeXファイルを書き直さないといけない

%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: -50 -50 50 50
newpath -50 -50 moveto 50 -50 lineto 50 50 lineto
-50 -50 lineto closepath stroke
%%EOF
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 50 50 150 150
newpath 50 50 moveto 150 50 lineto 150 150 lineto
50 50 lineto closepath stroke
%%EOF
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 100 100
newpath 0 0 moveto 100 0 lineto 100 100 lineto
0 0 lineto closepath stroke
%%EOF
# -*-Makefile-*-
##
all: test.pdf
%.pdf: %.dvi
dvipdfmx $< > $@
%.dvi: %.tex sin.eps
latex $<
sin.eps: sin.gp
gnuplot sin.gp
clean:
rm -rf *.aux *.bbl *.blg *.dvi *.log *.pdf
%!PS-Adobe-2.0
%%Title: sin.eps
%%Creator: gnuplot 4.6 patchlevel 7
%%CreationDate: Fri Feb 19 16:04:16 2016
%%DocumentFonts: (atend)
%%BoundingBox: 50 50 554 410
%%Orientation: Portrait
%%Pages: (atend)
%%EndComments
%%BeginProlog
/gnudict 256 dict def
gnudict begin
%
% The following true/false flags may be edited by hand if desired.
% The unit line width and grayscale image gamma correction may also be changed.
%
/Color true def
/Blacktext false def
/Solid false def
/Dashlength 1 def
/Landscape false def
/Level1 false def
/Rounded false def
/ClipToBoundingBox false def
/SuppressPDFMark false def
/TransparentPatterns false def
/gnulinewidth 5.000 def
/userlinewidth gnulinewidth def
/Gamma 1.0 def
/BackgroundColor {-1.000 -1.000 -1.000} def
%
/vshift -66 def
/dl1 {
10.0 Dashlength mul mul
Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if
} def
/dl2 {
10.0 Dashlength mul mul
Rounded { currentlinewidth 0.75 mul add } if
} def
/hpt_ 31.5 def
/vpt_ 31.5 def
/hpt hpt_ def
/vpt vpt_ def
/doclip {
ClipToBoundingBox {
newpath 50 50 moveto 554 50 lineto 554 410 lineto 50 410 lineto closepath
clip
} if
} def
%
% Gnuplot Prolog Version 4.6 (September 2012)
%
%/SuppressPDFMark true def
%
/M {moveto} bind def
/L {lineto} bind def
/R {rmoveto} bind def
/V {rlineto} bind def
/N {newpath moveto} bind def
/Z {closepath} bind def
/C {setrgbcolor} bind def
/f {rlineto fill} bind def
/g {setgray} bind def
/Gshow {show} def % May be redefined later in the file to support UTF-8
/vpt2 vpt 2 mul def
/hpt2 hpt 2 mul def
/Lshow {currentpoint stroke M 0 vshift R
Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R
Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R
Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
/hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def
/DL {Color {setrgbcolor Solid {pop []} if 0 setdash}
{pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def
/BL {stroke userlinewidth 2 mul setlinewidth
Rounded {1 setlinejoin 1 setlinecap} if} def
/AL {stroke userlinewidth 2 div setlinewidth
Rounded {1 setlinejoin 1 setlinecap} if} def
/UL {dup gnulinewidth mul /userlinewidth exch def
dup 1 lt {pop 1} if 10 mul /udl exch def} def
/PL {stroke userlinewidth setlinewidth
Rounded {1 setlinejoin 1 setlinecap} if} def
3.8 setmiterlimit
% Default Line colors
/LCw {1 1 1} def
/LCb {0 0 0} def
/LCa {0 0 0} def
/LC0 {1 0 0} def
/LC1 {0 1 0} def
/LC2 {0 0 1} def
/LC3 {1 0 1} def
/LC4 {0 1 1} def
/LC5 {1 1 0} def
/LC6 {0 0 0} def
/LC7 {1 0.3 0} def
/LC8 {0.5 0.5 0.5} def
% Default Line Types
/LTw {PL [] 1 setgray} def
/LTb {BL [] LCb DL} def
/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def
/LT0 {PL [] LC0 DL} def
/LT1 {PL [4 dl1 2 dl2] LC1 DL} def
/LT2 {PL [2 dl1 3 dl2] LC2 DL} def
/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def
/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def
/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def
/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def
/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def
/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def
/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def
/Dia {stroke [] 0 setdash 2 copy vpt add M
hpt neg vpt neg V hpt vpt neg V
hpt vpt V hpt neg vpt V closepath stroke
Pnt} def
/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V
currentpoint stroke M
hpt neg vpt neg R hpt2 0 V stroke
} def
/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
0 vpt2 neg V hpt2 0 V 0 vpt2 V
hpt2 neg 0 V closepath stroke
Pnt} def
/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M
hpt2 vpt2 neg V currentpoint stroke M
hpt2 neg 0 R hpt2 vpt2 V stroke} def
/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M
hpt neg vpt -1.62 mul V
hpt 2 mul 0 V
hpt neg vpt 1.62 mul V closepath stroke
Pnt} def
/Star {2 copy Pls Crs} def
/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M
0 vpt2 neg V hpt2 0 V 0 vpt2 V
hpt2 neg 0 V closepath fill} def
/TriUF {stroke [] 0 setdash vpt 1.12 mul add M
hpt neg vpt -1.62 mul V
hpt 2 mul 0 V
hpt neg vpt 1.62 mul V closepath fill} def
/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
hpt neg vpt 1.62 mul V
hpt 2 mul 0 V
hpt neg vpt -1.62 mul V closepath stroke
Pnt} def
/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M
hpt neg vpt 1.62 mul V
hpt 2 mul 0 V
hpt neg vpt -1.62 mul V closepath fill} def
/DiaF {stroke [] 0 setdash vpt add M
hpt neg vpt neg V hpt vpt neg V
hpt vpt V hpt neg vpt V closepath fill} def
/Pent {stroke [] 0 setdash 2 copy gsave
translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
closepath stroke grestore Pnt} def
/PentF {stroke [] 0 setdash gsave
translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
closepath fill grestore} def
/Circle {stroke [] 0 setdash 2 copy
hpt 0 360 arc stroke Pnt} def
/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def
/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def
/C1 {BL [] 0 setdash 2 copy moveto
2 copy vpt 0 90 arc closepath fill
vpt 0 360 arc closepath} bind def
/C2 {BL [] 0 setdash 2 copy moveto
2 copy vpt 90 180 arc closepath fill
vpt 0 360 arc closepath} bind def
/C3 {BL [] 0 setdash 2 copy moveto
2 copy vpt 0 180 arc closepath fill
vpt 0 360 arc closepath} bind def
/C4 {BL [] 0 setdash 2 copy moveto
2 copy vpt 180 270 arc closepath fill
vpt 0 360 arc closepath} bind def
/C5 {BL [] 0 setdash 2 copy moveto
2 copy vpt 0 90 arc
2 copy moveto
2 copy vpt 180 270 arc closepath fill
vpt 0 360 arc} bind def
/C6 {BL [] 0 setdash 2 copy moveto
2 copy vpt 90 270 arc closepath fill
vpt 0 360 arc closepath} bind def
/C7 {BL [] 0 setdash 2 copy moveto
2 copy vpt 0 270 arc closepath fill
vpt 0 360 arc closepath} bind def
/C8 {BL [] 0 setdash 2 copy moveto
2 copy vpt 270 360 arc closepath fill
vpt 0 360 arc closepath} bind def
/C9 {BL [] 0 setdash 2 copy moveto
2 copy vpt 270 450 arc closepath fill
vpt 0 360 arc closepath} bind def
/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
2 copy moveto
2 copy vpt 90 180 arc closepath fill
vpt 0 360 arc closepath} bind def
/C11 {BL [] 0 setdash 2 copy moveto
2 copy vpt 0 180 arc closepath fill
2 copy moveto
2 copy vpt 270 360 arc closepath fill
vpt 0 360 arc closepath} bind def
/C12 {BL [] 0 setdash 2 copy moveto
2 copy vpt 180 360 arc closepath fill
vpt 0 360 arc closepath} bind def
/C13 {BL [] 0 setdash 2 copy moveto
2 copy vpt 0 90 arc closepath fill
2 copy moveto
2 copy vpt 180 360 arc closepath fill
vpt 0 360 arc closepath} bind def
/C14 {BL [] 0 setdash 2 copy moveto
2 copy vpt 90 360 arc closepath fill
vpt 0 360 arc} bind def
/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
vpt 0 360 arc closepath} bind def
/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
neg 0 rlineto closepath} bind def
/Square {dup Rec} bind def
/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def
/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def
/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def
/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def
/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill
exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def
/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
2 copy vpt Square fill Bsquare} bind def
/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def
/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def
/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
Bsquare} bind def
/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
Bsquare} bind def
/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def
/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
2 copy vpt Square fill Bsquare} bind def
/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def
/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def
/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def
/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def
/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def
/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def
/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def
/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def
/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def
/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def
/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def
/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def
/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def
/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def
/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def
/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def
/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def
/DiaE {stroke [] 0 setdash vpt add M
hpt neg vpt neg V hpt vpt neg V
hpt vpt V hpt neg vpt V closepath stroke} def
/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M
0 vpt2 neg V hpt2 0 V 0 vpt2 V
hpt2 neg 0 V closepath stroke} def
/TriUE {stroke [] 0 setdash vpt 1.12 mul add M
hpt neg vpt -1.62 mul V
hpt 2 mul 0 V
hpt neg vpt 1.62 mul V closepath stroke} def
/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M
hpt neg vpt 1.62 mul V
hpt 2 mul 0 V
hpt neg vpt -1.62 mul V closepath stroke} def
/PentE {stroke [] 0 setdash gsave
translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
closepath stroke grestore} def
/CircE {stroke [] 0 setdash
hpt 0 360 arc stroke} def
/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def
/DiaW {stroke [] 0 setdash vpt add M
hpt neg vpt neg V hpt vpt neg V
hpt vpt V hpt neg vpt V Opaque stroke} def
/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M
0 vpt2 neg V hpt2 0 V 0 vpt2 V
hpt2 neg 0 V Opaque stroke} def
/TriUW {stroke [] 0 setdash vpt 1.12 mul add M
hpt neg vpt -1.62 mul V
hpt 2 mul 0 V
hpt neg vpt 1.62 mul V Opaque stroke} def
/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M
hpt neg vpt 1.62 mul V
hpt 2 mul 0 V
hpt neg vpt -1.62 mul V Opaque stroke} def
/PentW {stroke [] 0 setdash gsave
translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
Opaque stroke grestore} def
/CircW {stroke [] 0 setdash
hpt 0 360 arc Opaque stroke} def
/BoxFill {gsave Rec 1 setgray fill grestore} def
/Density {
/Fillden exch def
currentrgbcolor
/ColB exch def /ColG exch def /ColR exch def
/ColR ColR Fillden mul Fillden sub 1 add def
/ColG ColG Fillden mul Fillden sub 1 add def
/ColB ColB Fillden mul Fillden sub 1 add def
ColR ColG ColB setrgbcolor} def
/BoxColFill {gsave Rec PolyFill} def
/PolyFill {gsave Density fill grestore grestore} def
/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def
%
% PostScript Level 1 Pattern Fill routine for rectangles
% Usage: x y w h s a XX PatternFill
% x,y = lower left corner of box to be filled
% w,h = width and height of box
% a = angle in degrees between lines and x-axis
% XX = 0/1 for no/yes cross-hatch
%
/PatternFill {gsave /PFa [ 9 2 roll ] def
PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
clip
currentlinewidth 0.5 mul setlinewidth
/PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
0 0 M PFa 5 get rotate PFs -2 div dup translate
0 1 PFs PFa 4 get div 1 add floor cvi
{PFa 4 get mul 0 M 0 PFs V} for
0 PFa 6 get ne {
0 1 PFs PFa 4 get div 1 add floor cvi
{PFa 4 get mul 0 2 1 roll M PFs 0 V} for
} if
stroke grestore} def
%
/languagelevel where
{pop languagelevel} {1} ifelse
2 lt
{/InterpretLevel1 true def}
{/InterpretLevel1 Level1 def}
ifelse
%
% PostScript level 2 pattern fill definitions
%
/Level2PatternFill {
/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8}
bind def
/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def
<< Tile8x8
/PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke}
>> matrix makepattern
/Pat1 exch def
<< Tile8x8
/PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke
0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke}
>> matrix makepattern
/Pat2 exch def
<< Tile8x8
/PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L
8 8 L 8 0 L 0 0 L fill}
>> matrix makepattern
/Pat3 exch def
<< Tile8x8
/PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L
0 12 M 12 0 L stroke}
>> matrix makepattern
/Pat4 exch def
<< Tile8x8
/PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L
0 -4 M 12 8 L stroke}
>> matrix makepattern
/Pat5 exch def
<< Tile8x8
/PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L
0 12 M 8 -4 L 4 12 M 10 0 L stroke}
>> matrix makepattern
/Pat6 exch def
<< Tile8x8
/PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L
0 -4 M 8 12 L 4 -4 M 10 8 L stroke}
>> matrix makepattern
/Pat7 exch def
<< Tile8x8
/PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L
12 0 M -4 8 L 12 4 M 0 10 L stroke}
>> matrix makepattern
/Pat8 exch def
<< Tile8x8
/PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L
-4 0 M 12 8 L -4 4 M 8 10 L stroke}
>> matrix makepattern
/Pat9 exch def
/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def
/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def
/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def
/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def
/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def
/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def
/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def
} def
%
%
%End of PostScript Level 2 code
%
/PatternBgnd {
TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
} def
%
% Substitute for Level 2 pattern fill codes with
% grayscale if Level 2 support is not selected.
%
/Level1PatternFill {
/Pattern1 {0.250 Density} bind def
/Pattern2 {0.500 Density} bind def
/Pattern3 {0.750 Density} bind def
/Pattern4 {0.125 Density} bind def
/Pattern5 {0.375 Density} bind def
/Pattern6 {0.625 Density} bind def
/Pattern7 {0.875 Density} bind def
} def
%
% Now test for support of Level 2 code
%
Level1 {Level1PatternFill} {Level2PatternFill} ifelse
%
/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
currentdict end definefont pop
/MFshow {
{ dup 5 get 3 ge
{ 5 get 3 eq {gsave} {grestore} ifelse }
{dup dup 0 get findfont exch 1 get scalefont setfont
[ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6
get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq
{dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5
get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div
dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get
show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop
pop aload pop M} ifelse }ifelse }ifelse }
ifelse }
forall} def
/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def
/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse }
{dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont
6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def
/MLshow { currentpoint stroke M
0 exch R
Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
/MRshow { currentpoint stroke M
exch dup MFwidth neg 3 -1 roll R
Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
/MCshow { currentpoint stroke M
exch dup MFwidth -2 div 3 -1 roll R
Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
/XYsave { [( ) 1 2 true false 3 ()] } bind def
/XYrestore { [( ) 1 2 true false 4 ()] } bind def
Level1 SuppressPDFMark or
{} {
/SDict 10 dict def
systemdict /pdfmark known not {
userdict /pdfmark systemdict /cleartomark get put
} if
SDict begin [
/Title (sin.eps)
/Subject (gnuplot plot)
/Creator (gnuplot 4.6 patchlevel 7)
/Author (takeshi)
% /Producer (gnuplot)
% /Keywords ()
/CreationDate (Fri Feb 19 16:04:16 2016)
/DOCINFO pdfmark
end
} ifelse
end
%%EndProlog
%%Page: 1 1
gnudict begin
gsave
doclip
50 50 translate
0.100 0.100 scale
0 setgray
newpath
(Times-Roman) findfont 200 scalefont setfont
BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if
/Times-Roman findfont 200 scalefont setfont
/vshift -66 def
1.000 UL
LTb
LCb setrgbcolor
780 400 M
63 0 V
3836 0 R
-63 0 V
stroke
660 400 M
[ [(Times-Roman) 200.0 0.0 true true 0 (-1)]
] -66.7 MRshow
1.000 UL
LTb
LCb setrgbcolor
780 696 M
63 0 V
3836 0 R
-63 0 V
stroke
660 696 M
[ [(Times-Roman) 200.0 0.0 true true 0 (-0.8)]
] -66.7 MRshow
1.000 UL
LTb
LCb setrgbcolor
780 992 M
63 0 V
3836 0 R
-63 0 V
stroke
660 992 M
[ [(Times-Roman) 200.0 0.0 true true 0 (-0.6)]
] -66.7 MRshow
1.000 UL
LTb
LCb setrgbcolor
780 1288 M
63 0 V
3836 0 R
-63 0 V
stroke
660 1288 M
[ [(Times-Roman) 200.0 0.0 true true 0 (-0.4)]
] -66.7 MRshow
1.000 UL
LTb
LCb setrgbcolor
780 1584 M
63 0 V
3836 0 R
-63 0 V
stroke
660 1584 M
[ [(Times-Roman) 200.0 0.0 true true 0 (-0.2)]
] -66.7 MRshow
1.000 UL
LTb
LCb setrgbcolor
780 1880 M
63 0 V
3836 0 R
-63 0 V
stroke
660 1880 M
[ [(Times-Roman) 200.0 0.0 true true 0 ( 0)]
] -66.7 MRshow
1.000 UL
LTb
LCb setrgbcolor
780 2176 M
63 0 V
3836 0 R
-63 0 V
stroke
660 2176 M
[ [(Times-Roman) 200.0 0.0 true true 0 ( 0.2)]
] -66.7 MRshow
1.000 UL
LTb
LCb setrgbcolor
780 2472 M
63 0 V
3836 0 R
-63 0 V
stroke
660 2472 M
[ [(Times-Roman) 200.0 0.0 true true 0 ( 0.4)]
] -66.7 MRshow
1.000 UL
LTb
LCb setrgbcolor
780 2768 M
63 0 V
3836 0 R
-63 0 V
stroke
660 2768 M
[ [(Times-Roman) 200.0 0.0 true true 0 ( 0.6)]
] -66.7 MRshow
1.000 UL
LTb
LCb setrgbcolor
780 3064 M
63 0 V
3836 0 R
-63 0 V
stroke
660 3064 M
[ [(Times-Roman) 200.0 0.0 true true 0 ( 0.8)]
] -66.7 MRshow
1.000 UL
LTb
LCb setrgbcolor
780 3360 M
63 0 V
3836 0 R
-63 0 V
stroke
660 3360 M
[ [(Times-Roman) 200.0 0.0 true true 0 ( 1)]
] -66.7 MRshow
1.000 UL
LTb
LCb setrgbcolor
780 400 M
0 63 V
0 2897 R
0 -63 V
stroke
780 200 M
[ [(Times-Roman) 200.0 0.0 true true 0 (-10)]
] -66.7 MCshow
1.000 UL
LTb
LCb setrgbcolor
1755 400 M
0 63 V
0 2897 R
0 -63 V
stroke
1755 200 M
[ [(Times-Roman) 200.0 0.0 true true 0 (-5)]
] -66.7 MCshow
1.000 UL
LTb
LCb setrgbcolor
2730 400 M
0 63 V
0 2897 R
0 -63 V
stroke
2730 200 M
[ [(Times-Roman) 200.0 0.0 true true 0 ( 0)]
] -66.7 MCshow
1.000 UL
LTb
LCb setrgbcolor
3704 400 M
0 63 V
0 2897 R
0 -63 V
stroke
3704 200 M
[ [(Times-Roman) 200.0 0.0 true true 0 ( 5)]
] -66.7 MCshow
1.000 UL
LTb
LCb setrgbcolor
4679 400 M
0 63 V
0 2897 R
0 -63 V
stroke
4679 200 M
[ [(Times-Roman) 200.0 0.0 true true 0 ( 10)]
] -66.7 MCshow
1.000 UL
LTb
LCb setrgbcolor
1.000 UL
LTb
LCb setrgbcolor
780 3360 N
780 400 L
3899 0 V
0 2960 V
-3899 0 V
Z stroke
1.000 UP
1.000 UL
LTb
LCb setrgbcolor
% Begin plot #1
1.000 UL
LT0
LC0 setrgbcolor
/Times-Roman findfont 200 scalefont setfont
LCb setrgbcolor
3776 3197 M
(sin\(x\)) Rshow
LT0
3896 3197 M
543 0 V
780 2685 M
39 -265 V
40 -288 V
39 -298 V
40 -296 V
39 -282 V
39 -256 V
40 -221 V
39 -176 V
39 -124 V
40 -67 V
39 -8 V
40 53 V
39 110 V
39 164 V
40 211 V
39 249 V
40 276 V
39 294 V
39 298 V
40 292 V
39 272 V
39 241 V
40 202 V
39 154 V
40 99 V
39 40 V
39 -20 V
40 -79 V
39 -135 V
40 -186 V
39 -228 V
39 -263 V
40 -286 V
39 -297 V
39 -297 V
40 -284 V
39 -260 V
40 -224 V
39 -181 V
39 -130 V
40 -73 V
39 -14 V
40 47 V
39 105 V
39 158 V
40 207 V
39 245 V
39 274 V
40 293 V
39 298 V
40 293 V
39 274 V
39 245 V
40 207 V
39 158 V
39 105 V
40 47 V
39 -14 V
40 -73 V
39 -130 V
39 -181 V
40 -224 V
39 -260 V
40 -284 V
39 -297 V
39 -297 V
40 -286 V
39 -263 V
39 -228 V
40 -186 V
39 -135 V
40 -79 V
39 -20 V
39 40 V
40 99 V
39 154 V
40 202 V
39 241 V
39 272 V
40 292 V
39 298 V
39 294 V
40 276 V
39 249 V
40 211 V
39 164 V
39 110 V
40 53 V
39 -8 V
40 -67 V
39 -124 V
39 -176 V
40 -221 V
39 -256 V
39 -282 V
40 -296 V
39 -298 V
40 -288 V
39 -265 V
% End plot #1
stroke
LTb
LCb setrgbcolor
780 3360 N
780 400 L
3899 0 V
0 2960 V
-3899 0 V
Z stroke
1.000 UP
1.000 UL
LTb
LCb setrgbcolor
stroke
grestore
end
showpage
%%Trailer
%%DocumentFonts: Times-Roman
%%Pages: 1
#!/usr/bin/env gnuplot
##
set terminal postscript portrait enhanced color dashed 'Times-Roman' 20
set size 1.0,0.5
set output 'sin.eps'
plot sin(x)
set output
\documentclass[a4paper]{article}
\usepackage[dvipdfmx]{graphicx}
\begin{document}
$\leftrightarrow$%
\includegraphics[width=4em,clip]{sin.eps}%
$\leftrightarrow$%
\includegraphics[width=4em,clip]{img-zero.eps}%
$\leftrightarrow$%
\includegraphics[width=4em,clip]{img-posi.eps}%
$\leftrightarrow$%
\includegraphics[width=4em,clip]{img-nega.eps}%
$\leftrightarrow$%
\end{document}
@zr-tex8r
Copy link

“割と新しい”dvipdfmxを使う場合、画像ファイルが「EPSのヘッダ」を持っていないと異常になるようです。
詳しく言うと、dvipdfmxが内部でEPS→PDFの変換を行う場合に %%BoundingBox の情報を読まないため、TeX側が把握しているバウンディングボックスの値とずれてしまうようです。

今回の件では、sin.epsのヘッダは
%!PS-Adobe-2.0 (PSのヘッダ)
となっていますが、
%!PS-Adobe-2.0 EPSF-1.0 (EPSのヘッダ)
に書き換えると正しい位置に出力されるようになりました。

恐らく、gnuplotの set terminal の引数を portrait から eps に変えるといいのでは。

set terminal postscript eps enhanced color dashed 'Times-Roman' 20

@t-nissie
Copy link
Author

コメントありがとうございます。
10年以上ずっとgnuplotで間違った使い方をしていたようで、
自分のプロジェクトに約90個のlandscapeとportraitとがありました。

$ pwd; find src doc parameters -name '*.gp' -exec egrep 'land|portrait' {} /dev/null \; | nl
/home/t-nissie/f/loto/feram/branches/z_star_r
     1  src/01example-BaTiO3-epit-hysteresis-loop/plot.gp:set terminal postscript landscape enhanced solid color 'Times-Roman' 16
     2  src/01example-BaTiO3-epit-hysteresis-loop/plot.gp:set terminal postscript landscape enhanced solid color 'Times-Roman' 16
     3  src/01example-BaTiO3-epit-hysteresis-loop/plot.gp:set terminal postscript landscape enhanced solid color 'Times-Roman' 16
                .
                .
    89  parameters/BaTiO3-WuCohenGGA/perovskite-B1112.gp:set terminal postscript portrait enhanced "Times-Roman" color 24

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment