aboutsummaryrefslogtreecommitdiff
;;; eq.skb  --  Equation formatting.
;;; -*- coding: iso-8859-1 -*-
;;;
;;; Copyright 2006, 2007, 2008, 2009, 2012  Ludovic Courtès <ludo@gnu.org>
;;;
;;;
;;; This file is part of Skribilo.
;;;
;;; Skribilo is free software: you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
;;; the Free Software Foundation, either version 3 of the License, or
;;; (at your option) any later version.
;;;
;;; Skribilo is distributed in the hope that it will be useful,
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with Skribilo.  If not, see <http://www.gnu.org/licenses/>.

;;; FIXME: This is a stub and must be completed!

(chapter :title [Equation Formatting] :ident "equations"
   
   (p [Skribilo comes with an equation formatting package.  This package
may be loaded by adding the following form at the top of your document:]

	(disp (prog (source :language scheme
		       [(use-modules (skribilo package eq))])))
	
      [It allows the inclusion of (complex) equations in your documents,
such as, for example, the following:]
	
	(disp (eq :renderer (if (and %have-lout?
	                             (engine-format? "html"))
	                        'lout
				 #f)
                  :ident "eq-disponibilite"
		  `(= (apply A D)
		      (sum :from (= i b) :to (* S b)
			   (* (script :sup (* S b) :sub i C)
			      (* (expt mu i)
				 (expt (- 1 mu)
				       (- (* S b) i))))))))
	
      [This chapter will describe the syntactic facilities available to
describe equations, as well as the rendering options.])
   
   (section :title [Syntax]
            :info-node [Eq Syntax]
      
      (p [To start with, let's have a look at a concrete example. ]
	
        (example-produce
	  (example :legend "Example of a simple equation using the verbose syntax"
	     (prgm :file "src/eq1.skb"))
	  (disp (include "src/eq1.skb")))

  	[In this example, the ,(tt [eq:]) sub-markups are used pretty
much like any other kind of markup.  However, the resulting syntax
is very verbose and hard to read.])
      
      (p [Fortunately, the ,(tt [eq]) package allows for the use of a
much simpler syntax.  ]

	(example-produce
	  (example :legend "Example of a simple equation"
	     (prgm :file "src/eq2.skb"))
	  (disp (include "src/eq2.skb")))
	
	[Readers familiar with the Lisp family of programming languages
may have already recognized its ,(emph [prefix notation]).  Note that,
unlike in the previous example, the equation itself if ,(emph [quoted]),
that is, preceded by the ,(tt [']) sign.  Additionally, when referring
to a symbol (such as the Greek letter ,(symbol "phi")), you no longer
need to use the ,(tt [symbol]) markup (,(numref :text [see Section]
:ident "symbols")).])

      (p [It is possible to create ,(emph [equation display blocks]),
where several equations are displayed and aligned according to a
particular operator. ]

	(example-produce
	  (example :legend "Inlined, displayed, and aligned equations"
	     (prgm :file "src/eq3.skb"))
	  (disp (include "src/eq3.skb")))))
   
   ;; FIXME: Write this.
   (section :title [Rendering])
   
   (section :title [Summary]
      
      (p [The options available for the top-level ,(code [eq]) markup
are summarized here:])
      
      (doc-markup 'eq
	          `((:inline? ,[If ,(code [auto]), Skribilo will
automatically determine whether the equation is to be "in-line".
Otherwise, it should be a boolean indicating whether the equation is to
appear "in-line", i.e., within a paragraph.  If the engine supports it,
it may adjust various parameters such as in-equation spacing
accordingly.])
		    (:number ,[If true, then a number is automatically
assigned to the equation and displayed.  If it is a string, then that
string is used as the equation's number.  If ,(code [#f]), then the
equation is left unnumbered.  Note that this option is only taken into
account for displayed equations.])
	            (:renderer ,[The engine that should be used to render
the equation.  This allows, for instance, to use the Lout engine to
render equations in HTML.])
	            (:mul-style ,[A symbol denoting the default style for
multiplications.  This should be one of ,(code [space]), ,(code
[cross]), ,(code [asterisk]) or ,(code [dot]).])
	            (:div-style ,[A symbol denoting the default style for
divisions.  This should be one of ,(code [over]), ,(code [fraction]),
,(code [div]) and ,(code [slash]).  Per-,(code [eq:/]) ,(code
[:div-style]) options override this setting.])
	            (:align-with ,[Within a ,(code [eq-display]) block,
this should be a symbol specifying according to which operator equations
are to be aligned with one another.]))
	          :source "skribilo/package/eq.scm")
      
      (p [Equation display blocks can be defined using ,(code
[eq-display]).  Display blocks define the scope of the alignment among
equations as specified by the ,(code [:align-with]) options of ,(code
[eq]).])
      
      (doc-markup 'eq-display
	          `()
	          :source "skribilo/package/eq.scm"))

   )

;;; arch-tag: e9c83c13-205f-4f68-9100-b445c21b959c