├── .gitignore ├── Makefile ├── News ├── README.markdown ├── Todo ├── lltxdoc.cls └── lualatex-doc.tex /.gitignore: -------------------------------------------------------------------------------- 1 | # temporary 2 | .*.swp 3 | *.log 4 | *.aux 5 | *.log 6 | *.toc 7 | *.fdb_latexmk 8 | *.fls 9 | 10 | # targets 11 | *.pdf 12 | *.zip 13 | README 14 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | NAME = lualatex-doc 2 | FORMAT = lualatex 3 | 4 | DOC = $(NAME).pdf 5 | SRC = $(NAME).tex 6 | README = README 7 | MKD = $(README).markdown 8 | 9 | SRCFILES = $(SRC) Makefile lltxdoc.cls 10 | DOCFILES = $(DOC) $(README) News 11 | ALL = $(SRCFILES) $(DOCFILES) 12 | 13 | GENERATED = $(DOC) $(README) 14 | 15 | all: lualatex-doc.pdf 16 | world: all ctan 17 | 18 | .PHONY: all world 19 | 20 | # (with the next version of latexmk: -pdf -pdflatex=lualatex) 21 | LATEXMK_FMT = -pdf -e '$$pdflatex = q(lualatex %O %S)' 22 | 23 | %.pdf: %.tex 24 | latexmk -silent $(LATEXMK_FMT) $< >/dev/null 25 | 26 | $(README): $(MKD) 27 | @cp $(MKD) $(README) 28 | 29 | ctan: $(NAME).tds.zip 30 | @zip -q $(NAME).zip $(ALL) $(NAME).tds.zip 31 | 32 | $(NAME).tds.zip -q: $(ALL) 33 | @rm -rf texmf 34 | @mkdir -p texmf/doc/$(FORMAT)/$(NAME) 35 | @cp $(DOCFILES) texmf/doc/$(FORMAT)/$(NAME) 36 | @mkdir -p texmf/source/$(FORMAT)/$(NAME) 37 | @cp $(SRCFILES) texmf/source/$(FORMAT)/$(NAME) 38 | @cd texmf && zip -q -r ../$(NAME).tds.zip . 39 | @rm -rf texmf 40 | 41 | .PHONY: clean mrproper 42 | 43 | clean: 44 | @latexmk -silent -c >/dev/null 45 | 46 | mrproper: clean 47 | @rm -f -- $(GENERATED) $(NAME)*.zip 48 | -------------------------------------------------------------------------------- /News: -------------------------------------------------------------------------------- 1 | 2013/05/10 (Elie Roux) 2 | * update for the large changes appearing in TeXLive 2013 and 3 | for Lua 5.2. 4 | 5 | 2010/11/11 6 | * fix a lot of typos, thanks to all readers 7 | * add a paragraph about hyphenation and other metric changes, with 8 | relevant information provided by Stephan Hennig 9 | * add a stub paragraph about languages support (suggested by Stephan) 10 | * fix euenc/xunicode description thanks to Ulrike Fischer 11 | * be more realistic about soul and listings thanks to Ulrike 12 | * add a paragraph about luatex-unicode-letters.tex 13 | * add a paragraph about modified hyphenation loading 14 | * mention LuaTeX's beta status 15 | * mention new luacode package, update luatextra description 16 | 17 | 2010/11/08 18 | * initial release 19 | 20 | vim: spell spelllang=en 21 | -------------------------------------------------------------------------------- /README.markdown: -------------------------------------------------------------------------------- 1 | A guide to LuaLaTeX 2 | =================== 3 | 4 | This document is a map, or touristic guide, for the new world of LuaLaTeX. 5 | Though focusing on LuaLaTeX, it includes relevant information about LuaTeX 6 | with the Plain format, too. 7 | 8 | The intended audience ranges from complete newcomers (with a working knowledge 9 | of conventional LaTeX) to package developers. This guide is intended to be 10 | comprehensive in the following sense: it contains pointers to all relevant 11 | sources, gathers information that is otherwise scattered, and adds 12 | introductory material. 13 | 14 | Feedback and suggestions for improvement are most welcome. 15 | 16 | License 17 | ------- 18 | 19 | Written by Manuel Pégourié-Gonnard , 2010. 20 | 21 | Distributed under the terms of the [_GNU free documentation licence_][gfdl]. 22 | 23 | [gfdl]: http://www.gnu.org/licenses/fdl.html 24 | -------------------------------------------------------------------------------- /Todo: -------------------------------------------------------------------------------- 1 | 2 | - packages related to encodings, like soul, listings & fancyvrb: 3 | get my ideas clear on that matter and rework the correspoding paragraphs. 4 | See mail from Ulrike. 5 | 6 | - expand on babel/polyglossia & non-latin languages 7 | 8 | - new package: luasseq 9 | -------------------------------------------------------------------------------- /lltxdoc.cls: -------------------------------------------------------------------------------- 1 | % private class for lualatex-doc 2 | % see lualatex-doc.tex for copying conditions 3 | 4 | \ProvidesClass{lltxdoc} 5 | 6 | \LoadClass[a4paper]{scrartcl} 7 | \RequirePackage{fontspec} 8 | \RequirePackage{metalogo, xspace, ifmtarg, xargs, fancyvrb} 9 | \RequirePackage[table]{xcolor} 10 | \RequirePackage[english]{babel} 11 | \RequirePackage[colorlinks=true]{hyperref} 12 | \RequirePackage{bookmark} 13 | 14 | \defaultfontfeatures{Ligatures=TeX, Scale=MatchLowercase} 15 | \setmainfont{Linux Libertine O} 16 | \setsansfont{Kurier} 17 | \setmonofont{Inconsolata} 18 | 19 | \newcommand*\simplelogo [1] {% 20 | \ifcsname #1\endcsname \else \badlogocommand \fi 21 | \lowercase{\expandafter\simple@logo\expandafter{% 22 | \csname #1\expandafter\endcsname\expandafter}}\expandafter{% 23 | \csname #1\endcsname}{#1}} 24 | \newcommand*\simple@logo [3] {% 25 | \newcommand #1 {#2\xspace}% 26 | \pdfstringdefDisableCommands{\def#1{#3\space}}} 27 | 28 | \providecommand \ConTeXt {Con\TeX{}t} 29 | \providecommand \pdfTeX {pdf\TeX} 30 | \providecommand \TeXLive {\TeX\thinspace Live} 31 | \providecommand \MiKTeX {MiK\TeX} 32 | 33 | \simplelogo {TeX} 34 | \simplelogo {LaTeX} 35 | \simplelogo {LuaTeX} 36 | \simplelogo {LuaLaTeX} 37 | \simplelogo {XeTeX} 38 | \simplelogo {XeLaTeX} 39 | \simplelogo {ConTeXt} 40 | \simplelogo {pdfTeX} 41 | \simplelogo {MiKTeX} 42 | \simplelogo {TeXLive} 43 | 44 | \colorlet{code}{blue!80!black} 45 | \fvset{formatcom=\color{code}} 46 | \DefineShortVerb\© 47 | \catcode`\  10 % non-breakable space 48 | 49 | \newcommand*\email [1] {<\href{mailto:#1}{#1}>} 50 | \newcommand*\ctan [1] {\href{http://mirror.ctan.org/#1}{\nolinkurl{#1}}} 51 | \newcommand \file {\nolinkurl} 52 | \newcommand*\note [1] {\noindent\textsf{\bfseries #1.}\quad\ignorespaces} 53 | \newcommand \cmd {\texttt} 54 | \newcommand \code [1] {\texorpdfstring {\texttt{\color{code}#1}} {#1}} 55 | \newcommand*\cs [1] {\code{\textbackslash #1}} 56 | 57 | \newcommandx*\para [2][2] {% 58 | \@ifmtarg{#2}{\para@{#1}{#1}}{\para@{#1}{#2}}} 59 | \newcommand \para@ [2] {% 60 | \par \medskip 61 | \hypertarget{para.#2}{}% 62 | \belowpdfbookmark{#1}{para.#2}% 63 | \noindent 64 | \label{para.#2}% 65 | \makebox [0pt][r] {% 66 | \textsf{\bfseries #1\quad}}% 67 | \ignorespaces 68 | } 69 | \newcommandx*\pararef [3][1, 3] {% 70 | \@ifmtarg{#3}{\para@ref{#1}{#2}{#2}}{\para@ref{#1}{#2}{#3}}} 71 | \newcommand \para@ref [3] {% 72 | \hyperlink{para.#3}{#1{#2}}} 73 | \newcommand*\parapageref [1] {% 74 | \autopagref{para.#1}} 75 | 76 | \newcommand \pf {\textsf} 77 | \newcommand \pk {\pararef[\pf]} 78 | 79 | \newcommandx*\pkdesc [6][6] {% 80 | \para {#1} 81 | \pkditem {Engines} {#3} 82 | \pkditem {Formats} {#4} 83 | \pkditem {Authors} [\\]{#2} 84 | \pkditem {CTAN location} [\\]{#5}[\ctan] 85 | \pkditem {Development url} [\\]{#6}[\url] 86 | \newline 87 | } 88 | \newcommandx*\pkditem [4][2,4] {\@ifnotmtarg{#3}{% 89 | #2\textsf{\bfseries #1:} #4{#3}.% 90 | }} 91 | 92 | \newcommand \WSPR {Will Robertson\xspace} 93 | \newcommand \KH {Khaled Hosny\xspace} 94 | \newcommand \HO {Heiko Oberdiek\xspace} 95 | \newcommand \ER {Élie Roux\xspace} 96 | \newcommand \MPG {Manuel Pégourié-Gonnard\xspace} 97 | \newcommand \VK {Vafa Khalighi\xspace} 98 | \newcommand \HH {Hans Hagen\xspace} 99 | \newcommand \Taco {Taco Hoekwater\xspace} 100 | \newcommand \FC {François Charette\xspace} 101 | \newcommand \PHG {Philipp Gesang\xspace} 102 | \newcommand \AR {Arthur Reutenauer\xspace} 103 | 104 | \newenvironment{myquote}{% 105 | \list{}{\leftmargin0pt \rightmargin1em}% 106 | \item\relax 107 | \small 108 | }{% 109 | \endlist 110 | } 111 | -------------------------------------------------------------------------------- /lualatex-doc.tex: -------------------------------------------------------------------------------- 1 | % lualatex-doc: a guide to LuaLaTeX 2 | % 3 | % Originally written by Manuel Pégourié-Gonnard , 2010. 4 | % 5 | % For a list of contributors, see the section below. 6 | % 7 | % Distributed under the terms of the GNU free documentation licence: 8 | % http://www.gnu.org/licenses/fdl.html 9 | % without any invariant section or cover text. 10 | 11 | \documentclass{lltxdoc} 12 | 13 | \title{A guide to \lualatex} 14 | \author{Manuel Pégourié-Gonnard \email{mpg@elzevir.fr} et al.} 15 | \date{\today} 16 | 17 | \begin{document} 18 | 19 | \maketitle 20 | 21 | \begin{abstract} 22 | This document is a map, or touristic guide, for the new world of 23 | \lualatex.\footnote{Though focusing on \lualatex, it includes relevant 24 | information about \luatex with the Plain format, too.} The intended 25 | audience ranges from complete newcomers (with a working knowledge of 26 | conventional \latex) to package developers. This guide is intended to be 27 | comprehensive in the following sense: it contains pointers to all relevant 28 | sources, gathers information that is otherwise scattered, and adds 29 | introductory material. 30 | 31 | Feedback and suggestions for improvement are most welcome. This document is 32 | work in progress; thanks for your comprehension and patience. 33 | \end{abstract} 34 | 35 | \vspace{\stretch{1}} 36 | \setcounter{tocdepth}{2} 37 | \listoftoc*{toc} 38 | \vspace*{\stretch{2}} 39 | \clearpage 40 | 41 | \section{Introduction}\label{intro} 42 | 43 | \subsection{Just what is \lualatex?}\label{what} 44 | 45 | To answer this question, we need to mention a few details about the \tex world 46 | that you may usually ignore: the difference between an \emph{engine} and a 47 | \emph{format}. An engine is an actual computer program, while a format is a 48 | set of macros executed by an engine, usually preloaded when the engine is 49 | invoked with a particular name. 50 | 51 | Actually, a format is more or less like a document class or a package, except 52 | it is associated with a particular command name. Imagine there is a command 53 | \cmd{latex-article} that would do the same as \cmd{latex}, except you wouldn't 54 | need to say ©\documentclass{article}© at the beginning of your file. 55 | Similarly, in current distributions, the command \cmd{pdflatex} is the same as 56 | the command \cmd{pdftex} except that you don't need to put the instructions to 57 | load \latex at the beginning of your source file. This is convenient, and 58 | slightly more efficient too. 59 | 60 | Formats are great because they implement powerful commands using the basic 61 | tools an engine provides. However the power of the format is sometimes 62 | limited by the engine's tools set, so people started developing more 63 | powerful engines so that other people can implement even more powerful formats 64 | (or packages). The most famous engines now (except the original \tex) are 65 | \pdftex, \xetex and \luatex. 66 | 67 | To further complicate the picture, the original \tex engine produced only DVI 68 | files, while its successors may (also) produce PDF files. Each command in your 69 | system corresponds to a particular engine with a particular format and a 70 | particular output mode. The following table summarizes this: rows are indexed 71 | by format, columns by engine, and in each cell the first line is the command 72 | for this engine with this format in DVI mode, and the second for the same PDF 73 | mode. 74 | 75 | \begin{center} 76 | \newcommand*\cell [2] {% 77 | \parbox{6em}{\centering\leavevmode\color{code}\ttfamily 78 | \strut\maybe{#1} \\ \strut\maybe{#2}}} 79 | \makeatletter 80 | \newcommand*\maybe [1] {% 81 | \@ifmtarg{#1} {\textcolor{gray}{\normalfont (none)}} {#1}} 82 | \begin{tabular}{l|cccc} 83 | & \tex & \pdftex & \xetex & \luatex 84 | \\ \hline 85 | Plain 86 | & \cell{tex}{} 87 | & \cell{etex}{pdftex} 88 | & \cell{}{xetex} 89 | & \cell{dviluatex}{luatex} 90 | \\ \hline 91 | \latex 92 | & \cell{}{} 93 | & \cell{latex}{pdflatex} 94 | & \cell{}{xelatex} 95 | & \cell{dvilualatex}{lualatex} 96 | \\ 97 | \end{tabular} 98 | \end{center} 99 | 100 | We can now answer the title question: \lualatex is the \luatex engine with the 101 | \latex format. Well, this answer isn't very satisfying if you don't know what 102 | \luatex and \latex are. 103 | 104 | \medskip 105 | 106 | As you probably know, \latex is the general framework 107 | in which documents begin with ©\documentclass©, packages are loaded with 108 | ©\usepackage©, fonts are selected in a clever way (so that you can switch to 109 | boldface while preserving italics), pages are built with complicated 110 | algorithms 111 | including support for headers, footers, footnotes, margin notes, floating 112 | material, etc. This mostly doesn't change with \lualatex, but new and more 113 | powerful packages are available to make parts of the system work in a better 114 | way. 115 | 116 | So, what's \luatex? Short version: the hottest \tex engine right now! 117 | Long version: It is the designated successor of \pdftex and 118 | includes all of its core features: direct generation of PDF files with support 119 | for advanced PDF features and micro-typographic enhancements to \tex 120 | typographic algorithms. The main new features of \luatex are: 121 | \begin{enumerate} 122 | \item Native support of Unicode, the modern standard for character 123 | classification and encoding, supporting all characters in the world, from 124 | English to traditional Chinese through Arabic, including a lot of 125 | mathematical (or otherwise specialised) symbols. 126 | \item Inclusion of Lua as an embedded scripting language (see 127 | section~\ref{luaintex} for details). 128 | \item A lot of wonderful Lua libraries, including: 129 | \begin{itemize} 130 | \item ©fontloader©, supporting modern font formats such as 131 | TrueType and OpenType; 132 | \item ©font©, allowing advanced manipulation of the fonts 133 | from within the document; 134 | \item ©mplib©, an embedded version of the graphic program MetaPost; 135 | \item ©callback©, providing hooks into parts of the \tex engine that 136 | were previously inaccessible to the programmer; 137 | \item utility libraries for manipulating images, PDF files, etc. 138 | \end{itemize} 139 | \end{enumerate} 140 | Some of these features, such as Unicode support, directly impact all 141 | documents, while others merely provide tools that package authors will use to 142 | provide you with more powerful commands and other enhancements. 143 | 144 | \subsection{Switching from \latex to \lualatex}\label{switch} 145 | 146 | As the previous section explains, \lualatex is mostly like \latex, with a few 147 | differences, and more powerful packages and tools available. Here we present 148 | an absolute minimum you should know to produce a document with \lualatex, while 149 | the rest of the document provides more details about the available packages. 150 | 151 | There are only three differences: 152 | \begin{enumerate} 153 | \item Don't load \pf{inputenc}, just encode your source in UTF-8. 154 | \item Don't load \pf{fontenc} nor \pf{textcomp}, but load \pf{fontspec}. 155 | \item \pf{babel} works with \lualatex{} but you can load \pf{polyglossia} instead. 156 | \item Don't use any package that changes the fonts, but use \pf{fontspec}'s 157 | commands instead. 158 | \end{enumerate} 159 | So, you only need to get familiar with \pf{fontspec}, which is 160 | easy: select the main (serif) font with ©\setmainfont©, the sans serif font 161 | with ©\setsansfont© and the mono-spaced (typewriter) font with ©\setmonofont©. 162 | The argument to these commands is the human-friendly name of the font, for 163 | example ©Latin Modern Roman© rather than ©ec-lmr10©. You probably want to use 164 | ©\defaultfontfeatures{Ligatures=TeX}© before these commands to keep the usual 165 | \tex substitutions (such as ©---© for an em-dash) working. 166 | 167 | The good news is: you can directly access any font on your operating system 168 | (in addition to those of your \tex distribution) including TrueType and 169 | OpenType fonts and have access to their most advanced features. It means it 170 | is now easy to install any modern font you may download or purchase from an 171 | editor and benefit from their full potential in \lualatex. 172 | 173 | Now for the bad news: it is not always easy to get a list of all available 174 | fonts. Under Windows with \texlive, the command-line tool \cmd{fc-list} lists 175 | them all, but is not very friendly. Under Mac OS X, the \emph{Fontbook} 176 | application lists the fonts of your system, but not those of your \tex 177 | distribution. Same with \cmd{fc-list} on Linux. More bad news: it is not easy 178 | to access your old fonts that way. Luckily, more fonts are available in modern 179 | formats every day (well, month or year, actually, if you only count good 180 | fonts). 181 | 182 | \emph{En passant}, let's mention that the content of this section so far also 183 | holds for \xelatex, that is, \latex over \xetex. Indeed, \xetex shares two of 184 | the essential features of \luatex: native Unicode and support for modern font 185 | formats (but doesn't have the other features of \luatex; on the other hand, it 186 | is more stable right now). Though their implementations concerning fonts are 187 | vastly different, \pf{fontspec} manages to offer a mostly unified font 188 | interface for both \xelatex and \lualatex. 189 | 190 | \medskip 191 | 192 | So, to benefit from the new features of \luatex, you must drop a few parts of 193 | the old world, namely the fonts that are not available in a modern format (and 194 | also the liberty to encode your source how you want, but UTF-8 is so much 195 | superior that this one hardly counts). The package \pk{luainputenc} provides 196 | various trade-offs that allow you to regain these parts\footnote{While the 197 | name suggests it is only about input encodings, the details of \latex's font 198 | encoding implementation imply this package is needed (and works) for old 199 | fonts too.} possibly at the expense of losing real Unicode support. 200 | 201 | That's all you need to know to start producing documents with \lualatex. I 202 | recommend you have a look at the \pf{fontspec} manual and actually try to 203 | compile a small document using funny fonts. You can then skim over the rest of 204 | this document as you wish. Section~\ref{workornot} lists all the other 205 | differences between conventional \latex and \lualatex that I'm aware of. 206 | 207 | \subsection{A Lua-in-\tex primer}\label{luaintex} 208 | 209 | Lua is a nice, small language, obviously less surprising and much easier to 210 | learn than \tex as a programming language. The essential reference is the very 211 | readable book \emph{Programming in Lua}, whose first edition is freely 212 | \href{http://www.lua.org/pil/} {available online}. For a quick start, I 213 | recommend you read chapters~1 to~5 and have a quick glance at part~3. Note 214 | that all the libraries mentioned in chapter~3 are included in \luatex, but the 215 | ©os© library is restricted for security reasons. 216 | 217 | Depending on your programming culture, you may be directly interested in the 218 | rest of part~1 and part~2 which present more advanced features of the 219 | language, but part~4 is useless in a \luatex context, unless of course you 220 | want to hack \luatex itself. Finally, the \emph{Lua reference manual} is 221 | \href{http://www.lua.org/manual/5.2/}{available online} and 222 | comes with a handy index. 223 | 224 | \medskip 225 | 226 | Now, let's turn to Lua in \luatex. The main way to execute Lua code from the 227 | \tex end is the ©\directlua© command, which takes arbitrary Lua code as an 228 | argument. Conversely, you can pass information from Lua to \tex with 229 | ©tex.sprint©.\footnote{The name probably means ``string print'' as opposed to 230 | ``run very fast for a short period of time.''} For example, 231 | \begin{Verbatim} 232 | the standard approximation $\pi = \directlua{tex.sprint(math.pi)}$ 233 | \end{Verbatim} 234 | prints ``the standard approximation $\pi = \directlua{tex.sprint(math.pi)}$'' 235 | in your document. See how easy it is to mix \tex and Lua? 236 | 237 | Actually, there are a few gotchas. Let's look at the Lua-to-\tex way first; 238 | it's the simplest (since it's more Lua than \tex). If you look at the \luatex 239 | manual, you'll see there is another function with a simpler name, ©tex.print©, 240 | to pass information this way. It works by virtually inserting a full line into 241 | your \tex source, whose contents are its argument. In case you didn't know, 242 | \tex does many nasty\footnote{Okay, these are usually nice and helpful 243 | actions, but in this case they are most probably unexpected so I call them 244 | nasty.} things with full lines of the source: 245 | ignoring spaces at the beginning and end of line and appending an end-of-line 246 | character. Most of the time, you don't want this to happen, so I recommend 247 | using ©tex.sprint© which virtually inserts its argument in the current line, 248 | so it's much more predictable. 249 | 250 | If you're enough of a \tex{}nician to know about catcodes, you'll be happy to 251 | know that ©tex.print© and its variants give you nearly full control over the 252 | catcodes used for tokenizing the argument, since you can specify a catcode 253 | table as the first argument. You'll probably want to learn about catcode 254 | tables (currently~2.7.6 in the \luatex manual) before you're fully happy. If 255 | you don't know about catcodes, just skip this paragraph.\footnote{Erf, too 256 | late, you already read it.} 257 | 258 | \medskip 259 | 260 | Let's look at ©\directlua© now. To get an idea about how it works, imagine that 261 | it's a ©\write© command, but it writes only to a virtual file and immediately 262 | arranges for this file to be fed to the Lua interpreter. On the Lua end, the 263 | consequence is that each argument of a ©\directlua© command has its own scope: 264 | local variables from one will not be visible to the other. (Which is rather 265 | sane, but always good to know.) 266 | 267 | Now, the major gotcha is that before being fed to the Lua interpreter, the 268 | argument is first read and tokenised by \tex, then fully expanded and turned 269 | back into a plain string. Being read by \tex has several consequences. One of 270 | them is that ends-of-lines are turned into spaces, so the Lua interpreter sees 271 | only one (long) line of input. Since Lua is a free-form language, it doesn't 272 | usually matter, but it does if you use comments: 273 | \begin{Verbatim} 274 | \directlua{a_function() 275 | -- a comment 276 | another_function()} 277 | \end{Verbatim} 278 | won't do what you probably expect: ©another_function()© will be seen as part 279 | of the comment (it's only one line, remember). 280 | 281 | Another consequence of being read by \tex is that successive spaces are merged 282 | into one space, and \tex comments are discarded. So, here is a surprisingly 283 | correct version of the previous example. 284 | \begin{Verbatim} 285 | \directlua{a_function() 286 | % a comment 287 | another_function()} 288 | \end{Verbatim} 289 | It is also worth noticing that, since the argument basically is inside a 290 | ©\write©, it's in an expansion-only context. If you don't know what that means, 291 | let me say that expansion issues are mostly what makes \tex programming so 292 | difficult to avoid expanding further on that matter. 293 | 294 | \medskip 295 | 296 | I'm sorry if the last three paragraphs were a bit \tex{}nical in nature but 297 | I thought you had to know. To reward you for staying with me, here is a 298 | debugging trick. Put the following code near the beginning of your document: 299 | \begin{Verbatim} 300 | \newwrite\luadebug 301 | \immediate\openout\luadebug luadebug.lua 302 | \AtEndDocument{\immediate\closeout\luadebug} 303 | \newcommand\directluadebug{\immediate\write\luadebug} 304 | \end{Verbatim} 305 | Then, when you have a hard time understanding why a particular call to 306 | ©\directlua© doesn't do what you expect, replace this instance of the command 307 | with ©\directluadebug©, compile as usual and look in the file 308 | \file{luadebug.lua} to see what the Lua interpreter actually read. 309 | 310 | The \pk{luacode} package provides commands and environments that help to 311 | varying degrees with some of these problems. However, for everything but 312 | trivial pieces of Lua code, it is wiser to use an external file containing 313 | only Lua code defining functions, then load it and use its functions. For 314 | example: 315 | \begin{Verbatim} 316 | \directlua{dofile("my-lua-functions.lua")} 317 | \newcommand*{\greatmacro}[2]{% 318 | \directlua{my_great_function("\luatexluaescapestring{#1}", #2)}} 319 | \end{Verbatim} 320 | The example assumes that ©my_great_function© is defined in 321 | ©my-lua-functions.lua© and takes a string and a number as arguments. Notice 322 | that we carefully use the ©\luatexluaescapestring© primitives on the string 323 | argument to escape any backslash or double-quote it might contain and which 324 | would confuse the Lua parser.\footnote{If you ever used SQL then the concept 325 | of escaping strings is hopefully not new to you.} 326 | 327 | \medskip 328 | 329 | That's all concerning Lua in \tex. If you're wondering why 330 | ©\luatexluaescapestring© has such a long and silly name, you might want to 331 | read the next section. 332 | 333 | \subsection{Other things you should know}\label{things} 334 | 335 | Just in case it isn't obvious, the \luatex manual, \file{luatexref-t.pdf}, is 336 | a great source of information about \luatex and you'll probably want to 337 | consult it at some point (though it is a bit dry and technical). 338 | 339 | It is important to know that the name of the new primitives of \luatex as you 340 | read them in the manual are not the actual names you'll be able to use in 341 | \lualatex. To prevent clashes with existing macro names, all new primitives 342 | have been prefixed with ©\luatex© unless they already start with it, so 343 | ©\luaescapestring© becomes ©\luatexluaescapestring© while ©\luatexversion© 344 | remains ©\luatexversion©. The rationale is detailed in section~\ref{formats}. 345 | 346 | \medskip 347 | 348 | Oh, and by the way, did I mention that \luatex is in beta and version 1.0 is 349 | expected in spring 2014? You can learn more on the roadmap page of 350 | \href{http://luatex.org/}{the \luatex site}. Stable betas are released 351 | regularly and are included in \texlive since 2008 and \miktex since 2.9. 352 | 353 | Not surprisingly, support for \luatex in \latex is shiny new, which means it 354 | may be full of (shiny) bugs, and things may change at any point. You might 355 | want to keep your \tex distribution very up-to-date\footnote{For \texlive, 356 | consider using the complementary 357 | \href{http://tlcontrib.metatex.org/} {tlcontrib} repository.} and also avoid 358 | using \lualatex for critical documents at least for some time. 359 | 360 | As a general rule, this guide documents things as they are at the time it is 361 | written or updated, without keeping track of changes. Hopefully, you'll update 362 | your distribution as a whole so that you always get matching versions of this 363 | guide and the packages, formats and engine it describes. 364 | 365 | \section{Essential packages and practices}\label{essential} 366 | 367 | This section presents the packages you'll probably want to always load as a 368 | user, or that you should absolutely know about as a developer. 369 | 370 | \subsection{User-level} 371 | 372 | \pkdesc{fontspec}{\WSPR}{\xetex, \luatex}{\latex}{% 373 | macros/latex/contrib/fontspec/}[https://github.com/wspr/fontspec/] 374 | Nice interface to font management, well-integrated in to the \latex font 375 | selection scheme. Already presented in the previous section. 376 | 377 | \pkdesc{polyglossia}{\FC \& \AR}{\xetex, \luatex}{\latex}{% 378 | macros/latex/contrib/polyglossia/}[https://github.com/reutenauer/polyglossia/] 379 | A simple and modern replacement for Babel, working in synergy with \pk{fontspec}. 380 | 381 | \subsection{Developer-level} 382 | 383 | \subsubsection{Naming conventions} 384 | 385 | On the \tex end, control sequences starting with ©\luatex© are reserved for 386 | primitives. It is strongly recommended that you do \emph{not} define any such 387 | control sequence, to prevent name clashes with future versions of \luatex. If 388 | you want to emphasize that a macro is specific to \luatex, we recommend that 389 | you use the ©\lua© prefix (without a following ©tex©) instead. It is okay to 390 | use the ©\luatex@© prefix for internal macros, since primitive names never 391 | contain ©@©, but it might be confusing. Moreover, you're already using a 392 | unique prefix for internal macros in all of your packages, aren't you? 393 | 394 | On the Lua end, please keep the global namespace as clean as possible. That 395 | is, use a table ©mypackage© and put all your public functions and objects in 396 | this table. You might want to avoid using Lua's deprecated \code{module()}. 397 | Other strategies for Lua module management are discussed in 398 | \href{http://www.lua.org/pil/15.html} {chapter~15 of \emph{Programming in 399 | Lua}}, and examples are given in \file{luatexbase-modutils.pdf}. Also, it 400 | is a good and necessary practice to use ©local© for your internal variables and 401 | functions. Finally, to avoid clashes with future versions of \luatex, it is 402 | necessary to avoid modifying the namespaces of \luatex's default libraries. 403 | 404 | \subsubsection{Engine and mode detection}\label{detect} 405 | 406 | Various packages allow to detect the engine currently processing the document. 407 | 408 | \pkdesc{ifluatex}{\HO}{all}{\latex, Plain}{% 409 | macros/latex/contrib/oberdiek/} 410 | Provides ©\ifluatex© and makes sure ©\luatexversion© is available. 411 | 412 | \pkdesc{iftex}{\VK}{all}{\latex, Plain}{% 413 | macros/latex/contrib/iftex/}[http://bitbucket.org/vafa/iftex] 414 | Provides ©\ifPDFTeX©, ©\ifXeTeX©, ©\ifLuaTeX© and corresponding ©\Require© 415 | commands. 416 | 417 | \pkdesc{expl3}{The \LaTeX3 Project}{all}{\latex}{% 418 | macros/latex/contrib/expl3/}[http://www.latex-project.org/code.html] 419 | Amongst \emph{many} other things, provides ©\luatex_if_engine:TF©, 420 | ©\xetex_if_engine:TF© and their variants. 421 | 422 | \pkdesc{ifpdf}{\HO}{all}{\latex, Plain}{% 423 | macros/latex/contrib/oberdiek/} 424 | Provides ©\ifpdf© switch. \luatex, like \pdftex, can produce either PDF or DVI 425 | output; the latter is not very useful with \luatex as it doesn't support any 426 | advanced features such as Unicode and modern font formats. The ©\ifpdf© switch 427 | is true if and only if you are running \pdftex or \luatex and generating a PDF 428 | file (note that this doesn't include \xetex, whose support for PDF is 429 | different). 430 | 431 | \subsubsection{Basic resources} 432 | 433 | \pkdesc{luatexbase}{\ER, \MPG \& \PHG}{\luatex}{\latex, Plain}{% 434 | macros/luatex/generic/luatexbase/}[https://github.com/lualatex/luatexbase] 435 | The Plain and \latex formats provide macros to manage basic \tex resources, 436 | such as count or box registers. \luatex introduces new resources that need to 437 | be shared gracefully by packages. This package provides the basic tools to 438 | manage: the extended conventional \tex resources, catcode tables, attributes, 439 | callbacks, Lua modules loading and identification. It also provides basic 440 | tools to handle a few compatibility issues with older versions of \luatex. 441 | 442 | \note{Warning} This package is currently in conflict with the \pk{luatex} 443 | package, since they both do almost the same thing. The respective package 444 | authors are well aware of this situation and plan to somehow merge the two 445 | packages in the near future, though the timeline is not clear. 446 | 447 | \pkdesc{luatex}{\HO}{\luatex}{\latex, Plain}{% 448 | macros/latex/contrib/oberdiek/} 449 | See the description of \pk{luatexbase} above. This package provides the same 450 | core features except for callback management and Lua module identification. 451 | 452 | \pkdesc{lualibs}{\ER \& \PHG}{\luatex}{Lua}{% 453 | macros/luatex/generic/lualibs/}[https://github.com/lualatex/lualibs] 454 | Collection of Lua libraries and additions to the standard libraries; mostly 455 | derived from the \context libraries. If you need a basic function that Lua 456 | doesn't provide, check this package before rolling your own implementation. 457 | 458 | \subsubsection{Font internals}\label{fontint} 459 | 460 | These packages are loaded by \pk{fontspec} to handle some low-level font and 461 | encoding issues. A normal user should only use \pk{fontspec}, but a developer 462 | may need to know about them. 463 | 464 | \pkdesc{luaotfload}{\ER, \KH \& \PHG}{\luatex}{\latex, Plain}{% 465 | macros/luatex/generic/luaotfload/}[https://github.com/lualatex/luaotfload] 466 | Low-level OpenType font loading, adapted from the generic subset of \context. 467 | Basically, it uses the ©fontloader© Lua library and the appropriate callbacks 468 | to implement a syntax for the ©\font© primitive very similar to that of \xetex 469 | and implement the corresponding font features. It also handles a font database 470 | for transparent access to fonts from the system and the \tex distribution 471 | either by family name or by file name, as well as a font cache for faster 472 | loading. 473 | 474 | \pkdesc{euenc}{\WSPR, \ER \& \KH}{\xetex, \luatex}{\latex}{% 475 | macros/latex/contrib/euenc/}[https://github.com/wspr/euenc] 476 | Implements the EUx Unicode font encodings for \latex's \pf{fontenc} system. 477 | Currently, \xelatex is using ©EU1© and \lualatex is using ©EU2©. Includes 478 | definitions (\file{fd} files) for Latin Modern, the default font loaded by 479 | \pk{fontspec}. 480 | 481 | To be precise, \pf{euenc} merely declares the encoding, but 482 | doesn't provide definitions for LICR macros; this is done by loading 483 | \pk{xunicode} with ©\UTFencname© defined to ©EU1© or ©EU2©, which 484 | \pk{fontspec} does. The actual encodings are the same, but it is useful to 485 | have distinct names so that different \file{fd} files can be used according to 486 | the engine (which is actually the case with Latin Modern). 487 | 488 | \section{Other packages}\label{other} 489 | 490 | Note that the packages are not listed in any particular order. 491 | 492 | \subsection{User-level} 493 | 494 | \pkdesc{luatextra}{\ER \& \MPG}{\luatex}{\latex}{% 495 | macros/luatex/latex/luatextra/}[https://github.com/lualatex/luatextra] 496 | Loads usual packages, currently \pk{fontspec}, \pk{luacode}, \pf{metalogo} 497 | (commands for logos, including ©\LuaTeX© and ©\LuaLaTeX©), \pk{luatexbase}, 498 | \pk{lualibs}, \pf{fixltx2e} (fixes and enhancements for the \latex core). 499 | 500 | \pkdesc{luacode}{\MPG}{\luatex}{\latex}{% 501 | macros/luatex/latex/luacode/}[https://github.com/lualatex/luacode] 502 | Provides commands and macros that help including Lua code in a \tex source, 503 | especially concerning special characters. 504 | 505 | \pkdesc{luainputenc}{\ER \& \MPG}{\luatex, \xetex, \pdftex}{\latex}{% 506 | macros/luatex/latex/luainputenc/}[https://github.com/lualatex/luainputenc] 507 | Helps compiling documents relying on legacy encodings (either in the source or 508 | with the fonts). Already presented in the introduction. When running \xetex, 509 | just loads \pf{xetex-inputenc}; under \pdftex, loads the standard 510 | \pf{inputenc}. 511 | 512 | \pkdesc{luamplib}{\HH, \Taco \& \PHG}{\luatex}{\latex, Plain}{% 513 | macros/luatex/generic/luamplib/}[https://github.com/lualatex/luamplib] 514 | Provides a nice interface for the ©mplib© Lua library that embeds metapost in 515 | \luatex. 516 | 517 | \pkdesc{luacolor}{\HO}{\luatex}{\latex}{% 518 | macros/latex/contrib/oberdiek/} 519 | Changes the low-level color implementation to use \luatex attributes in place 520 | of whatsits. This makes the implementation more robust and fixes strange bugs 521 | such as wrong alignment when ©\color© happens at the beginning of a ©\vbox©. 522 | 523 | \subsection{Developer-level} 524 | 525 | \pkdesc{pdftexcmds}{\HO}{\luatex, \pdftex, \xetex}{\latex, Plain}{% 526 | macros/latex/contrib/oberdiek/} 527 | Though \luatex is mostly a superset of \pdftex, a few utility primitives were 528 | removed (those that are sort of superseded by Lua) or renamed. This package 529 | provides them with consistent names across engines, including \xetex which 530 | recently implemented some of these primitives, such as ©\strcmp©. 531 | 532 | \pkdesc{magicnum}{\HO}{\luatex, \pdftex, \xetex}{\latex, Plain}{% 533 | macros/latex/contrib/oberdiek/} 534 | Provides hierarchical access to ``magic numbers'' such as catcodes, group 535 | types, etc.\ used internally by \tex and its successors. Under \luatex, a more 536 | efficient implementation is used and a Lua interface is provided. 537 | 538 | \pkdesc{lua-alt-getopt}{Aleksey Cheusov}{\cmd{texlua}}{command-line}{% 539 | support/lua/lua-alt-getopt}[https://github.com/LuaDist/alt-getopt] 540 | Command-line option parser, mostly compatible with POSIX and GNU getopt, to be 541 | used in command-line Lua scripts such as \cmd{luaotfload-tool} from 542 | \pk{luaotfload}. 543 | 544 | \section{The \cmd{luatex} and \cmd{lualatex} formats}\label{formats} 545 | 546 | This section is for developers and curious users only; normal users can safely 547 | skip it. The following information applies to \texlive 2010, and most likely to 548 | \miktex 2.9 too, though I didn't actually check. Earlier versions of \texlive 549 | had slightly different and less complete arrangements. 550 | 551 | \para{Primitive names} 552 | As mentioned in section~\ref{things}, the names of the \luatex-specific 553 | primitives are not the same in the \cmd{lualatex} format as in the \luatex 554 | manual. In the \cmd{luatex} format (that is, \luatex with the Plain format), 555 | primitives are available with their natural name, but also with the prefixed 556 | name, in order to ease development of generic packages. 557 | 558 | The rationale, copy-pasted from the file \file{lualatexiniconfig.tex} that 559 | implements this for the \cmd{lualatex} format, is: 560 | 561 | \begin{myquote} 562 | \begin{enumerate} 563 | \item All current macro packages run smoothly on top of pdf(e)TeX, so 564 | those primitives are left untouched. 565 | \item Other non-TeX82 primitives in \luatex may cause name clashes with 566 | existing macros in macro packages, especially when they use very 567 | ``natural'' names such as ©\outputbox©, ©\mathstyle© etc. Such a 568 | probability for name clashes is undesirable, since the most existing 569 | LaTeX documents that run without change under \luatex, the better. 570 | \item The \luatex team doesn't want to apply a systematic prefixing policy, 571 | but kindly provided a tool allowing prefixes to be applied. So we chose 572 | to use it. Previously, we even disabled the extra primitives, but now 573 | we feel it's better to enable them with systematic prefixing, in order 574 | to avoid that each and every macro package (or user) enables them with 575 | various and inconsistent prefixes (including the empty prefix). 576 | \item The ©luatex© prefix was chosen since it is already used as a prefix 577 | for some primitives, such as ©\luatexversion©: this way, those 578 | primitives don't end up with a double prefix (for details, see 579 | ©tex.enableprimitives© in the \luatex manual). 580 | \item The ©\directlua© primitive is provided both with its natural name 581 | (allowing easy detection of \luatex) and a prefixed version 582 | ©\luatexdirectlua© (for consistency with ©\luatexlatelua©). 583 | \item Various remarks: 584 | \begin{itemize} 585 | \item The obvious drawback of such a prefixing policy is that the 586 | names used by \latex or generic macro writer won't match the names 587 | used in the manual. We hope this is compensated by the gain in 588 | backwards compatibility. 589 | \item All primitives dealing with Unicode math already begin with ©\U©, 590 | and maybe will match the names of \xetex primitives some day, so 591 | maybe prefixing was not necessary/desirable for them. However, we 592 | tried to make the prefixing rule as simple as possible, so that 593 | the previous point doesn't get even worse. 594 | \item Maybe some day we'll feel it's better to provide all primitives 595 | without prefixing. If this happens, it will be easy to add the 596 | unprefixed primitives in the format while keeping the prefixed names 597 | for compatibility. It wouldn't work the other way round; i.e., 598 | belatedly realizing that we should not provide the unprefixed 599 | primitives would then break any \luatex-specific macro packages 600 | that had been written. 601 | \end{itemize} 602 | \end{enumerate} 603 | \end{myquote} 604 | 605 | \para{\cs{jobname}}[jobname] 606 | The \latex kernel (and a lot of packages) use constructs like 607 | ©\input\jobname.aux© for various purposes. When ©\jobname© contains spaces, 608 | this doesn't do the right thing, since the argument of ©\input© ends at the 609 | first space. To work around this, \pdftex automagically quotes ©\jobname© when 610 | needed, but \luatex doesn't for some reason. A nearly complete workaround is 611 | included in \latex-based (as opposed to Plain-based) \luatex formats. 612 | 613 | It doesn't work, however, if \luatex is invoked as ©lualatex '\input name'©, 614 | as opposed to the more usual ©lualatex name©. To work around this 615 | limitation of the workaround included in the format, specifying a jobname 616 | explicitly, as in ©lualatex jobname=name '\input name'©. Or even better, just 617 | don't use spaces in the names of your \tex files. 618 | 619 | For more details, see 620 | \href{http://www.ntg.nl/pipermail/dev-luatex/2009-April/002549.html}{this old 621 | thread} and 622 | \href{http://tug.org/pipermail/luatex/2010-August/001986.html}{this newer one} 623 | on the \luatex mailing lists, and \file{lualatexquotejobname.tex} for the 624 | implementation of the workaround. 625 | 626 | \para{hyphenation} 627 | \luatex offers dynamic loading of hyphenation patterns. The support for this in 628 | \pf{babel} and \pf{polyglossia} appeared only in \texlive 2013, but should 629 | work well since then. 630 | 631 | Documentation and implementation details are included in 632 | \file{luatex-hyphen.pdf}. The sources are part of the 633 | \href{http://tug.org/tex-hyphen/}{texhyphen project}. 634 | 635 | \para{codes} 636 | The engine itself does not set ©\catcode©s, ©\lccode©s, etc. for non-ASCII 637 | characters. Correct ©\lccode©s in particular are essential for hyphenation to 638 | work. Formats for \luatex now include \file{luatex-unicode-letters.tex}, a 639 | modified version of \file{unicode-letters.tex} from the \xetex distribution, 640 | that takes care of settings these values in accordance with the Unicode 641 | standard. 642 | 643 | This was added after \texlive 2010 went out, so you are strongly advised to 644 | update your installation if you want to enjoy proper hyphenation for non-ASCII 645 | text. 646 | 647 | \section{Things that just work, partially work, or don't work (yet)} 648 | \label{workornot} 649 | 650 | \subsection{Just working}\label{working} 651 | 652 | \para{Unicode} 653 | Conventional \latex offers some level of support for UTF-8 in input files. 654 | However, at a low level, non-ASCII characters are not atomic in this case: 655 | they consist of several elementary pieces (known as \emph{tokens} to 656 | \tex{}nicians). Hence, some packages that scan text character by character or 657 | do other atomic operations on characters (such as changing their catcodes) 658 | often have problems with UTF-8 in conventional \latex. For example, you can't 659 | use any non-ASCII character for short verbatim with \pf{fancyvrb}, etc. 660 | 661 | The good news is, with \lualatex, some of these package's features start 662 | working on arbitrary Unicode characters without needing to modify the package. 663 | The bad news is, this isn't always true. See the next section for details. 664 | 665 | \subsection{Partially working}\label{partial} 666 | 667 | \para{microtype} 668 | Package \pf{microtype} has limited support for \luatex: more precisely, as of 669 | version 2.5 2013/03/13, protrusion and expansion are available and activated 670 | by default in PDF mode, but kerning, spacing and tracking are not supported 671 | (see table~1 in section~3.1 of \file{microtype.pdf}). 672 | 673 | On the other hand, \pk{luaotfload}, loaded by \pk{fontspec}, supports a lot of 674 | microtypographic features. So the only problem is the lack of a unified 675 | interface. 676 | 677 | \para{xunicode} 678 | Package \pf{xunicode}'s main feature is to ensure that the usual control 679 | sequences for non-ASCII characters (such as ©\'e©) do the right thing in a 680 | Unicode context. It could \emph{probably} work with \luatex, but explicitly 681 | checks for \xetex only. However, \pk{fontspec} uses a trick to load it anyway. 682 | So, you can't load it explicitly, but you don't need to, since \pk{fontspec} 683 | already took care of it. 684 | 685 | \para{encodings} 686 | As mentioned in the above section, a few things that were problematic with 687 | UTF-8 on conventional \latex spontaneously work, but not always. For example, 688 | with the \pf{listings} package on \lualatex, you may use only characters below 689 | 256 (that is, characters from the Latin-1 set), inside your listings (but of 690 | course the full Unicode range is still available in the rest of your 691 | document). 692 | 693 | \para{metrics} 694 | This item isn't exactly about working or not working, but rather about not 695 | working in exactly the same way as \pdftex or \xetex: you may observe minor 696 | differences in the layout and hyphenation of your text. 697 | 698 | They may be due variations between two versions of the same font used by the 699 | various engines, adjustments made to the hyphenation, ligaturing or kerning 700 | algorithms (or example, the first word of a paragraph, as well as words 701 | containing different fonts, can now be hyphenated), or differences in the 702 | hyphenation patterns used for this language (the patterns used by \pdftex are 703 | basically frozen, but \luatex and \xetex use newer versions for some languages). 704 | 705 | If you ever observe a major difference between pdf\latex and \lualatex with 706 | the same fonts, it is not at all unlikely that a bug in \luatex\footnote{For 707 | example, \luatex 0.60 had a bug that prevented any hyphenation after a 708 | \code{-{}-{}-} ligature until the end of the paragraph.} or in the font is 709 | involved. As usual, make sure your distribution is up-to-date before reporting 710 | such a problem. 711 | 712 | \para{babel} 713 | Mostly working without problems for languages based on Latin script. 714 | For other languages, your mileage may vary. Even for Latin languages, 715 | encoding-related problems my happen. 716 | 717 | \para{polyglossia} 718 | A more modern, but less complete, package for multilingual support, 719 | \pf{polyglossia}, is also available and should be preferred, though it does 720 | not support all \pf{babel} features yet. 721 | 722 | \subsection{Not working (yet)}\label{notworking} 723 | 724 | \para{old encodings}[oldenco] Packages playing with input (source files) or 725 | output (fonts) encodings are very likely to break with \luatex. This includes 726 | \pf{inputenc}, \pf{fontenc}, \pf{textcomp}, and probably most classical font 727 | packages such as \pf{mathptmx} or \pf{fourier}. The good news 728 | is, Unicode is a more powerful way to handle encoding problems that old 729 | packages were trying to solve, so you most likely don't need these packages 730 | anyway. However, not everything is already ported to the shiny new world of 731 | Unicode, so you may have a more limited (or just different) set of choices 732 | available for some time (this is especially true for fonts). 733 | 734 | \para{spaces} Spaces in file names are not really well supported in the \tex 735 | world in general. This doesn't really get better with \luatex. Also, due to 736 | tricky reasons, things may be worse if you have spaces in the name of your main 737 | \tex file \emph{and} don't invoke \luatex in the usual way. If you do 738 | invoke it in the usual way, everything should work, and I won't tell you what 739 | the unusual invocation looks like. Otherwise, read the point about 740 | \pararef{jobname} in section~\ref{formats} for a workaround and technical 741 | details. Or even better, don't use spaces in the names of your \tex files. 742 | 743 | \section{Contributors}\label{folks} 744 | 745 | This document was authored by Manuel Pégourié-Gonnard in 2010. 746 | 747 | Since then, numerous people have contributed patches and extended the 748 | text. Since some of their work made was committed into the source 749 | repository by others, the following list of contributors might be a few 750 | names short. 751 | 752 | \begin{itemize} 753 | \item Elie Roux \email{elie.roux@telecom-bretagne.eu} 754 | \item Ondřej Hošek \email{ondra.hosek@gmail.com} 755 | \item Patrick Gundlach \email{gundlach@speedata.de} 756 | \item Philipp Gesang \email{phg@phi-gamma.net} 757 | \end{itemize} 758 | 759 | %% [\section{Contributors}] 760 | 761 | 762 | 763 | \end{document} 764 | 765 | % vim: spell spelllang=en 766 | --------------------------------------------------------------------------------