melt: latex with ocaml - bardou.frromain.bardou.fr/slides/melt.pdf · the latex library provides...
TRANSCRIPT
![Page 1: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/1.jpg)
Melt: LATEX with OCaml
Romain Bardou
GT ProValJune 11, 2010
![Page 2: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/2.jpg)
LATEX versus OCaml
LATEX:
I Beautiful documents
I Lots of macros
I Lots of packages
OCaml:
I Great programminglanguage
![Page 3: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/3.jpg)
Motivations for Document Programming
Macros are good practise
\newcommand{\ty}{\tau}
\newcommand{\subst}[3]{#1[#2/#3]}
Document-specific environments
LATEX libraries
Compute results in the paper itself
Science-fiction (or is it?):
I Type your theorems
I Check your proofs
![Page 4: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/4.jpg)
LATEX as a Programming Language
\long\def\@makecaption#1#2{
\vskip \abovecaptionskip
\setbox\@tempboxa
\hbox{{\sf\footnotesize \textbf{#1.} #2}}
\ifdim \wd\@tempboxa >\hsize
{\sf\footnotesize \textbf{#1.} #2\par}
\else
\hbox to\hsize{\hfil\box\@tempboxa\hfil}
\fi}
![Page 5: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/5.jpg)
OCaml as a Programming Language
Great:
I Typed
I Clear semantics
I Expressive (higher-order iterators, algebraic types...)
I Readable errors
I Nice syntax
I You already use it
But:
I Does not produce documents
![Page 6: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/6.jpg)
Melt
An attempt to combine
I the beauty of LATEX type-setting
I the expressivity of OCaml
![Page 7: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/7.jpg)
Basic Documents
The Melt Distribution
Mlpost Integration
Verbatim Modes
Variables
Conclusion
![Page 8: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/8.jpg)
Hello, World!
hello.mlt:
emit (document "Hello, world!")
Compile:melt -pdf hello.mlt
Obtain hello.pdf:Hello, world!
![Page 9: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/9.jpg)
Intermediate Files
After Melt pre-processor, hello.ml:
open Latex;;open Melt;;# 1 "../vide.mlt"
emit (document (mode T ((text "tata"))))
After compiling and running, hello.tex:
\documentclass{article}
\begin{document}
Hello, world!
\end{document}
![Page 10: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/10.jpg)
Text, Math and Code Modes
Text mode: "..."
"Hello, world!"
Math mode: $...$
$3.141592$
Code mode (default): {...}
let x = "some macro" in"Some text with {x}"
![Page 11: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/11.jpg)
Arbitrary Nesting
"I know that $1+2={latex_of_int (1+2)}$"
Produces:
I know that 1 + 2 = 3
![Page 12: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/12.jpg)
Example: Recoding Enumerate
let enumerate items =
let print_item i item =
"{textbf "{latex_of_int i})"} {item}\\"
inconcat (list_mapi print_item items)
...
enumerate ["first"; "second"; "third"]
Result:0) first1) second2) third
![Page 13: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/13.jpg)
Basic Documents
The Melt Distribution
Mlpost Integration
Verbatim Modes
Variables
Conclusion
![Page 14: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/14.jpg)
The Melt Pre-Processor
Provides easy concatenation of text, math and code(optional) Adds open Latex;; open Melt;;
MeltPPtoto.mlt toto.ml
![Page 15: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/15.jpg)
The Latex Library
Provides bindings for:I Many environments
I document, array, itemize, figure, center...
I Text type-setting commandsI section, tableofcontents, texttt, tiny, large...
I Mathematical symbols
I Γρεεκ letters, hebrew ℵiגk and accents
I Beamer
I LATEX labels and references
I Low-level stuff (hfill, vspace, ...)
and more.
![Page 16: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/16.jpg)
The Melt Tool
Calls the pre-processor
Compiles, links and executes the OCaml program
Runs latex or pdflatex and bibtex
Melt Tooltoto.mlt toto.pdf
All intermediate files in _melt directory
![Page 17: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/17.jpg)
The Melt Library
Easy integration of Mlpost figures
Easy integration of Mlpost figures
Easy integration of Mlpost figures
Easy integration of Mlpost figures
Easy integration of Mlpost figures
Easy integration of Mlpost figures
Easy integration of Mlpost figuresEasy integration of Mlpost figuresEasy integration of Mlpost figures
Easy integration of Mlpost figures
Easy integration of Mlpost figures
Easy integration of Mlpost figures
Easy integration of Mlpost figures
Easyintegratio
n of Mlpostfigures
Easyintegratio
n of Mlpostfigures
...and some dirty stuff for the Melt tool
![Page 18: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/18.jpg)
Another Mlpost Diagram
meltpp
toto.ml
ocamlbuildor
ocamlcor
mlpost
toto.byte run
toto.tex
pdflatex
Latex lib.Melt lib.
toto.mlt
toto.ml
toto.pdf
![Page 19: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/19.jpg)
Basic Documents
The Melt Distribution
Mlpost Integration
Verbatim Modes
Variables
Conclusion
![Page 20: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/20.jpg)
Mlpost Integration
val picture_of_latex: Latex.t → Mlpost.Picture.tval mlpost: Mlpost.Command.t → Latex.t
Write your figures in your document:
let fancy_text_rotation text =
let pic = picture_of_latex text in...
let () = emit (document "
Here is a figure:
{mlpost (fancy_text_rotation "Text to rotate")}
")
![Page 21: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/21.jpg)
Basic Documents
The Melt Distribution
Mlpost Integration
Verbatim Modes
Variables
Conclusion
![Page 22: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/22.jpg)
Basic Verbatim
Allows to print any symbol."My webpage: <<http://www.lri.fr/~bardou>>"
Generated LATEX:
My webpage: http\symbol{58}\symbol{47}\symbol{47}
www\symbol{46}lri\symbol{46}fr\symbol{47}
\symbol{126}bardou
Produces:My webpage: http://www.lri.fr/˜bardou
Much safer than \verb or \begin{verbatim}.
![Page 23: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/23.jpg)
Pretty-Printed Verbatim
let url (x: string) = texttt (Verbatim.verbatim x) in"My webpage: <:url:<http://www.lri.fr/~bardou>>"
Produces:My webpage: http://www.lri.fr/~bardou
In these slides:
I a LATEX pretty-printer
I an OCaml pretty-printer
I a Melt pretty-printer
![Page 24: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/24.jpg)
Using Verbatim to Ease Writing
A pretty-printer for boolean formulas:
let bool =
Verbatim.pseudocode~symbols: [
\"/\\\\\", land_;\"\\\\/\", lor_;\"<=>\", iff;\"==>\", rightarrow_;\"<==\", leftarrow_;
]
~keyword_symbols: [\"xor\", oplus; \"xand\", otimes]
![Page 25: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/25.jpg)
Using Verbatim to Ease Writing
Let’s use our boolean formula pretty-printer:"<:bool:%A /\ B \/ (C_1 xor C_2) <=> (D ==> E_1 xand E_2)%>"
Produces:A ∧ B ∨ (C1 ⊕ C2 ) ⇐⇒ (D ⇒ E1 ⊗ E2 )
![Page 26: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/26.jpg)
Basic Documents
The Melt Distribution
Mlpost Integration
Verbatim Modes
Variables
Conclusion
![Page 27: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/27.jpg)
Motivations for Variables
Collect data following document flowUse final value before the end
Examples:
I theorem counters
I line numbers in code listings
I titles for a table of contents
I packages used by commands
![Page 28: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/28.jpg)
Variables: Interface
type α variable
val variable: α → α variableval set: α variable → α → tval get: α variable → (α → t) → tval final: α variable → (α → t) → t
![Page 29: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/29.jpg)
Variables: Example
let sections = variable []
let section title =
concat [
Latex.section title;get sections (fun s → set sections (title :: s));
]
let enumerate_sections =
final sections enumerate
![Page 30: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/30.jpg)
Variables: Implementation
Compute a fixpoint on a heterogeneous list of variables=⇒ a bit tricky
![Page 31: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/31.jpg)
Basic Documents
The Melt Distribution
Mlpost Integration
Verbatim Modes
Variables
Conclusion
![Page 32: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/32.jpg)
Is it usable in practice?
Yes:
I all of my slides
I all of my research notes
I this very presentation
I the Melt documentation
I several full papers
I several PhD theses
are all written or being written with Melt.
![Page 33: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/33.jpg)
Will it suit your needs?
You won’t be stuck with Melt
I you can mix LATEX and Melt parts
I produced .tex files are readable unless lots of verbatim
Several possible programming styles
Based on LATEX
I use the styles and classes given by your publisher
![Page 34: Melt: LaTeX with OCaml - bardou.frromain.bardou.fr/slides/melt.pdf · The Latex Library Provides bindings for: I Manyenvironments I document, array, itemize, figure, center... I Text](https://reader035.vdocuments.net/reader035/viewer/2022062402/5f419377856ab026710a1693/html5/thumbnails/34.jpg)
Try it now!
Webpage:http://melt.forge.ocamlcore.org/
Darcs repository:darcs get http://darcs.ocamlcore.org/repos/melt
Mailing-list:https://lists.forge.ocamlcore.org/cgi-bin/listinfo/melt-general
MeltMeltMeltMeltMeltMeltMeltMeltMeltMeltMeltMeltMe
ltMe
ltMe
lt