Skip to content

Instantly share code, notes, and snippets.

@aminophen
Last active January 7, 2017 15:38
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 aminophen/7d51e2f9e58056ebc4b4 to your computer and use it in GitHub Desktop.
Save aminophen/7d51e2f9e58056ebc4b4 to your computer and use it in GitHub Desktop.
"dvips + gs" on Windows (inspired by "dvipdf" shell script in Ghostscript distribution)
@aminophen
Copy link
Author

Ghostscript には dvips + gs (pdfwrite) を実行して PDF 出力するシェルスクリプトが入っているが、Windows 版 Ghostscript(角藤版含む)にも同じシェルスクリプトしか入っておらず、tlgs (Win32) にはそもそも見当たらない。というわけで、シェルスクリプトから Windows ネイティブ環境で動くバッチファイルへ大雑把に翻訳してみた。GPL Ghostscript の同梱物であるシェルスクリプトを翻訳したものなので、このバッチファイルのライセンスは Ghostscript 本体と同じ AGPL である。

冒頭の DVIPS=GS_EXECUTABLE= は僕の環境に合わせたものになっているので、適宜変更のこと(例えば TeX Live なら gswin32c.exe の代わりに rungs.exe となり、64bit Ghostscript なら gswin64c.exe となる)。

@aminophen
Copy link
Author

オリジナルのスクリプトと意図的に違う挙動をさせている部分が、dvips と gs へのオプションである。オリジナルを完全に再現するには

%DVIPS% -q -Ppdf %DVIPSOPTIONS% -f "%infile%" | %GS_EXECUTABLE% %OPTIONS% -P- -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sstdout=%%stderr -sOutputFile="%outfile%" %OPTIONS% -c .setpdfwrite -

とすべきだが、ここでは

  • -q を付けるとログが出ないのでデバッグしづらくなる
  • -sstdout=%%stderr を付けると gs の標準出力が標準エラー出力にリダイレクトされるのだが、dvips のログはそもそも標準エラー出力に出るのでこれと混ざってしまって見づらい

という理由から、これらのオプションを除去して次のようにした。

%DVIPS% -Ppdf %DVIPSOPTIONS% -f "%infile%" | %GS_EXECUTABLE% %OPTIONS% -P- -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="%outfile%" %OPTIONS% -c .setpdfwrite -

ほかにも厳密にはいくつか異なる点があるが、出力にはまったく影響しない。

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