Skip to content

Instantly share code, notes, and snippets.

@zr-tex8r
Created December 7, 2024 15:09
Show Gist options
  • Save zr-tex8r/651147b8d24957d0afa0ed8047c33663 to your computer and use it in GitHub Desktop.
Save zr-tex8r/651147b8d24957d0afa0ed8047c33663 to your computer and use it in GitHub Desktop.
TeX: LuaLaTeXを爆速にする設定ファイル(※ただし画期的)
-- This is file 'scspeddy.lua'.
local module_name = 'scspeedy'
local version = '2024-12-08'
-- the module
scspeedy = {}
----------------------------------------
-- logging
local function make_message(...)
return module_name..": "..table.concat({...}, ": ")
end
local function abort(...)
error(make_message(...))
end
local function info(...)
if scspeedy.debug then
texio.write_nl(make_message(...))
end
end
----------------------------------------
-- fake reader
local function make_reader(source)
return tostring(source):gmatch('[^\n]+')
end
----------------------------------------
local tex_source = [=[
\catcode`\@=11
% recover some primitives
\let\par\@@par
\begingroup
\catcode`_=11 \catcode`:=11
\long\def\do#1#2{%
\ifdefined#2 \global\let#1=#2\fi}
\do\primitive\tex_primitive:D
\do\shipout\tex_shipout:D
\do\output\tex_output:D
\do\par\tex_par:D
\endgroup
% purge all LaTeX things
\everypar{}
\everyeof{}
\everyhbox{}
\everyvbox{}
\output{\setbox0\box255 \deadcycles=0 }
% environment check
\def\scsp@error#1{%
\errhelp{The job quits right now.}%
\errmessage{scspeedy: #1}%
\batchmode \primitive\end}
\unless\ifprimitive\par
\scsp@error{cannot recover \string\par}
\fi
\unless\ifdefined\@@par
\scsp@error{not LaTeX}
\fi
\unless\ifprimitive\pdfextension
\scsp@error{too old LuaTeX}
\fi
% create page
\protected\def\scsp@color{\pdfextension colorstack 0 }
\protected\def\scsp@draw{\pdfextension literal page}
\font\scsp@font=cmr10 \scsp@font
\pagewidth=210mm \pageheight=297mm
\primitive\shipout\vbox{%
\scsp@color push{0 g 0 G}%
\scsp@draw{q}%
\scsp@draw{4.76 0 0 4.76 59.52 219.39 cm}%
\scsp@draw{1.39 w}%
\scsp@draw{1 j 1 J}%
\scsp@draw{50 72 m}%
\scsp@draw{64 72 76 65 76 55 c}%
\scsp@draw{76 51 72 47 67 44 c}%
\scsp@draw{79 41 84 32 84 25 c}%
\scsp@draw{84 13 75 8 68 8 c}%
\scsp@draw{32 8 l}%
\scsp@draw{25 8 16 13 16 25 c}%
\scsp@draw{16 32 21 41 33 44 c}%
\scsp@draw{28 47 24 51 24 55 c}%
\scsp@draw{24 65 36 72 50 72 c}%
\scsp@draw{s}%
\scsp@draw{42 56 m}%
\scsp@draw{42 57.66 41.1 59 40 59 c}%
\scsp@draw{38.89 59 38 57.66 38 56 c}%
\scsp@draw{38 54.34 38.89 53 40 53 c}%
\scsp@draw{41.1 53 42 54.34 42 56 c}%
\scsp@draw{f}%
\scsp@draw{62 56 m}%
\scsp@draw{62 57.66 61.11 59 60 59 c}%
\scsp@draw{58.9 59 58 57.66 58 56 c}%
\scsp@draw{58 54.34 58.9 53 60 53 c}%
\scsp@draw{61.11 53 62 54.34 62 56 c}%
\scsp@draw{f}%
\scsp@draw{40 48 m}%
\scsp@draw{45 45 55 45 60 48 c}%
\scsp@draw{S}%
\scsp@draw{58 90 m}%
\scsp@draw{77 81 l}%
\scsp@draw{74 61 l}%
\scsp@draw{66 60 50 66 46 72 c}%
\scsp@draw{58 90 l}%
\scsp@draw{b}%
\scsp@draw{20 31 m}%
\scsp@draw{19 33 14 41 13 42 c}%
\scsp@draw{12 43 10 43 7 44 c}%
\scsp@draw{4 46 6 46 8 46 c}%
\scsp@draw{9 46 11 44 12 44 c}%
\scsp@draw{14 46 14 47 15 49 c}%
\scsp@draw{16 51 16 49 16 48 c}%
\scsp@draw{16 46 14 44 15 43 c}%
\scsp@draw{16 42 21 35 22 33 c}%
\scsp@draw{23 31 21 30 20 31 c}%
\scsp@draw{b}%
\scsp@draw{80 31 m}%
\scsp@draw{81 33 86 41 87 42 c}%
\scsp@draw{88 43 90 43 93 44 c}%
\scsp@draw{96 46 94 46 92 46 c}%
\scsp@draw{91 46 89 44 88 44 c}%
\scsp@draw{86 46 86 47 85 49 c}%
\scsp@draw{84 51 84 49 84 48 c}%
\scsp@draw{84 46 86 44 85 43 c}%
\scsp@draw{84 42 79 35 78 33 c}%
\scsp@draw{77 31 79 30 80 31 c}%
\scsp@draw{b}%
\scsp@draw{q}%
\scsp@color set{1 0 0 RG 1 0 0 rg}%
\scsp@draw{27 48 m}%
\scsp@draw{42 38 58 38 73 48 c}%
\scsp@draw{75 46 76 44 77 41 c}%
\scsp@draw{77 39 75 37 73 36 c}%
\scsp@draw{74 33 74 31 76 26 c}%
\scsp@draw{75 25 72 24 66 23 c}%
\scsp@draw{66 27 65 30 63 34 c}%
\scsp@draw{42 30 32 35 24 41 c}%
\scsp@draw{25 45 26 47 27 48 c}%
\scsp@draw{b}%
\scsp@color set{0 G 0 g}%
\scsp@draw{53 16 m}%
\scsp@draw{53 17.66 51.66 19 50 19 c}%
\scsp@draw{48.34 19 47 17.66 47 16 c}%
\scsp@draw{47 14.34 48.34 13 50 13 c}%
\scsp@draw{51.66 13 53 14.34 53 16 c}%
\scsp@draw{b}%
\scsp@draw{53 26 m}%
\scsp@draw{53 27.66 51.66 29 50 29 c}%
\scsp@draw{48.34 29 47 27.66 47 26 c}%
\scsp@draw{47 24.34 48.34 23 50 23 c}%
\scsp@draw{51.66 23 53 24.34 53 26 c}%
\scsp@draw{b}%
\scsp@draw{11 28 m}%
\scsp@draw{11 30.21 9.21 32 7 32 c}%
\scsp@draw{4.79 32 3 30.21 3 28 c}%
\scsp@draw{3 25.79 4.79 24 7 24 c}%
\scsp@draw{9.21 24 11 25.79 11 28 c}%
\scsp@draw{s}%
\scsp@draw{17 55 m}%
\scsp@draw{17 57.21 15.21 59 13 59 c}%
\scsp@draw{10.79 59 9 57.21 9 55 c}%
\scsp@draw{9 52.79 10.79 51 13 51 c}%
\scsp@draw{15.21 51 17 52.79 17 55 c}%
\scsp@draw{s}%
\scsp@draw{12 68 m}%
\scsp@draw{12 70.21 10.21 72 8 72 c}%
\scsp@draw{5.79 72 4 70.21 4 68 c}%
\scsp@draw{4 65.79 5.79 64 8 64 c}%
\scsp@draw{10.21 64 12 65.79 12 68 c}%
\scsp@draw{s}%
\scsp@draw{27 76 m}%
\scsp@draw{27 78.21 25.21 80 23 80 c}%
\scsp@draw{20.79 80 19 78.21 19 76 c}%
\scsp@draw{19 73.79 20.79 72 23 72 c}%
\scsp@draw{25.21 72 27 73.79 27 76 c}%
\scsp@draw{s}%
\scsp@draw{46 89 m}%
\scsp@draw{46 91.21 44.21 93 42 93 c}%
\scsp@draw{39.79 93 38 91.21 38 89 c}%
\scsp@draw{38 86.79 39.79 85 42 85 c}%
\scsp@draw{44.21 85 46 86.79 46 89 c}%
\scsp@draw{s}%
\scsp@draw{78 89 m}%
\scsp@draw{78 91.21 76.21 93 74 93 c}%
\scsp@draw{71.79 93 70 91.21 70 89 c}%
\scsp@draw{70 86.79 71.79 85 74 85 c}%
\scsp@draw{76.21 85 78 86.79 78 89 c}%
\scsp@draw{s}%
\scsp@draw{92 73 m}%
\scsp@draw{92 75.21 90.21 77 88 77 c}%
\scsp@draw{85.79 77 84 75.21 84 73 c}%
\scsp@draw{84 70.79 85.79 69 88 69 c}%
\scsp@draw{90.21 69 92 70.79 92 73 c}%
\scsp@draw{s}%
\scsp@draw{96 53 m}%
\scsp@draw{96 55.21 94.21 57 92 57 c}%
\scsp@draw{89.79 57 88 55.21 88 53 c}%
\scsp@draw{88 50.79 89.79 49 92 49 c}%
\scsp@draw{94.21 49 96 50.79 96 53 c}%
\scsp@draw{s}%
\scsp@draw{98 23 m}%
\scsp@draw{98 25.21 96.21 27 94 27 c}%
\scsp@draw{91.79 27 90 25.21 90 23 c}%
\scsp@draw{90 20.79 91.79 19 94 19 c}%
\scsp@draw{96.21 19 98 20.79 98 23 c}%
\scsp@draw{s}%
\scsp@draw{Q}%
\scsp@color pop
}
% fine
\primitive\end
]=]
----------------------------------------
-- callback 'open_read_file'
callback.register('open_read_file', function(filename)
info("run open_read_file", filename)
if scspeedy.phase then
info("bad phase", scspeedy.phase)
abort("internal error")
end
scspeedy.phase = 'open'
-- clear \everyjob (WOW!)
scspeedy.orig_everyjob = tex.everyjob
tex.everyjob = ""
-- read from nice_source
return {
reader = make_reader(tex_source)
}
end)
----------------------------------------
-- End of file
@zr-tex8r
Copy link
Author

zr-tex8r commented Dec 7, 2024

使用方法については以下の記事を参照してください:snowman:

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