summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/pst-pdf/ps4pdf
blob: 33ae7428350bcefd5aa9cb97835fc207e300eda0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#!/bin/sh

# Copyright (C) 2004, Thomas Esser. Public domain.
# 2005-03-08: New option "--crop", Rolf Niepraschk. 
# dvips call only if the dvi file exist (RN). 
# 2005-06-27: ps2pdf call only if the ps file exist (RN). 
# 2006-04-05: "\RequirePackage{pst-pdf}" added to the (pdf)LaTeX calls 
#             as suggested by Niall Murphy.
# 2006-07-14: Better temp dir handling (suggested by Karl Berry) (RN).
# 2006-07-23: New option --Xps2pdf and code cleanup (thanks to Karl Berry) (RN).
# 2008-08-04: Remove the parameter "-Ppdf" from the dvips call (RN).
# 2016-07-02: New option "--xelatex",   (hv)
#                        "--lualatex" , (hv)
# 2016-07-11: Better tests if xelatex or lualatex (RN)

# First, work around bugs/limitations in some shells on some systems:
test -f /bin/sh5 && test -z "$RUNNING_SH5" \
  && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
  && { RUNNING_SH5=true; export RUNNING_SH5; exec /bin/sh5 $0 ${1+"$@"}; }
unset RUNNING_SH5

test -f /bin/bsh && test -z "$RUNNING_BSH" \
  && { UNAMES=`uname -s`; test "x$UNAMES" = xAIX; } 2>/dev/null \
  && { RUNNING_BSH=true; export RUNNING_BSH; exec /bin/bsh $0 ${1+"$@"}; }
unset RUNNING_BSH

# hack around a bug in zsh:
test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"'

###############################################################################
# cleanup()
#   clean up the temp area and exit with proper exit status
###############################################################################
cleanup()
{
  rc=$?
  $needsCleanup && test -n "$tmpdir" && test -d "$tmpdir" \
    && { rm -f "$tmpdir"/*; cd /; rmdir "$tmpdir"; }

  # set exit code in a portable way; see the autoconf manual for details:
  (exit $rc); exit $rc
}

###############################################################################
# setupTmpDir()
#   set up a temp directory and a trap to remove it
###############################################################################
setupTmpDir()
{
  $needsCleanup && return

  trap 'cleanup' 1 2 3 7 13 15
  needsCleanup=true
  (umask 077; mkdir "$tmpdir") \
    || abort "could not create directory \`$tmpdir'"
}
###############################################################################
# myexec(args)
#   execute the command given as "args"; abort on error; redirect messages to
#   log in "silent" mode; redirect stdin (</dev/null) in silent mode
###############################################################################
myexec()
{
  if $silent; then
    echo "$0: running $@"
    "$@" >$log 2>&1 </dev/null
    rc=$?
  else
    "$@"
    rc=$?
  fi
  if test $rc != 0; then
    echo "$0: command $@ returned with code $rc"
    cat <$log
    (exit $rc) # set return value
    cleanup
  fi
}

# some initializations
progname=pdflatexps
silent=true # default setting; change if you like
crop=false
needsCleanup=false
ps2pdf_opts="-dAutoRotatePages=/None"
tmpdir=${TMPDIR-${TEMP-${TMP-/tmp}}}/.$progname$$
log=$tmpdir/log
version="1.0"

## the defaults
ENGINE1=latex
OPTIONS=
ENGINE2=pdflatex
DVIPS=dvips
PS2PDF=ps2pdf
FILE=$1

# look for optional things first
while
  case $1 in
   --help|-h) echo "$0 [-v|-q|--crop|--version|--Xps2pdf OPT] FILE"
              echo "Process LaTeX document FILE using the pst-pdf package,"
              echo "including running latex, dvips, and ps2pdf as necessary."
              echo "--Xps2pdf OPT passes OPT to ps2pdf."
              echo " (-dAutoRotatePages=/None is always passed.)"
              echo "--crop runs pdfcrop on ps2pdf output."
              echo "--lualatex using the luatex engine for .dvi and .pdf" 
              echo "--xelatex using the xetex engine for .xdv and .pdf" 
              exit 0;;
   --version) echo "$progname version $version"; exit 0;;
   --lualatex) ENGINE1=lualatex; 
               OPTIONS="--output-format=dvi"; 
               ENGINE2=lualatex; FILE=$2;;
   --xelatex)  ENGINE1=xelatex;   
               OPTIONS="-no-pdf";              
               ENGINE2=xelatex;  
               DVIPS=xdvipdfmx; FILE=$2;;
   --crop|-c) crop=true;;
   --Xps2pdf|-Xps2pdf) shift; ps2pdf_opts="$ps2pdf_opts $1";;
   -q) silent=true;;
   -v) silent=false;;
    -*) echo "$progname: unknown option $1 ignored";;
    *) break;;
  esac
do
  shift
done

# remaining option: filename
if test -z "$FILE"; then
  echo "$0: no file to process, try --help for more information." >&2
  exit 1
fi

# jobname von TeX: Verzeichnisse entfernen, evtl. vorhandene Extension
# entfernen.
job=`echo "x$1" | sed 's@x@@; s@.*/@@; s@\.[^.]*$@@'`

setupTmpDir
myexec ${ENGINE1} ${OPTIONS} "\AtBeginDocument{\RequirePackage{pst-pdf}} \input{$FILE}"

if test "$ENGINE1" = "latex" || test "$ENGINE1" = "lualatex"; then 
  myexec ${DVIPS} -o "$job-pics.ps" "$job.dvi" 
else
  myexec ${DVIPS} -o "$job-pics.pdf" "$job.xdv"   
fi

test -f "$job-pics.ps" && myexec ${PS2PDF} "$ps2pdf_opts" "$job-pics.ps" "$job-pics.pdf"

if $crop; then
  myexec pdfcrop "$job-pics.pdf" "$job-pics-crop.pdf" 
  mv "$job-pics-crop.pdf" "$job-pics.pdf"
fi
myexec ${ENGINE2} "\AtBeginDocument{\RequirePackage{pst-pdf}} \input{$FILE}"
true
cleanup