diff options
Diffstat (limited to 'macros/latex/contrib/pst-pdf/ps4pdf')
-rwxr-xr-x | macros/latex/contrib/pst-pdf/ps4pdf | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/macros/latex/contrib/pst-pdf/ps4pdf b/macros/latex/contrib/pst-pdf/ps4pdf new file mode 100755 index 0000000000..33ae742835 --- /dev/null +++ b/macros/latex/contrib/pst-pdf/ps4pdf @@ -0,0 +1,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 + |