Last active
December 25, 2015 20:01
-
-
Save aminophen/dd196d5cc17ebac6d75d to your computer and use it in GitHub Desktop.
LaTeX の graphics / color ドライバ指定を「初回指定のみ有効」にするハック
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff -urN orig/color.cfg new/color.cfg | |
--- orig/color.cfg Fri May 31 12:10:50 2013 | |
+++ new/color.cfg Sat Dec 26 04:52:04 2015 | |
@@ -1,6 +1,30 @@ | |
\ProvidesFile{color.cfg}% | |
[2007/01/18 v1.5 color configuration of teTeX/TeXLive] | |
+% Restore current definition of \Gin@driver (might be empty) | |
+\let\Gin@driver@prev\Gin@driver | |
+ | |
+% suppress loading more than one drivers | |
+\begingroup\expandafter\expandafter\expandafter\endgroup | |
+\expandafter\ifx\csname AtEndOfPackage\endcsname\relax | |
+\else | |
+ \AtEndOfPackage{% | |
+ \if!\Gin@driver@prev!{}\else{% | |
+ \ifx\Gin@driver@prev\Gin@driver{}\else{% | |
+ \@latex@error{% | |
+ More than one graphics drivers detected:\MessageBreak% | |
+ \space\space `\Gin@driver@prev' and `\Gin@driver'% | |
+ }{% | |
+ Be sure to give a proper driver option to `(x)color'\MessageBreak% | |
+ package in your LaTeX code.\MessageBreak% | |
+ If you type <return> now, I'll stick to the first driver `\Gin@driver@prev'.% | |
+ }% | |
+ }\fi | |
+ }\fi | |
+ \InputIfFileExists{drvlist.cfg}{}{} | |
+ }% | |
+\fi | |
+ | |
% Select an appropriate default driver | |
\begingroup | |
\chardef\x=0\relax | |
diff -urN orig/drvlist.cfg new/drvlist.cfg | |
--- orig/drvlist.cfg Thu Jan 01 09:00:00 1970 | |
+++ new/drvlist.cfg Sat Oct 31 05:05:22 2015 | |
@@ -0,0 +1,29 @@ | |
+% Public domain. | |
+% Written by Hironobu YAMASHITA based on graphics.sty and color.sty. | |
+\ProvidesFile{drvlist.cfg}% | |
+ [2015/10/26 v1.1 list of graphics and color driver files] | |
+\@ifundefined{ifGin@driver@listed}{% | |
+ \newif\ifGin@driver@listed | |
+}{% | |
+ \let\Gin@driver\Gin@driver@prev\relax | |
+} | |
+\@ifundefined{ver@dvips.def}{\@namedef{ver@dvips.def}{1999/01/01}}{} | |
+\@ifundefined{ver@dvipdf.def}{\@namedef{ver@dvipdf.def}{1999/01/01}}{} | |
+\@ifundefined{ver@dvipdfmx.def}{\@namedef{ver@dvipdfmx.def}{1999/01/01}}{} | |
+\@ifundefined{ver@xetex.def}{\@namedef{ver@xetex.def}{1999/01/01}}{} | |
+\@ifundefined{ver@pdftex.def}{\@namedef{ver@pdftex.def}{1999/01/01}}{} | |
+\@ifundefined{ver@dvipsone.def}{\@namedef{ver@dvipsone.def}{1999/01/01}}{} | |
+\@ifundefined{ver@emtex.def}{\@namedef{ver@emtex.def}{1999/01/01}}{} | |
+\@ifundefined{ver@dviwin.def}{\@namedef{ver@dviwin.def}{1999/01/01}}{} | |
+\@ifundefined{ver@textures.def}{\@namedef{ver@textures.def}{1999/01/01}}{} | |
+\@ifundefined{ver@pctexps.def}{\@namedef{ver@pctexps.def}{1999/01/01}}{} | |
+\@ifundefined{ver@pctexwin.def}{\@namedef{ver@pctexwin.def}{1999/01/01}}{} | |
+\@ifundefined{ver@pctexhp.def}{\@namedef{ver@pctexhp.def}{1999/01/01}}{} | |
+\@ifundefined{ver@pctex32.def}{\@namedef{ver@pctex32.def}{1999/01/01}}{} | |
+\@ifundefined{ver@truetex.def}{\@namedef{ver@truetex.def}{1999/01/01}}{} | |
+\@ifundefined{ver@tcidvi.def}{\@namedef{ver@tcidvi.def}{1999/01/01}}{} | |
+\@ifundefined{ver@vtex.def}{\@namedef{ver@vtex.def}{1999/01/01}}{} | |
+% for W32TeX | |
+\@ifundefined{ver@dvipdfm.def}{\@namedef{ver@dvipdfm.def}{1999/01/01}}{} | |
+\@ifundefined{ver@dviout.def}{\@namedef{ver@dviout.def}{1999/01/01}}{} | |
+\endinput | |
diff -urN orig/graphics.cfg new/graphics.cfg | |
--- orig/graphics.cfg Thu May 30 18:16:30 2013 | |
+++ new/graphics.cfg Sat Dec 26 04:52:01 2015 | |
@@ -3,6 +3,30 @@ | |
\ProvidesFile{graphics.cfg}% | |
[2010/04/23 v1.9 graphics configuration of TeX Live]% | |
+% Restore current definition of \Gin@driver (might be empty) | |
+\let\Gin@driver@prev\Gin@driver | |
+ | |
+% suppress loading more than one drivers | |
+\begingroup\expandafter\expandafter\expandafter\endgroup | |
+\expandafter\ifx\csname AtEndOfPackage\endcsname\relax | |
+\else | |
+ \AtEndOfPackage{% | |
+ \if!\Gin@driver@prev!{}\else{% | |
+ \ifx\Gin@driver@prev\Gin@driver{}\else{% | |
+ \@latex@error{% | |
+ More than one graphics drivers detected:\MessageBreak% | |
+ \space\space `\Gin@driver@prev' and `\Gin@driver'% | |
+ }{% | |
+ Be sure to give a proper driver option to `graphics(x)'\MessageBreak% | |
+ package in your LaTeX code.\MessageBreak% | |
+ If you type <return> now, I'll stick to the first driver `\Gin@driver@prev'.% | |
+ }% | |
+ }\fi | |
+ }\fi | |
+ \InputIfFileExists{drvlist.cfg}{}{} | |
+ }% | |
+\fi | |
+ | |
% Select an appropriate default driver | |
\begingroup | |
\chardef\x=0\relax |
このパッチの “筋が良いかどうか” などの論点:
警告ではなくエラーを返すべきではないか?→ 2015.12.26 変更により解消\@latex@warning@no@line
を\@latex@error
に変更すればよい。そのときはエラーメッセージをエラーらしく変更する(いま警告を採用しているのは、最初にこのパッチを公開したときの分岐がよくなかった名残にすぎない…)。- ただ、エラーにするとして
-interaction=nonstopmode
のときに複数のドライバファイル (.def) を読ませるべきか読ませないべきかは大事になる。仮に現状のマクロを取りこむと、必然的に2番目以降のドライバファイルは読みこむことができない状態になっているので、\Gin@driver
の定義を元に戻すべきだろう(どうせそうするならもはや警告でよいのではないかという気もする…)。
- 複数ドライバファイル (.def) を読み込み可能にしている原因は graphics.sty や (x)color.sty 本体なので、本体にパッチをあてるほうがよいのではないか?
- 本体は
\InputIfFileExists
で .cfg を読み込むので、ディストリビューションが .cfg を持たない状況ならそもそも「デフォルトが存在することに起因する意図しない複数のドライバファイル読み込み」は起きないはずである(複数読み込みは依然として可能なので「衝突するドライバオプションを明示的に指定した場合のドライバファイルの複数読み込み」はありえるが、それはユーザが悪い)。だから .cfg を用意したディストリビューションの側で、複数読み込みを起こさないように配慮することにも一理ある。
- 本体は
その他、ご意見をお寄せください。
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
まだこのパッチには問題点がある。ご利用は自己責任で。詳細はブログ記事参照。