summaryrefslogtreecommitdiff
path: root/skribe/skr/latex-simple.skr
blob: dd2eccb86175802f62e8a4f4cf48e4c589ac4036 (about) (plain)
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
;;;
;;; LES CUSTOMS SONT TROP SPECIFIQUES POUR LA DISTRIBS. NE DOIT PAS VIRER 
;;; CE FICHIER (sion simplifie il ne rest plus grand chose)
;;;		Erick 27-10-04
;;;


;*=====================================================================*/
;*    scmws04/src/latex-style.skr                                      */
;*    -------------------------------------------------------------    */
;*    Author      :  Damien Ciabrini                                   */
;*    Creation    :  Tue Aug 24 19:17:04 2004                          */
;*    Last change :  Thu Oct 28 21:45:25 2004 (eg)                     */
;*    Copyright   :  2004 Damien Ciabrini, see LICENCE file            */
;*    -------------------------------------------------------------    */
;*    Custom style for Latex...                                        */
;*=====================================================================*/

(let* ((le (find-engine 'latex))
       (oa (markup-writer-get 'author le)))
   ; latex class & package for the workshop
   (engine-custom-set! le 'documentclass "\\documentclass[letterpaper]{sigplan-proc}")
   (engine-custom-set! le 'usepackage
   "\\usepackage{epsfig}
\\usepackage{workshop}
\\conferenceinfo{Fifth Workshop on Scheme and Functional Programming.}
               {September 22, 2004, Snowbird, Utah, USA.}
\\CopyrightYear{2004}
\\CopyrightHolder{Damien Ciabrini}
\\renewcommand{\\ttdefault}{cmtt}
")
   (engine-custom-set! le 'image-format '("eps"))
   (engine-custom-set! le 'source-define-color "#000080")
   (engine-custom-set! le 'source-thread-color "#8080f0")
   (engine-custom-set! le 'source-string-color "#000000")

   ; hyperref options
   (engine-custom-set! le 'hyperref #t)
   (engine-custom-set! le 'hyperref-usepackage
   "\\usepackage[bookmarksopen=true, bookmarksopenlevel=2,bookmarksnumbered=true,colorlinks,linkcolor=blue,citecolor=blue,pdftitle={Debugging Scheme Fair Threads}, pdfsubject={debugging cooperative threads based on reactive programming}, pdfkeywords={debugger, functional, reactive programming, Scheme}, pdfauthor={Damien Ciabrini}]{hyperref}")
   ; nbsp with ~ char
   (set! latex-encoding (delete! (assoc #\~ latex-encoding) latex-encoding))

   ; let latex process citations
   (markup-writer 'bib-ref le
      :options '(:text :bib)
      :before "\\cite{"
      :action (lambda (n e) (display (markup-option n :bib)))
      :after "}")  
   (markup-writer 'bib-ref+ le
      :options '(:text :bib)
      :before "\\cite{"
      :action (lambda (n e) 
		 (let loop ((bibs (markup-option n :bib)))
		    (if (pair? bibs)
			(begin 
			   (display (car bibs))
			   (if (pair? (cdr bibs)) (display ", "))
			   (loop (cdr bibs))))))
      :after "}")
   (markup-writer '&the-bibliography le
      :action (lambda (n e) 
		 (print "\\bibliographystyle{abbrv}")
		 (display "\\bibliography{biblio}")))
   
   ; ACM-style for authors
   (markup-writer '&latex-author le
      :before (lambda (n e)
		 (let ((body (markup-body n)))
		    (if (pair? body) 
			(print "\\numberofauthors{" (length body) "}"))
		    (print "\\author{")))
      :after "}\n")
   (markup-writer 'author le
      :options (writer-options oa)
      :before ""
      :action (lambda (n e)
		 (let ((name (markup-option n :name))
		       (affiliation (markup-option n :affiliation))
		       (address (markup-option n :address))
		       (email (markup-option n :email)))
		    (define (row pre n post)
		       (display pre) 
		       (output n e)
		       (display post) 
		       (display "\\\\\n"))
		    ;; name
		    (if name (row "\\alignauthor " name ""))
		    ;; affiliation
		    (if affiliation (row "\\affaddr{" affiliation "}"))
		    ;; address
		    (if (pair? address)
			(for-each (lambda (x)
				     (row "\\affaddr{" x "}")) address))
		    ;; email
		    (if email (row "\\email{" email "}"))))
      :after "")
)

(define (include-biblio) 
   (the-bibliography))