summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/scripts/pst-pdf/ps4pdf
blob: 621d3b71ad82706a12bbf31ffd47824caf9e79e7 (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
#!/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).

# 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"

# 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."
  		                   exit 0;;
   --version) echo "$progname version $version"; exit 0;;
   --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
file=$1
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 latex \
    "\AtBeginDocument{\RequirePackage{pst-pdf}} \input{$file}"
test -f "$job.dvi" && myexec dvips -o "$job-pics.ps" "$job.dvi"
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 pdflatex \
    "\AtBeginDocument{\RequirePackage{pst-pdf}} \input{$file}"
true
cleanup