diff --git a/scribble-doc/scribblings/scribble/core.scrbl b/scribble-doc/scribblings/scribble/core.scrbl index bde6bc77..c8354a08 100644 --- a/scribble-doc/scribblings/scribble/core.scrbl +++ b/scribble-doc/scribblings/scribble/core.scrbl @@ -1697,6 +1697,15 @@ rendering. See also @racketmodname[scribble/latex-prefix].} +@defstruct[(latex-defaults+replacements latex-defaults) + ([replacements (hash/c string? (or/c bytes? path-string? + (cons/c 'collects (listof bytes?))))])]{ + Like @racket[latex-defaults] but it allows for more configuration. For example if + the @racket[replacements] maps @racket["scribble-load-replace.tex"] to @racket["my-scribble.tex"], + then the @racket["my-scribble.tex"] file in the current directory will we used in place + of the standard scribble package inclusion header. +} + @defstruct[command-extras ([arguments (listof string?)])]{ diff --git a/scribble-lib/scribble/latex-properties.rkt b/scribble-lib/scribble/latex-properties.rkt index 58e56c1d..d00eb62e 100644 --- a/scribble-lib/scribble/latex-properties.rkt +++ b/scribble-lib/scribble/latex-properties.rkt @@ -1,5 +1,6 @@ #lang scheme/base (require "private/provide-structs.rkt" + racket/serialize racket/contract/base) (provide-structs @@ -7,4 +8,6 @@ [latex-defaults ([prefix (or/c bytes? path-string? (cons/c 'collects (listof bytes?)))] [style (or/c bytes? path-string? (cons/c 'collects (listof bytes?)))] [extra-files (listof (or/c path-string? (cons/c 'collects (listof bytes?))))])] + [(latex-defaults+replacements latex-defaults) + ([replacements (hash/c string? (or/c bytes? path-string? (cons/c 'collects (listof bytes?))))])] [command-extras ([arguments (listof string?)])]) diff --git a/scribble-lib/scribble/latex-render.rkt b/scribble-lib/scribble/latex-render.rkt index f3b109aa..cd2928cd 100644 --- a/scribble-lib/scribble/latex-render.rkt +++ b/scribble-lib/scribble/latex-render.rkt @@ -6,6 +6,7 @@ racket/runtime-path racket/port racket/string + racket/path racket/list setup/collects file/convertible) @@ -23,8 +24,11 @@ (define-struct (toc-paragraph paragraph) ()) (define-runtime-path scribble-prefix-tex "scribble-prefix.tex") +(define-runtime-path scribble-packages-tex "scribble-packages.tex") +(define-runtime-path scribble-load-tex "scribble-load.tex") (define-runtime-path scribble-tex "scribble.tex") (define-runtime-path scribble-style-tex "scribble-style.tex") +(define-runtime-path scribble-load-replace-tex "scribble-load-replace.tex") (define (color->string c) (if (string? c) @@ -82,6 +86,17 @@ (define/public (render-part-depth) #f) (define/override (render-one d ri fn) + (define (maybe-replace file defaults) + (cond [(and defaults + (latex-defaults+replacements? defaults) + (hash-ref (latex-defaults+replacements-replacements defaults) + (path->string (file-name-from-path file)) + #f)) => + (lambda (v) + (cond + [(bytes? v) v] + [else (collects-relative->path v)]))] + [else file])) (let* ([defaults (ormap (lambda (v) (and (latex-defaults? v) v)) (style-properties (part-style d)))] [prefix-file (or prefix-file @@ -91,22 +106,24 @@ [(bytes? v) v] [else (collects-relative->path v)]))) scribble-prefix-tex)] - [style-file (or style-file + [style-file (or style-file (and defaults (let ([v (latex-defaults-style defaults)]) (cond [(bytes? v) v] [else (collects-relative->path v)]))) scribble-style-tex)] - [all-style-files (cons scribble-tex - (append (extract-part-style-files - d - ri - (lambda (p) #f) - tex-addition? - tex-addition-path) - (list style-file) - style-extra-files))] + [all-style-files (list* scribble-load-tex + (maybe-replace scribble-load-replace-tex defaults) + scribble-tex + (append (extract-part-style-files + d + ri + (lambda (p) #f) + tex-addition? + tex-addition-path) + (list style-file) + style-extra-files))] [whole-doc? (not (render-part-depth))]) (if whole-doc? (for ([style-file (in-list (cons prefix-file all-style-files))]) diff --git a/scribble-lib/scribble/scribble-load-replace.tex b/scribble-lib/scribble/scribble-load-replace.tex new file mode 100644 index 00000000..e6af7343 --- /dev/null +++ b/scribble-lib/scribble/scribble-load-replace.tex @@ -0,0 +1 @@ +% this bit intentionally left blank diff --git a/scribble-lib/scribble/scribble-load.tex b/scribble-lib/scribble/scribble-load.tex new file mode 100644 index 00000000..798a7001 --- /dev/null +++ b/scribble-lib/scribble/scribble-load.tex @@ -0,0 +1,18 @@ + +\newcommand{\packageGraphicx}{\usepackage{graphicx}} +\newcommand{\packageHyperref}{\usepackage{hyperref}} +\newcommand{\renewrmdefault}{\renewcommand{\rmdefault}{ptm}} +\newcommand{\packageRelsize}{\usepackage{relsize}} +\newcommand{\packageMathabx}{\usepackage{mathabx}} +% Avoid conflicts between "mathabx" and "wasysym": +\newcommand{\packageWasysym}{ + \let\leftmoon\relax \let\rightmoon\relax \let\fullmoon\relax \let\newmoon\relax \let\diameter\relax + \usepackage{wasysym}} +\newcommand{\packageTextcomp}{\usepackage{textcomp}} +\newcommand{\packageFramed}{\usepackage{framed}} +\newcommand{\packageHyphenat}{\usepackage[htt]{hyphenat}} +\newcommand{\packageColor}{\usepackage[usenames,dvipsnames]{color}} +\newcommand{\doHypersetup}{\hypersetup{bookmarks=true,bookmarksopen=true,bookmarksnumbered=true}} +\newcommand{\packageTocstyle}{\IfFileExists{tocstyle.sty}{\usepackage{tocstyle}\usetocstyle{standard}}{}} +\newcommand{\packageCJK}{\IfFileExists{CJK.sty}{\usepackage{CJK}}{}} + diff --git a/scribble-lib/scribble/scribble.tex b/scribble-lib/scribble/scribble.tex index 49fdd0de..0ae9df23 100644 --- a/scribble-lib/scribble/scribble.tex +++ b/scribble-lib/scribble/scribble.tex @@ -1,20 +1,18 @@ % This is the default style configuration for Scribble-generated Latex - -\usepackage{graphicx} -\usepackage{hyperref} -\renewcommand{\rmdefault}{ptm} -\usepackage{relsize} -\usepackage{mathabx} -% Avoid conflicts between "mathabx" and "wasysym": -\let\leftmoon\relax \let\rightmoon\relax \let\fullmoon\relax \let\newmoon\relax \let\diameter\relax -\usepackage{wasysym} -\usepackage{textcomp} -\usepackage{framed} -\usepackage[htt]{hyphenat} -\usepackage[usenames,dvipsnames]{color} -\hypersetup{bookmarks=true,bookmarksopen=true,bookmarksnumbered=true} -\IfFileExists{tocstyle.sty}{\usepackage{tocstyle}\usetocstyle{standard}}{} -\IfFileExists{CJK.sty}{\usepackage{CJK}}{} + +\packageGraphicx +\packageHyperref +\renewrmdefault +\packageRelsize +\packageMathabx +\packageWasysym +\packageTextcomp +\packageFramed +\packageHyphenat +\packageColor +\doHypersetup +\packageTocstyle +\packageCJK %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Configuration that is especially meant to be overridden: