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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
|
--[[
Copyright 2020 ARATA Mizuki
This file is part of ClutTeX.
ClutTeX is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ClutTeX is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with ClutTeX. If not, see <http://www.gnu.org/licenses/>.
]]
local assert = assert
local ipairs = ipairs
local error = error
local string = string
local pathutil = require "texrunner.pathutil"
local message = require "texrunner.message"
local right_values = {
dvips = {
graphics = "dvips",
expl3 = "dvips",
hyperref = "dvips",
xypic = "dvips",
},
dvipdfmx = {
graphics = "dvipdfmx",
expl3 = "dvipdfmx",
hyperref = "dvipdfmx",
xypic = "pdf",
},
dvisvgm = {
graphics = "dvisvgm",
expl3 = "dvisvgm",
},
xetex = {
graphics = "xetex",
expl3 = "xdvipdfmx",
hyperref = "xetex",
xypic = "pdf",
},
pdftex = {
graphics = "pdftex",
expl3 = "pdfmode",
hyperref = "pdftex",
xypic = "pdf",
},
luatex = {
graphics = "luatex",
expl3 = "pdfmode",
hyperref = "luatex",
xypic = "pdf",
},
}
-- expected_driver: one of "dvips", "dvipdfmx", "dvisvgm", "pdftex", "xetex", "luatex"
local function checkdriver(expected_driver, filelist)
if CLUTTEX_VERBOSITY >= 1 then
message.info("checkdriver: expects ", expected_driver)
end
local loaded = {}
for i,t in ipairs(filelist) do
if t.kind == "input" then
local basename = pathutil.basename(t.path)
loaded[basename] = true
end
end
local graphics_driver = nil -- "dvipdfmx" | "dvips" | "dvisvgm" | "pdftex" | "luatex" | "xetex" | "unknown"
if loaded["graphics.sty"] or loaded["color.sty"] then
if loaded["dvipdfmx.def"] then
graphics_driver = "dvipdfmx"
elseif loaded["dvips.def"] then
graphics_driver = "dvips"
elseif loaded["dvisvgm.def"] then
graphics_driver = "dvisvgm"
elseif loaded["pdftex.def"] then
graphics_driver = "pdftex"
elseif loaded["luatex.def"] then
graphics_driver = "luatex"
elseif loaded["xetex.def"] then
graphics_driver = "xetex"
else
-- Not supported: dvipdf, dvipsone, emtex, textures, pctexps, pctexwin, pctexhp, pctex32, truetex, tcidvi, vtex
graphics_driver = "unknown"
end
end
local expl3_driver = nil -- "pdfmode" | "dvisvgm" | "xdvipdfmx" | "dvipdfmx" | "dvips" | "unknown"
if loaded["expl3-code.tex"] or loaded["expl3.sty"] or loaded["l3backend-dvips.def"] or loaded["l3backend-dvipdfmx.def"] or loaded["l3backend-xdvipdfmx.def"] or loaded["l3backend-pdfmode.def"] then
if loaded["l3backend-pdfmode.def"] then
expl3_driver = "pdfmode" -- pdftex, luatex
elseif loaded["l3backend-dvisvgm.def"] then
expl3_driver = "dvisvgm"
elseif loaded["l3backend-xdvipdfmx.def"] then
expl3_driver = "xdvipdfmx"
elseif loaded["l3backend-dvipdfmx.def"] then
expl3_driver = "dvipdfmx"
elseif loaded["l3backend-dvips.def"] then
expl3_driver = "dvips"
else
-- TODO: driver=latex2e?
expl3_driver = "unknown"
end
end
local hyperref_driver = nil -- "luatex" | "pdftex" | "xetex" | "dvipdfmx" | "dvips" | "unknown"
if loaded["hyperref.sty"] then
if loaded["hluatex.def"] then
hyperref_driver = "luatex"
elseif loaded["hpdftex.def"] then
hyperref_driver = "pdftex"
elseif loaded["hxetex.def"] then
hyperref_driver = "xetex"
elseif loaded["hdvipdfm.def"] then
hyperref_driver = "dvipdfmx"
elseif loaded["hdvips.def"] then
hyperref_driver = "dvips"
else
-- Not supported: dvipson, dviwind, tex4ht, texture, vtex, vtexhtm, xtexmrk, hypertex
hyperref_driver = "unknown"
end
-- TODO: dvisvgm?
end
local xypic_driver = nil -- "pdf" | "dvips" | "unknown"
if loaded["xy.tex"] then
if loaded["xypdf.tex"] then
xypic_driver = "pdf" -- pdftex, luatex, xetex, dvipdfmx
elseif loaded["xydvips.tex"] then
xypic_driver = "dvips"
else
-- Not supported: dvidrv, dvitops, oztex, 17oztex, textures, 16textures, xdvi
xypic_driver = "unknown"
end
-- TODO: dvisvgm?
end
if CLUTTEX_VERBOSITY >= 1 then
message.info("checkdriver: graphics=", tostring(graphics_driver))
message.info("checkdriver: expl3=", tostring(expl3_driver))
message.info("checkdriver: hyperref=", tostring(hyperref_driver))
message.info("checkdriver: xypic=", tostring(xypic_driver))
end
local expected = assert(right_values[expected_driver], "invalid value for expected_driver")
if graphics_driver ~= nil and expected.graphics ~= nil and graphics_driver ~= expected.graphics then
message.diag("The driver option for graphics(x)/color is missing or wrong.")
message.diag("Consider setting '", expected.graphics, "' option.")
end
if expl3_driver ~= nil and expected.expl3 ~= nil and expl3_driver ~= expected.expl3 then
message.diag("The driver option for expl3 is missing or wrong.")
message.diag("Consider setting 'driver=", expected.expl3, "' option when loading expl3.")
end
if hyperref_driver ~= nil and expected.hyperref ~= nil and hyperref_driver ~= expected.hyperref then
message.diag("The driver option for hyperref is missing or wrong.")
message.diag("Consider setting '", expected.hyperref, "' option.")
end
if xypic_driver ~= nil and expected.xypic ~= nil and xypic_driver ~= expected.xypic then
message.diag("The driver option for Xy-pic is missing or wrong.")
if expected_driver == "dvipdfmx" then
message.diag("Consider setting 'dvipdfmx' option or running \\xyoption{pdf}.")
elseif expected_driver == "pdftex" then
message.diag("Consider setting 'pdftex' option or running \\xyoption{pdf}.")
elseif expected.xypic == "pdf" then
message.diag("Consider setting 'pdf' package option or running \\xyoption{pdf}.")
elseif expected.xypic == "dvips" then
message.diag("Consider setting 'dvips' option.")
end
end
end
--[[
filelist[i] = {path = ""}
]]
return {
checkdriver = checkdriver,
}
|