commit 2881ef290ddfef6b645eaabc997c9bd6fddaa641
parent 1db48e6fc6b772a346982b405587ef298cb4d4a9
Author: Spencer Florence <spencer@florence.io>
Date: Thu, 7 Jan 2016 10:32:52 -0600
Allow for manipulating scribble.tex imports
Diffstat:
6 files changed, 72 insertions(+), 26 deletions(-)
diff --git 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
@@ -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
@@ -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
@@ -0,0 +1 @@
+% this bit intentionally left blank
diff --git a/scribble-lib/scribble/scribble-load.tex 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
@@ -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: