{"size": 5849, "ext": "scrbl", "max_stars_repo_path": "latex-pict/scribblings/latex-pict.scrbl", "max_stars_repo_name": "soegaard/latex-pict", "max_stars_repo_stars_event_min_datetime": null, "max_stars_repo_stars_event_max_datetime": null, "max_issues_repo_path": "latex-pict/scribblings/latex-pict.scrbl", "max_issues_repo_name": "soegaard/latex-pict", "max_issues_repo_issues_event_min_datetime": "2020-02-20T21:42:05.000Z", "max_issues_repo_issues_event_max_datetime": "2020-02-20T21:42:05.000Z", "max_forks_repo_path": "latex-pict/scribblings/latex-pict.scrbl", "max_forks_repo_name": "soegaard/latex-pict", "max_forks_repo_forks_event_min_datetime": "2020-02-20T18:54:11.000Z", "max_forks_repo_forks_event_max_datetime": "2020-02-20T18:54:11.000Z"}
{"max_stars_count": null, "max_issues_count": 1, "max_forks_count": 1, "avg_line_length": 37.0189873418, "max_line_length": 85, "alphanum_fraction": 0.6915712088}
#lang scribble/manual
@require[@for-label[latex-pict
                    racket/base]]
@title{latex-pict}
@author{soegaard}

@defmodule[latex-pict]

@verbatim{
;;;
;;; TeX Formulas
;;;

;; This module contains a few functions that can turn a piece of TeX (string)
;; into a pict that renders the formula.

;; The module relies on  pdflatex to render the formula into a pdf file
;; and Poppler which is a C library, that renders pdf formula into Cairo contexts.
;; Cairo being the underlying graphics libray or racket/draw (and picts).
;; Note that introduces a dependecy on racket-popper.

;; Results are cached to speed things up, when rendering the same document
;; multiple times (caching is based on the entire tex document, so changes
;; in options etc. will trigger a rerendering).

;; TeX and LaTeX has three different rendering modes:

;;     text          for the body text
;;     math          for math formulas inline with text        $ or \( \)
;;     displaymath   for larger math formulass, not inline    $$ or \[ \]
;;     


;; Extracting a formula in "math" mode gives a tight bounding box around
;; the formula. The mode "displaymath" on the other hand has large
;; left and right margins. Therefore tex-display-math renders its
;; input as  \( \displaystyle <your-formula> \).
;; In case you really need the real display environment, you can
;; use text-real-display-math, which uses \[ <your-formula> \].

;; The main exports of this library is therefore:

(provide tex-math                ; \(                <formula> \)
         tex-display-math        ; \( \displaystyle  <formula> \)
         tex-real-display-math)  ; \[                <formula> \]

;; You will notice, that there is export that renders plain text,
;; but that is currently not supported by the "preview" package.

;; When a snippet of TeX without any context is rendered, it
;; is first put into a  TeX document, then pdflatex is invoked,
;; size information is extracted from the log file, and then
;; the pdf file is used to produce the pict.

;; It would be great if the user of this library didn't need to know
;; any details, about the TeX document, but TeX can be difficult to
;; work with. Especiallu if one doesn't know which document class
;; and packages that are used.

;; Here is the latex document that pdflatex will render to pdf,
;; when the mode tex-math is used:

;;     \documentclass{standalone}
;;     \usepackage[active,tightpage,lyx,pdftex,<modeoption>]{preview}
;;     \usepackage{amsmath}
;;         <your-preamble>
;;     \begin{document}
;;        \( <your-latex-snippet> \)
;;     \end{document}

;; where <modeoption> is one of "textmath" and "displaymath",
;;       <your-preamble> defaults as "", but you can put \usepackage{a_nice_pkg} here
;;       <your-latex-snippet>  is surrounded

;; First of all the document classes "standalone" and the
;; package "preview" is used. The combination renders the
;; document into a pdf with a minimal margin around the context.

;; The options for preview are:
;;    active    - actually use preview (otherwise preview is ignored)
;;    tightpage - no margins, option is needed to use the pdftex option
;;    pdftex    - assume PDFTeX is the output driver
;;    lyx       - makes pdftex write size information in the log file
;;                (we use it to determine size and placement of baseline)

;; The package "preview" by David Kastrup and the AUCTeX Team is available here:
;;     https://ctan.org/pkg/preview?lang=en

;; The package "amsmath" by the American Mathematical Society contains
;; most math related commands, that you will neeed. The documentation is here:
;;     https://ctan.org/pkg/amsmath?lang=en

;; The document class "standalone" is documented here:
;;     https://ctan.org/pkg/standalone?lang=en


;; The Racket functions tex-math, tex-display-math, and, read-display-math passes
;; the appropriate <modeoption> automatically.

;; The keyword argument #:document-class-options can be used to pass along
;; options (in the form of a list of symbols/strings) to the "standalone"
;; documentclass. Among the interesting options are 10pt, 11pt and 12pt.

;; The option #:preamble allows you to pass along a preamble, where you
;; can declare any packages you need. If you need the same preamble multiple
;; times, you can use the parameter  current-premable.
;; The default preamble is
;;    \usepackage{amsmath}
;; If you set the preamble and still need amsmath, remember to include it
;; in your own preamble.

;; The option #:preview allows you to pass along options in the form
;; of a list of symbols or strings to the "preview" TeX package.
;; If you need the same options multiple times, you can use the
;; parameter  current-preview-options

(provide current-document-class-options current-preamble current-preview-options)

;; Note that it is convenient to se the at-notation from Scribble to call,
;; the text functions:

;;   #lang at-exp racket
;;   (require latex-pict)
;;   @"@"tex-math{ a^2 + b^2 = c^2 }

;; Or perhaps introduce $ and $$ :

;;   #lang at-exp racket
;;   (require latex-pict)
;;   (define $  tex-math)
;;   (define $$ tex-display-math)
;;   @"@"${ c = \sqrt{ a^2 + b^2 = c^2} }

;; You can of course also use the functions without the at-notation:
;;   ($ "c = \\sqrt{ a^2 + b^2 = c^2}")
;; Just remember that \ needs to be quoted as \\ in Racket strings.


;;;
;;; Configuration
;;;

; Preamble, used if the option #:preamble isn't passed.
(define current-preamble  (make-parameter ""))

; Document class options 
(define current-document-class-options (make-parameter '()))
  
; Preview options
(define current-preview-options (make-parameter '()))


; Scale factor applied to the pict before it is rendered.
; The parameter value is used, if the option #:scale isn't used.
(define current-scale-factor (make-parameter 2))

}
