% % \iffalse meta-comment % % Copyright 2016-2017 Brian Dunn % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of LaTeX % version 2005/12/01 or later. % % \fi % % \iffalse %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %\ProvidesPackage{lwarp} % [2017/08/19 v0.37 Allows LaTeX to directly produce HTML5 output.] % %<*driver> \documentclass{ltxdoc} \usepackage{lmodern} % \usepackage{libertine} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{textcomp} % provides \degree, \textquotesingle, \textmu \usepackage{newunicodechar} \newunicodechar{ff}{ff} \newunicodechar{fi}{fi} \newunicodechar{fl}{fl} \newunicodechar{ffi}{ffi} \newunicodechar{ffl}{ffl} % \newunicodechar{°}{\degree} \newunicodechar{ρ}{\ensuremath{\rho}} \newunicodechar{⨯}{\texttimes} \newunicodechar{⁄}{\textfractionsolidus} % \newunicodechar{®}{\textregistered} % \newunicodechar{©}{\textcopyright} \newunicodechar{—}{---} \newunicodechar{–}{--} % \newunicodechar{”}{''} % \newunicodechar{“}{``} % \newunicodechar{§}{\S} % \newunicodechar{¶}{\P} % \newunicodechar{†}{\dag} \newunicodechar{‡}{\ddag} \newunicodechar{Á}{\'{A}} \newunicodechar{è}{\`{e}} \newunicodechar{ø}{\o{}} \newunicodechar{Æ}{\AE{}} \newunicodechar{â}{\^{a}} \newunicodechar{ô}{\^{o}} \newunicodechar{Ô}{\^{O}} \newunicodechar{ê}{\^{e}} \newunicodechar{Ω}{\textohm} \newunicodechar{μ}{\textmu} \usepackage[log-declarations=false]{xparse} \usepackage[lwarpmk]{lwarp} \usepackage{needspace} \usepackage[svgnames]{xcolor} \definecolor{myurlcolor}{rgb}{0,0,.7} \definecolor{mylinkcolor}{rgb}{.7,0,0} \definecolor{codecolor}{rgb}{0,.4,.2} \definecolor{overviewcolor}{rgb}{0,.2,.4} \usepackage{graphicx} \graphicspath{{images/}} \usepackage{enumitem} \usepackage{array} \usepackage{longtable} \usepackage{booktabs} \usepackage[normalem]{ulem} \usepackage{fancyvrb} \usepackage{capt-of} \usepackage{comment} \excludecomment{testing} % \usepackage{morefloats} % \usepackage{marginfix} \usepackage{tocloft} \renewcommand{\cftpartfont}{\Large\bfseries} \setlength{\cftsecnumwidth}{2.5em} \setlength{\cftsubsecnumwidth}{3em} \setlength{\cftsubsubsecindent}{2.8em} \setlength{\cftsubsubsecnumwidth}{4em} \usepackage{titleps} \newpagestyle{pageheadfoot}{ \headrule \sethead{\pkg{lwarp}}{}{\thepage} % \renewcommand{\makefootrule}{\rule[2.5ex]{\linewidth}{.4pt}} \setfoot{}{}{} } \pagestyle{pageheadfoot} \usepackage{dtxdescribe} \newcommand{\ItemDescribeMacro}[1]{% \item[\cmd{#1}:]% \setlength{\parskip}{1.5ex}% \DescribeMacro{#1}% } \newcommand{\ItemDescribeEnv}[1]{% \item[\env{#1}:]% \setlength{\parskip}{1.5ex}% \DescribeEnv{#1}% } \newcommand{\ItemDescribeOption}[1]{% \item[\texttt{#1}:]% \setlength{\parskip}{1.5ex}% \DescribeOption{#1}% } \newcommand{\ItemDescribeCounter}[1]{% \item[\texttt{#1}:]% \setlength{\parskip}{1.5ex}% \DescribeCounter{#1}% } \newcommand{\ItemDescribeBoolean}[1]{% \item[\texttt{#1}:]% \setlength{\parskip}{1.5ex}% \DescribeBoolean{#1}% } \usepackage{microtype} \usepackage[all,defaultlines=2]{nowidow} \usepackage[pdftex,bookmarks=true,hidelinks,% colorlinks,linkcolor=mylinkcolor,urlcolor=myurlcolor,% pageanchor=true,hyperindex=true,hyperfootnotes=false% ]{hyperref} \hypersetup{% pdfinfo={% Title={LaTeX lwarp package},% Author={Brian Dunn},% Subject={LaTeX to HTML conversion},% Keywords={LaTeX, HTML, conversion}% }} \usepackage{cleveref} \renewcommand{\partname}{Package} \renewcommand*{\thepart}{\arabic{part}} \newcommand{\lmacro}[1]{\textbackslash#1} \newcommand{\cmds}[1]{\texttt{#1}} \newcommand{\env}[1]{\texttt{#1}} \newcommand{\pkg}[1]{\textsf{#1}} \newcommand{\acro}[1]{\textsc{\lowercase{#1}}} \newcommand{\element}[1]{\texttt{<#1>}} \newcommand{\attribute}[1]{\texttt{#1}} \newcommand{\TOC}{\acro{TOC}} \newcommand{\LOF}{\acro{LOF}} \newcommand{\LOT}{\acro{LOT}} \newcommand{\HTML}{\acro{HTML}} \newcommand{\HTMLfive}{\HTML\oldstylenums{5}} \newcommand{\CSS}{\acro{CSS}} \newcommand{\CSSthree}{\CSS\oldstylenums{3}} \newcommand{\EPUB}{\acro{EPUB}} \newcommand{\SVG}{\acro{SVG}} \newcommand{\PNG}{\acro{PNG}} \newcommand{\JPG}{\acro{JPG}} \newcommand{\PDF}{\acro{PDF}} \newcommand{\tikz}{Ti\textit{k}z} \newcommand{\MathML}{Math\acro{ML}} \newcommand{\CTAN}{\acro{CTAN}} \newcommand{\TDS}{\acro{TDS}} \newcommand{\goesto}{$\Rightarrow$} \newcommand{\credits}[1]{{\footnotesize(\textit{Based on original code by} \textsc{#1}.)}} \newcommand{\codehtml}{\leavevmode\marginpar{\footnotesize\raggedleft\textcolor{codecolor}{\textbf{for HTML output:~}}}\vspace{-5.25ex}} \newcommand{\codeprint}{\leavevmode\marginpar{\footnotesize\raggedleft\textcolor{codecolor}{\textbf{for PRINT output:~}}}\vspace{-5.25ex}} \newcommand{\codeall}{\leavevmode\marginpar{\footnotesize\raggedleft\textcolor{codecolor}{\textbf{for HTML \& PRINT:~}}}\vspace{-5.25ex}} \newcommand{\userentry}[1]{% \leavevmode\smallskip\newline \hspace*{2em}\begin{minipage}{\linewidth-2em} {\footnotesize Enter~$\Rightarrow$}\quad\texttt{#1} \end{minipage} \unskip\smallskip } \newenvironment{sourcedisplay} { \leavevmode\smallskip\newline \hspace*{2em}\minipage{\linewidth-2em} \ttfamily } { \endminipage \unskip\smallskip } \newenvironment{UIdisplay} { \leavevmode\smallskip\newline \hspace*{2em}\minipage{\linewidth-2em} \sffamily } { \endminipage \unskip\smallskip } \newenvironment{docsidebar}[1][] {% \ifthenelse{\isempty{#1}}{}{\medskip}% \hfill\minipage{.9\linewidth}% \setlength{\parskip}{1.5ex}% \ifthenelse{\isempty{#1}}{}{\textit{#1}}% \leavevmode\smallskip\hrule% } {\smallskip\hrule\endminipage\hspace*{\fill}\bigskip} % \makeatletter % \newcommand{\watchout}[1][]{% % \@bsphack% % \marginpar{\raggedleft\textcolor{blue!70!black}{#1} \quad \includegraphics[height=3ex]{symbol_warning.pdf}} % \@esphack% % } % \makeatother \newcommand{\pdflatexonly}{ \textcolor{red}{Only pre-loaded if \texttt{pdflatex} is being used.} \marginpar{\raggedleft\textcolor{blue!70!black}{\texttt{pdflatex} only:}} } % \newcommand{\margintag}[1]{% % \marginpar{\raggedleft\textcolor{blue!70!black}{#1}}% % } % The following text is used in multiple places in the documentation: \newcommand{\documentationnotes}{ The following sections document the actual implementation of the \pkg{lwarp} package. The small numbers at the left end of a line refer to line numbers \margintag{line numbers} in the \texttt{lwarp.sty} file. Blue-colored tags in the left margin \margintag{subjects} aid in quickly identifying the subject of each paragraph. Black-colored tags in the left marign are used to \margintag{objects} identify programming objects such as files, packages, environments, booleans, and counters. Items without a tag are command macros. Each of these also appears in the index as \margintag{index entries} individual entries, and are also listed together under ``files'', ``packages'', ``environments'', ``booleans'', and ``counters''. Special warnings are marked with a warning icon. \watchout[warnings] \codehtml\vspace*{5.25ex}\ignorespaces \codeprint\vspace*{5.25ex}\ignorespaces \codeall\vspace*{5.25ex}\ignorespaces Green-colored tags in the left margin show which sections of source code apply to the generation of \HTML, print, or both forms of output. } \newcommand{\limitspageref}{\pkg{cleveref} and \pkg{varioref} are supported, but printed page numbers do not map to \HTML, so a section name or a text phrase are used instead. See \cref{sec:successfulcommands} to redefine the message which is printed for page number references. } \newcommand{\limitshyperlinks}{% \pkg{lwarp} emulates \pkg{hyperref}, including the creation of active hyperlinks, but does not require that \pkg{hyperref} be loaded by the document. \pkg{lwarp} can also load \pkg{url}, but \pkg{url} should not be used at the same time as \pkg{hyperref}, since they both define the \cs{url} command. \pkg{lwarp} does not (yet) attempt to convert \pkg{url} links into hyperlinks during \HTML\ output, nor does \pkg{url} create hyperlinks during print output. } \newcommand{\limitsabstract}{% \pkg{abstract} is supported. If using the \texttt{number} option with file splits, be sure to place the table of contents before the abstract. The number option causes a section break which may cause a file split, which would put a table of contents out of the home page if it is after the abstract. } \newcommand{\limitstext}{\cs{textbf}, etc.\ are supported, but \cs{bfseries}, etc.\ are not yet supported.} \newcommand{\limitshspace}{% \DescribeMacro{\hspace}% \index{space>horizontal}% \index{horizontal space}% \cs{hspace} is converted to an inline \HTML\ span of the given width, except that \texttt{0} width is ignored, a width of \texttt{.16667em} is converted to an \HTML\ thin breakable space (\texttt{U+2009}), and a \cs{fill} is converted to a \cs{qquad}. \index{\texttt{\textasciitilde}}% \DescribeMacro{\,}% \texttt{\~} and \cs{,} are converted to \HTML\ entities. \DescribeMacro{\kern}% \DescribeMacro{\hskip}% \cs{kern} and \cs{hskip} are treated as a single normal space. } \newcommand{\limitstextcomp}{% Many \pkg{textcomp} symbols are not supported by many fonts. \watchout[Missing symbols] Try using more complete fonts in the \CSS, but expect to see gaps in coverage. } \newcommand{\limitsaccents}{% Native \LaTeX\ accents such as \cs{"} will work, but many more kinds of accents are available when using Unicode-aware \XeLaTeX\ and \LuaLaTeX. } \newcommand{\limitsreferences}{% \cs{nameref} refers to the most recently-used section where the \cs{label} was defined. If no section has been defined before the \cs{label}, the link will be empty. Index entries also use \cs{nameref} and have the same limitation. } \newcommand{\limitsfootnotes}{ \pkg{lwarp} uses native \LaTeX\ footnote code, although with its own \cs{box} to avoid the \LaTeX\ output routine. The usual functions work as-is. } \newcommand{\limitsverse}{% \DescribeMacro{\attrib} The documentation for the \pkg{verse} and \pkg{memoir} packages suggest defining an \cs{attrib} command, which may already exist in current documents, but it will only work for print output. \pkg{lwarp} provides \cs{attribution}, which works for both print and \HTML\ output. To combine the two so that \cs{attrib} is used for print and \cs{attribution} is used for \HTML: \begin{docsidebar} \raggedright \ttfamily \cs{begin}\{warpHTML\} \cs{let}\cs{attrib}\cs{attribution} \cs{end}\{warpHTML\} \end{docsidebar} \DescribeLength{vleftskip} \DescribeLength{vleftmargini} These lengths are used by \pkg{verse} and \pkg{memoir} to control the left margin, and they may already be set by the user for print output. New lengths \DescribeLength{HTMLvleftskip}\DescribeLength{HTMLleftmargini} \cs{HTMLvleftskip} and \cs{HTMLleftmargini} are provided to control the margins in \HTML\ output. These new lengths may be set by the user before any \env{verse} environment, and persist until they are manually changed again. One reason to change \cs{HTMLleftmargini} is if there is a wide \cs{flagverse} in use, such as the word ``Chorus'', in which case the value of \cs{HTMLleftmargini} should be set to a wide enough length to contain ``Chorus''. The default is wide enough for a stanza number. Horizontal spacing relies on \texttt{pdftotext}'s ability to discern the layout (\texttt{-layout} option) of the text in the \HTML-tagged \PDF\ output. For some settings of \cs{HTMLleftmargini} or \cs{HTMLleftskip} the horizontal alignment may not work out exactly, in which case a label may be shifted by one space. } \newcommand{\limitslateximagefontsize}{% The size of the math and text used \margintag{SVG image font size} in the \SVG\ image may be adjusted \index{font>size --- lateximage}% \index{font>size --- math, SVG}% \index{math>font size --- SVG}% \index{lateximages>font size}% by setting \cs{LateximageFontSizeName} to a font size name --- \emph{without the backslash}, for ex: \\ \hspace*{.5in}\texttt{\cs{renewcommand}\{\cs{LateximageFontSizeName}\}\{\textcolor{red}{large}\}} } \newcommand{\limitsmath}{% \limitsntheoremnumbering Math may be rendered \margintag{Math rendering} as \SVG\ graphics or using the \textsc{MathJax} JavaScript display engine. \index{JavaScript>MathJax} For \SVG\ math, \margintag{SVG math option} math is rendered as usual by \LaTeX{} into the initial \PDF\ file using the \index{math>SVG summary}% \index{SVG>math summary}% current font\footnote{See \cref{sec:xfrac} regarding fonts and fractions.}, then is captured from the \PDF\ and converted to \SVG\ graphics via a number of utility programs. The \SVG\ format is a scalable-vector web format, so math may be typeset by \LaTeX{} with its fine control and precision, then displayed or printed at any size, depending on (sometimes broken) browser support. An \HTML\ \attribute{alt} attribute carries the \LaTeX{} code which generated the math, allowing copy/paste of the \LaTeX{} math expression into other documents. \limitslateximagefontsize As currently implemented, \margintag{SVG files} each instance of math creates a new \SVG\ file. In text with many references to math variables, this can result in a large number of files with duplicate content. In the future, some method of content-based naming and checksumming may be used to remove the need for duplicate files. Another approach would be \margintag{SVG inline} to in-line the \SVG\ files directly into the \HTML. This avoids having a large number of files and potentially speeds loading the images, but dis-allows the possibility of sharing one file among many instances without user intervention. Others have used \PNG\ files, \margintag{PNG files} sometimes pre-scaled for print resolution but displayed on-screen at a scaled down size. This allows high-quality print output at the expense of larger files, but \SVG\ files are also larger as well. Conversion to \MathML\ might be a better approach, \margintag{MathML} among other things allowing a more compact representation of math than \SVG\ drawings. Problems with \MathML\ include limited browser support and some issues with the fine control of the appearance of the result. Also see \cref{sec:epub} regarding \EPUB\ output with MathJax. The popular MathJax alternative (\url{mathjax.org}) may be used to display math. \margintag{MathJax math option} \DescribeProgram{MathJax} \index{math>MathJax summary} \index{MathJax>summary} When MathJax is enabled, math is rendered twice: \begin{enumerate} \item As regular \LaTeX\ \PDF\ output placed inside an \HTML\ comment, allowing equation numbering and cross referencing to be almost entirely under the control of \LaTeX, and \item As detokenized printed \LaTeX{} commands placed directly into the \HTML\ output for interpretation by the MathJax display scripts. An additional script is used to pre-set the equation number format and value according to the current \LaTeX\ values, and the MathJax cross-referencing system is ignored in favor of the \LaTeX\ internal system, seamlessly integrating with the rest of the \LaTeX\ code. \end{enumerate} Limitations when using MathJax include: \margintag{MathJax limitations} \DescribeProgram{MathJax} \begin{itemize} \item In document classes which have chapters, \margintag{chapter numbers}% \index{MathJax>tagged equations}% \index{tagged equations>Mathjax}% \cs{tag}ged equations have the chapter number prepended in \HTML\ output, unlike \LaTeX. \cs{tag*} equations (correctly) do not. This may be improved with future versions of the MathJax support script. \href{https://groups.google.com/forum/\#!topic/mathjax-users/jUtewUcE2bY} {\texttt{https://groups.google.com/forum/\#!topic/\\ \hspace*{2em}mathjax-users/jUtewUcE2bY}} \item MathJax itself does not support subequations. \margintag{subequations} \index{MathJax>subequations}% \index{subequations>MathJax}% This may be improved by parsing the \LaTeX{} math expression to manually insert tags, but this has not yet been done. \item Footnotes inside equations are not yet supported while using MathJax. \margintag{footnotes in math} \item Math appearing inside a lateximage, \margintag{lateximage} and therefore also inside a \tikz{} or \env{picture} environment, is rendered as SVG math even if MathJax is used in the rest of the document. \item Usage of \pkg{siunitx} inside a math equation \margintag{siunitx} is supported via a third-party MathJax extension. While inside a math expression, do not use \cs{SI} or \cs{si} inside \cs{text}, where it will be rendered as normal text. \watchout[siunitx inside an equation] \href{https://github.com/mathjax/MathJax-third-party-extensions/tree/master/siunitx} {\texttt{https://github.com/mathjax/MathJax-third-party-extensions/\\ \hspace*{2em}tree/master/siunitx}} \item MathJax does not automatically support custom \LaTeX{} macros, \margintag{\LaTeX{} macros} but they may be set up by the user. \end{itemize} } \newcommand{\limitsntheorem}{% This conversion is not total. \watchout[Font control] Font control is via \CSS, and the custom \LaTeX\ font settings are ignored. \limitsntheoremnumbering } \newcommand{\limitsntheoremnumbering}{% \pkg{ntheorem} has a bug with equation numbering in \AmS\ environments% \watchout[Equation numbering]% \index{equation>miss-numbered}% \index{split>miss-numbered}% \index{AMSmath>split miss-numbered} when the option \texttt{thref} is used. \pkg{lwarp} does not share this bug, so equations with \cs{split}, etc, are numbered correctly with \pkg{lwarp}'s \HTML\ output, but not with the print output. It is recommended to use \pkg{cleveref} instead of \pkg{ntheorem}'s \texttt{thref} option. } \newcommand{\limitsgraphics}{% If using the older \pkg{graphics} syntax, use both optional arguments \watchout[\pkg{graphics} vs. \pkg{graphicx}] for \cs{includegraphics}. A single optional parameter is interpreted as the newer \pkg{graphicx} syntax. Note that viewports are not supported by \pkg{warp}; \watchout[viewports] the entire image will be shown. \cs{graphicspath} only works for a single directory; \watchout[\cs{graphicspath}] all graphics must be in this directory. For \cs{includegraphics}, avoid \texttt{px} and \% units for width and height, or \margintag{units} enclose them inside \env{warpHTML} environments. For font-proportional image sizes, use \texttt{ex} or \texttt{em}. For fixed-sized images, use \texttt{cm}, \texttt{mm}, \texttt{in}, \texttt{pt}, or \texttt{pc}. Using the keys \cmds{width=.5\lmacro{linewidth}}, or similar for \cmds{\lmacro{textwidth}} or \cmds{\lmacro{textheight}} to give fixed-sized images proportional to a 6 by 9 inch text area. \cs{includegraphics} accepts \texttt{width} and \texttt{height}, \margintag{options} \texttt{origin}, \texttt{rotate} and \texttt{scale}, plus a new \texttt{class} key. With \HTML\ output, \cs{includegraphics} accepts an optional \margintag{\HTML\ class} \texttt{class=xyz} keyval combination, and if this is given then the \HTML\ output will include that class for the image. The class is ignored for print output. For \cs{includegraphics} the user should provide both \texttt{.pdf} and \texttt{.svg} images, but always refer to \watchout[image file types] \texttt{.pdf} images in the document source. All \cs{includegraphics} references to \texttt{.pdf} will automatically be changed to \texttt{.svg} for \HTML\ output, and will be left as \texttt{.pdf} for print output. Images may also be \texttt{.jpg} and \texttt{.png}, and will be used as-is for either output. \cs{rotatebox} accepts the optional \texttt{origin} key. \margintag{\cs{rotatebox}} \cs{rotatebox}, \cs{scalebox}, and \cs{reflectbox} depend on modern browser support. \watchout[browser support] The \CSSthree\ standard declares that when an object is transformed the whitespace which they occupied is preserved, unlike \LaTeX{}, so expect some ugly results for scaling and rotating. } \newcommand{\limitssvgimages}{% When a math expression, \texttt{picture}, or \tikz\ environment is added or \watchout[Adding/removing] removed, the \SVG\ images must be re-created with \texttt{lwarpmk limages} to maintain the proper image file sequence numbers. If \HTML\ appears where an \SVG\ image should be,\watchout[\HTML\ instead of images]% \index{math>showing as HTML}% \index{images>showing as HTML}% \index{SVG>images showing as HTML}% \index{HTML>in place of SVG images} recompile the document one more time to get the page numbers back in sync, then remake the images one more time. Expressing math as \SVG\ images has the advantage of representing the math exactly as \LaTeX\ would, but has the disadvantage of requiring an individual file for each math expression. \watchout[Lots of files!] There is no attempt at reusing the same file each time the same expression occurs, so each time \texttt{\$x\$} is used, for example, yet another file is created. For a document with a large amount of math, see \cref{sec:tutorialmathjax} to use MathJax instead. } \newcommand{\limitsxcolor}{% \cs{colorboxBlock} and \cs{fcolorboxBlock} are provided for \margintag{\cs{colorboxBlock} and \cs{fcolorboxBlock}} increased \HTML\ compatibility, and they are identical to \cs{colorbox} and \cs{fcolorbox} in print mode. In \HTML\ mode they place their contents into a \element{div} instead of a \element{span}. These \element{div}s are set to \attribute{display:~inline-block} so adjacent \cs{colorboxBlock}s appear side-by-side in \HTML, although text is placed before or after each. Print-mode definitions for \cs{colorboxBlock} and \cs{fcolorboxBlock} are created by \pkg{lwarp}'s core if \pkg{xcolor} is loaded. \cs{fcolorbox} and \cs{fcolorboxBlock} allow a background color of \texttt{none}, \margintag{background: \texttt{none}} in which case only the frame is drawn, which can be useful for \HTML. Color definitions, models, and mixing are fully supported \margintag{color support} without any changes required. Colored tables are ignored so far. Use \CSS\ to style tables. \margintag{tables} \cs{textcolor}, \cs{colorbox}, and \cs{fcolorbox} are supported. \margintag{colored text and boxes} \cs{color} and \cs{pagecolor} are ignored. Use \CSS\ or \cs{textcolor} where possible. \margintag{\cs{color} and \cs{pagecolor}} } \newcommand{\limitstabular}{% \begin{itemize} \item When defining environments or macros which include \env{tabular} plus\watchout[misplaced alignment alignment tab character \&] \index{alignment tab character \&, misplaced} \index{misplaced alignment tab character \&} instances of the \texttt{\&} character, it may be necessary to make \texttt{\&} active before the environment or macro is defined, then restore \texttt{\&} to its default catcode after, using the following commands: \begin{sourcedisplay} \cs{StartDefiningTabulars} \\ \\ \cs{EndDefiningTabulars} \end{sourcedisplay} \item Vertical rules are not yet supported. \margintag{column types} \item \texttt{*} in a column specification is not used (so far). Repeat the column type the correct number of times. \item Only one each of \texttt{@}, \texttt{!}, \texttt{>}, and \texttt{<} may be used at each column, and they are used in that order. \item \cs{newcolumntype} is ignored; unknown column types are set to \texttt{l}. \item \pkg{tabularx} ignores the width, but \texttt{X} columns do produce paragraph columns or multicolumns. \item Multirow and multicolumn cannot be used at the same time. \watchout[\cs{multirow} \& \cs{multicolumn}] (No rectangular holes wider than one column or taller than one row.) \item For multirow, insert \cs{mrowcell} into any empty multi-row cells. This will be a null function for the print output, and is a placeholder for \watchout[\cs{multirow}] parsing the table for \HTML\ output. \item If a multirow reaches to the bottom of a table, and \cs{bottomrule} does not go over to that edge, \margintag{\cs{multirow} with rules} try adding a line of empty cells below the \cs{bottomrule}. This may be a browser bug. \changes{v0.19}{2016/05/28}{Docs: \env{multirow} browser bug workaround.} \item If a \cs{midrule} is desired after the last row, \margintag{rule at last row} an additional row of blank cells must be used. \item Multiple paragraphs in one cell of a p, b, m column must have \cs{newline} between paragraphs. \watchout[paragraphs] \item \cs{cmidrule} does not support width or trim options due to \CSS\ limitations. \margintag{\cs{cmidrule} width, trim} \item \cs{cmidrule} borders are generated by the individual cells \margintag{\cs{cmidrule} and \cs{multicolumn}} on the following row, and so do not necessarily work correctly when the following row has \cs{multicolumn} cells below \cs{cmidrule} borders. \item For \pkg{longtable}, place headings and footings which \margintag{\env{longtable} headings} do not apply to \HTML\ inside \cs{warpprintonly\{\}}. \item For \cs{toprule} and \cs{bottomrule}, when combined with a \env{warpprint} or \env{warpHTML} environment, \watchout[\cs{warpprintonly}] if a ``misplaced \cs{noalign}'' error occurs, change \\ \hspace*{.375in}\cmds{This \& That \cs{endhead}} \\ to \\ \hspace*{.375in}\cmds{\cs{warpprintonly}\{This \& That \cs{endhead}\}} \\ and likewise with the other \cs{end} headings. Keep the \cs{endfirsthead} row unchanged, as it is still relevent to \HTML\ output. \item For S columns (from the \pkg{siunitx} package), \watchout[S columns] while producing print output, anything non-numeric must be placed inside \{ \} braces, including commands such as \cs{multirow}. While producing \HTML\ output, though, anything placed inside braces is not seen by \pkg{lwarp}'s tabular handling algorithm. To resolve this problem, make a copy of the row, with one version for print output, containing the extra braces, and another version for \HTML\ output, without the extra braces, such as: \\ \hspace*{.375in} \cs{warpprintonly}\{\texttt{1 \& 2 \& \textcolor{red}{\{}\cs{multirow}\{2\}\{2cm\}\{Text\}\textcolor{red}{\}} \& 3 \textbackslash\textbackslash\}} \\ \hspace*{.375in} \cs{warpHTMLonly}\{\texttt{1 \& 2 \& \cs{multirow}\{2\}\{2cm\}\{Text\} \& 3 \textbackslash\textbackslash\}} \end{itemize} } \newcommand{\limitslongtable}{% Longtable \cs{endhead}, \cs{endfoot}, and \cs{endlastfoot} rows are not used for \HTML, and these rows should be disabled. \watchout Use \begin{sourcedisplay} \cs{warpprintonly}\{row contents\} \end{sourcedisplay} instead of \begin{sourcedisplay} \cs{begin}\{warpprint\} \ldots\ \cs{end}\{warpprint\} \end{sourcedisplay} Doing so helps avoid ``Misplaced \cs{noalign}.'' when using \cs{begin}\{warpprint\}. Keep the \cs{endfirsthead} row, which is still relevent to \HTML\ output. \cs{kill} is ignored, place a \cs{kill} line inside \watchout \begin{sourcedisplay} \cs{begin}\{warpprint\} \ldots\ \cs{end}\{warpprint\} \end{sourcedisplay} or place it inside \cs{warpingprintonly}. } \newcommand{\limitssaveboxes}{% \LaTeX\ boxes are placed inline and do not allow line breaks, so boxes with long contents may overflow the line during \HTML\ conversion. This is mostly a problem when the boxes contain objects which themselves hold large \HTML\ tags, such as rotation commands with long contents. When this object overflows the line, some \HTML\ code will be lost and the page will be corrupted. } \newcommand{\limitsminipage}{% A line of text with an inline minipage \watchout[inline] or parbox will have the minipage or parbox placed onto its own line, because a paragraph is a block element and cannot be made \texttt{inline-block}. Minipages and parboxes will be placed side-by-side in \HTML\ \margintag{placement} unless you place a \cs{newline} between them. Side-by-side minipages may be separated by \cs{quad}, \cs{qquad}, \cs{enskip}, \margintag{side-by-side} \cs{hspace}, \cs{hfill}, or a \cs{rule}. When inside a \texttt{center} environment, the result is similar in print and \HTML. Paragraph tags are surpressed between side-by-side minipages and these spacing commands, but not at the start or end of the paragraph. There is limited support for minipages inside an \HTML\ \element{span}. \margintag{in a span} An \HTML\ \element{div} cannot appear inside a \element{span}. While in a \element{span}, minipages, and parboxes, and any enclosed lists have limited \HTML\ tags, resulting in an ``inline'' format, without markup except for \HTML\ breaks. Use \cs{newline} or \cs{par} for an \HTML\ break. When using \cs{linewidth}, \cs{textwidth}, and \cs{textheight}, \margintag{size} widths and heights are scaled proportionally to a 6\texttimes{}9 inch text area. A minipage of width exactly \cs{linewidth} is automatically given no \HTML\ width. \margintag{no-width minipages} A new macro \cs{minipagefullwidth} requests \margintag{full-width minipages} that the next minipage be generated without an \HTML\ \attribute{width} attribute, allowing it to be the full width of the display rather than the fixed width given. Nested minipages adopt their parent's text alignment in \HTML, whereas in regular \LaTeX{} \PDF\ output they do not. \watchout[text alignment] Use a \env{flushleft} or similar environment in the child minipage to force a text alignment. } \newcommand{\limitsfancybox}{% \pkg{fancybox}'s documentation has an example \env{FramedEqn} environment \margintag{framed equation example} which combines math, \cs{Sbox}, a minipage, and an \cs{fbox}. This combination requires that the entire environment be enclosed inside a \env{lateximage}, which is done by adding \cs{lateximage} at the very start of \env{FramedEqn}'s beginning code, and \cs{endlateximage} at the very end of the ending code. Unfortunately, the \HTML\ \attribute{alt} attribute is not used here. \begin{sourcedisplay} \cs{newenvironment}{FramedEqn} \\ \{ \\ \cs{lateximage}\% NEW \\ \cs{setlength}\{\cs{fboxsep}\}\{15pt\} \\ \dots\}\{\dots\\ \cs{[}\cs{fbox}\{\cs{TheSbox}\}\cs{]} \\ \cs{endlateximage}\% NEW \\ \} \end{sourcedisplay} \cs{fbox} works with \pkg{fancybox}. \margintag{framing alternatives} Also see \pkg{lwarp}'s \cs{fboxBlock} macro and \env{fminipage} environment for alternatives to \cs{fbox} for framing environments. The \pkg{fancybox} documentation's example framed table \margintag{framed table example} using an \cs{fbox} containing a \env{tabular} does not work with \pkg{lwarp}, but the \env{FramedTable} environment does work if \cs{fbox} is replaced by \cs{fboxBlock}. This method loses \HTML\ formatting. A better method is to enclose the table's contents inside a \env{fminipage} environment. The caption may be placed either inside or outside the \env{fminipage}: \begin{sourcedisplay} \cs{begin}\{table\}\\ \cs{begin}\{fminipage\}\{\cs{linewidth}\}\\ \cs{begin}\{tabular\}\{lr\}\\ ...\\ \cs{end}\{tabular\}\\ \cs{end}\{fminipage\}\\ \cs{end}\{table\}\\ \end{sourcedisplay} \pkg{lwarp} does not support the \env{verbatim} environment inside a span, box, \margintag{framed verbatim} or \pkg{fancybox}'s \cs{Sbox}, but a \env{verbatim} may be placed inside a \env{fminipage}. The \pkg{fancybox} documentation's example \env{FramedVerb} may be defined as: \begin{sourcedisplay} \cs{newenvironment}\{FramedVerb\}[1] \% width\\ \{\\ \cs{VerbatimEnvironment}\\ \cs{fminipage}\{\#1\}\\ \cs{begin}{Verbatim}\\ \}\{\\ \cs{end}{Verbatim}\\ \cs{endfminipage}\\ \} \end{sourcedisplay} \pkg{fancybox}'s \cs{VerbBox} may be used inside \cs{fbox}. \margintag{framed \cs{VerbBox}} \env{LVerbatim}, \cs{LVerbatimInput}, and \cs{LUseVerbatim} indent with horizontal \margintag{indented alignment} space which may not line up exactly with what \texttt{pdftotext} detects. Some lines may be off slightly in their left edge. } \newcommand{\limitsmdframed}{% Most basic functionality is supported, including \margintag{support} frame background colors and single-border colors and thickness, title and subtitle background colors and borders and thickness, border radius, and shadow. CSS classes are created for \pkg{mdframed} environments and frame titles. When used, \pkg{lwarp} loads \pkg{mdframed} in \HTML\ with \texttt{framemethod=none}. \watchout[loading] For title font, use \margintag{font}% \begin{sourcedisplay} frametitlefont=\cs{textbf}, \end{sourcedisplay} instead of \begin{sourcedisplay} frametitlefont=\cs{bfseries}, \end{sourcedisplay} where \cs{textbf} must appear just before the comma and will receive the following text as its argument (since the text happens to be between braces in the \pkg{mdframed} source). Since \pkg{lwarp} does not support \cs{bfseries} and friends, only one font selection may be made at a time. \texttt{theoremtitlefont} is not supported, since the following text is not \margintag{theoremtitlefont} in braces in the \pkg{mdframed} source. Footnotes are currently placed at the bottom of the \HTML\ page. \margintag{footnotes} \texttt{userdefinedwidth} and \texttt{align} are currently ignored. \margintag{ignored options} } \newcommand{\limitscaption}{% To ensure proper float numbering, set caption positions such as: \begin{sourcedisplay} \cs{captionsetup}[table]\{position=top\} \\ \cs{captionsetup}[figure]\{position=bottom\} \end{sourcedisplay} Similarly for \texttt{subtable}, \texttt{subfigure}, and \texttt{longtable}. } \newcommand{\limitscombiningfloats}{% If using \cs{newfloat}, \pkg{trivfloat}, and/or \pkg{algorithmicx} together, see \cref{sec:combiningfloats}. \watchout[package conflicts] } \newcommand{\limitssubfig}{% % At present, subfigures before the enclosing figure/table's \cs{caption} % \margintag{LOF/LOT} % would appear in the List of Figures/Tables before the enclosing figure/table, % therefore \pkg{lwarp} does not place subfigures in the LOF/LOT. At present, the package options for \texttt{lofdepth} and \texttt{lotdepth} \watchout[\texttt{lof/lotdepth}] are not working. These counters must be set separately after the package has been loaded. In the document source, use \cs{hfill} and \cs{hspace*} \margintag{horizontal spacing} between subfigures to spread them apart horizontally. The use of other forms of whitespace may cause paragraph tags to be generated, resulting in subfigures appearing on the following lines instead of all on a single line. } \newcommand{\limitsfloatrow}{% When combined with the \pkg{subfig} package, \watchout[\pkg{subfig} package] while inside a \env{subfloatrow} \cs{ffigbox} and \cs{ttabbox} must have the caption in the first of the two of the mandatory arguments. The emulation of \pkg{floatrow} does not support \cs{FBwidth} or \cs{FBheight}. These values are pre-set to \texttt{.3\cs{linewidth}} and \texttt{2in}. \watchout[\cs{FBwidth}, \cs{FBheight}] Possible solutions include: \begin{itemize} \item Use fixed lengths. \pkg{lwarp} will scale the \HTML\ lengths appropriately. \item Use \env{warpprint} and \env{warpHTML} environments to select appropriate values for each case. \item Inside a \env{warpHTML} environment, manually change \cs{FBwidth} or \cs{FBheight} before the \cs{ffigbox} or \cs{ttabbox}. Use \cs{FBwidth} or \cs{FBheight} normally afterwards; it will be used as expected in print output, and will use your custom-selected value in \HTML\ output. This custom value will be used repeatedly, until it is manually changed to a new value. \end{itemize} } \newcommand{\limitssiunitx}{% Do not use \cmds{per-mode=fraction}, which cannot be seen by the final \cmds{pdftotext} conversion. \watchout[per-mode] Some units will require that the expression be placed inside math mode. } \newcommand{\limitsnicefrac}{% \pkg{units} and \pkg{nicefrac} work as-is with \pkg{lwarp}, but MathJax does not have an extension for \pkg{units} or \pkg{nicefrac}. These packages do work with \pkg{lwarp}'s option \texttt{svgmath}. } % \newcommand{\limitsbabelone}{% % If using \pkg{babel} with French, use % \watchout[French]% % \begin{sourcedisplay} % \cs{frenchbsetup\{StandardLists=true\}} % \end{sourcedisplay} % to preserve the special \HTML\ and list handling. % } \newcommand{\limitsbabeltwo}{% When French is used, the caption separator is \margintag{\cs{CaptionSeparator}} changed to a dash. The following may be used to restore it to a colon: \begin{sourcedisplay} \texttt{\cs{renewcommand}*\{\cs{CaptionSeparator}\}\{:\textasciitilde\}} \end{sourcedisplay} Also when French is used, \margintag{punctuation spaces} \pkg{lwarp} patches \cs{FBcolonspace} and \cs{FBthinspace} to create fixed-width \HTML\ spaces around punctutation: \begin{sourcedisplay} \cs{renewcommand*}\{\cs{FBcolonspace}\}\{\~{}\} \\ \cs{renewcommand*}\{\cs{FBthinspace}\}\{\cs{,}\} \end{sourcedisplay} If the user's document also changes these parameters, \watchout[customized spacing] the user's changes should be placed inside a \env{warpprint} environment so that the user's changes do not affect the \HTML\ output. } \newcommand{\limitsnewclude}{% \pkg{newclude} modifies \cs{label} in a non-adaptive way, so \pkg{newclude} must be loaded before \pkg{lwarp} is loaded. \watchout[loading] \begin{docsidebar}[Ex:] \raggedright \cs{documentclass\{article\}} \\ \ldots \\ \cs{usepackage\{newclude\}} \\ \cs{usepackage[warpHTML]\{lwarp\}} \\ \ldots \end{docsidebar} } \newcommand{\limitsnewtxmath}{% The proper load order is: \watchout[loading sequence] \begin{enumerate} \item \dots \item \texttt{\cs{usepackage}\{lwarp\}} \item \dots \item \texttt{\cs{usepackage}\{amsthm\}} \item \texttt{\cs{usepackage}\{newtxmath\}} \item \dots \end{enumerate} } \newcommand{\limitsglossaries}{% \texttt{xindy} is required for \pkg{glossaries}. The default \texttt{style=item} option for \pkg{glossaries} conflicts with \pkg{lwarp}, so the style is forced to \texttt{index} instead. The page number list in the printed form would become \cs{nameref}s in \HTML, which could become a very long string if many items are referenced. For now, the number list is simply turned off. \texttt{lwarpmk} has the commands \texttt{printglossary} and \texttt{htmlglossary} to process the glossaries created by \pkg{glossaries} using \texttt{xindy}. The package \pkg{lwarp} takes an option \DescribeOption{IndexLanguage} \texttt{IndexLanguage=english} to set the language used by \texttt{xindy}. This is passed to \texttt{xindy} using its \texttt{-L} option, and is used for both index and glossary generation. } \newcommand{\osportabilityusage}{% \pkg{lwarp} tries to detect which operating system is being used. \DescribeProgram{Unix}\DescribeProgram{Mac OS}\DescribeProgram{Linux} \textsc{Unix}~/ \textsc{Mac~OS}~/ \textsc{Linux} is the default (collectively referred to as ``\textsc{Unix}'' in the configuration files), and \textsc{MS-Windows} is supported as well. If \textsc{Windows} is not correctly detected, \DescribeProgram{MS-Windows} \DescribeProgram{Windows} use the \pkg{lwarp} option \texttt{OSWindows}. \DescribeOption{OSWindows} When detected or specified, the operating-system path separator used by \pkg{lwarp} is modified, the boolean \texttt{usingOSWindows} is set true. This boolean may be tested by the user for later use. } \setlength{\marginparsep}{1em} \setlength{\marginparpush}{.7ex} \setlength{\parindent}{0em} \setlength{\parskip}{2ex} \setlength{\IndexMin}{40ex} \setcounter{IndexColumns}{2} \DisableCrossrefs \CodelineIndex \RecordChanges \begin{document} \DocInput{lwarp.dtx} \end{document} % % % \fi % % % \iffalse %<*package> % \fi % % \CheckSum{13116} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % \changes{v0.10}{2016/03/08}{\ 2016/03/08 Initial version} % \changes{v0.11}{2016/03/11}{\ 2016/03/11} % \changes{v0.11}{2016/03/10}{Test Suite: limages and index in README.txt} % \changes{v0.11}{2016/03/11}{Test Suite: MS-Windows in README.txt} % \changes{v0.12}{2016/03/14}{\ 2016/03/14} % \changes{v0.12}{2016/03/14}{Global: Uses \textbackslash{}p@(type) in float captions.} % \changes{v0.12}{2016/03/14}{Test Suite: Sub-figures} % \changes{v0.13}{2016/03/24}{\ 2016/03/24} % \changes{v0.13}{2016/03/23}{Test Suite: Ordinals, Subcaption} % \changes{v0.13}{2016/03/24}{Removed package: subfig} % \changes{v0.14}{2016/03/31}{\ 2016/03/31} % \changes{v0.14}{2016/03/29}{Test Suite: Assigned cleveref name for Test Float.} % \changes{v0.14}{2016/03/31}{Test Suite: Floatrow} % \changes{v0.15}{2016/04/06}{\ 2016/04/06} % \changes{v0.15}{2016/03/31}{Files: lwarp\_formal.css added.} % \changes{v0.15}{2016/03/31}{Test Suite: test\_suite\_formal.css file added.} % \changes{v0.16}{2016/04/11}{\ 2016/04/11} % \changes{v0.16}{2016/04/07}{Test Suite: Supports XeLaTeX, LuaLaTeX.} % \changes{v0.16}{2016/04/08}{Test Suite: Lwarp no longer selects fonts.} % \changes{v0.16}{2016/04/08}{Removed package: suffix} % \changes{v0.17}{2016/04/14}{\ 2016/04/14} % \changes{v0.17}{2016/04/14}{Test Suite: Mdframed} % \changes{v0.17}{2016/04/14}{Test Suite: Fix: Print-version front-matter page numbers.} % \changes{v0.18}{2016/05/19}{\ 2016/05/19} % \changes{v0.18}{2016/04/23}{Files: lwarp.css and lwarp\_formal.css: Improved responsive design.} % \changes{v0.18}{2016/04/23}{File: lwarp.css: Improved TOC outline display.} % \changes{v0.18}{2016/05/13}{Test Suite: Verse package} % \changes{v0.19}{2016/06/08}{\ 2016/06/08} % \changes{v0.19}{2016/05/25}{File: \texttt{lwarp\_mathjax.txt} added.} % \changes{v0.19}{2016/06/01}{File: lwarp.css: \texttt{tnoteitemheader} added} % \changes{v0.20}{2017/02/09}{\ 2017/02/09} % \changes{v0.20}{2016/06/27}{Test Suite: \HTML\ meta descriptions.} % \changes{v0.20}{2016/09/19}{File: lwarp.css: Minor fixes for validation.} % \changes{v0.20}{2016/12/08}{Docs: Improved index.} % \changes{v0.20}{2016/12/17}{File: lwarpmk used to compile print, \HTML, indexes, and lateximages.} % \changes{v0.20}{2016/12/17}{Removed reliance on make, grep, gawk.} % \changes{v0.20}{2016/12/17}{Parallel versions of aux files for print/HTML.} % \changes{v0.20}{2017/01/03}{Moved sidebar and example code to test suite.} % \changes{v0.20}{2017/01/25}{\pkg{caption} and \pkg{subcaption} supported.} % \changes{v0.21}{2017/02/23}{\ 2017/02/23} % \changes{v0.22}{2017/03/02}{\ 2017/03/02} % \changes{v0.23}{2017/03/02}{\ 2017/03/02} % \changes{v0.24}{2017/03/15}{\ 2017/03/15} % \changes{v0.25}{2017/03/22}{\ 2016/03/22} % \changes{v0.25}{2017/03/16}{Docs: Adds credits for patched code.} % \changes{v0.26}{2017/03/31}{\ 2017/03/31} % \changes{v0.27}{2017/04/04}{\ 2017/04/04} % \changes{v0.28}{2017/04/14}{\ 2017/04/14} % \changes{v0.29}{2017/04/15}{\ 2017/04/15} % \changes{v0.30}{2017/04/29}{\ 2017/04/29} % \changes{v0.31}{2017/05/15}{\ 2017/05/15} % \changes{v0.32}{2017/06/09}{\ 2016/06/09} % \changes{v0.33}{2017/07/10}{\ 2017/07/10} % \changes{v0.34}{2017/08/08}{\ 2017/08/08} % \changes{v0.34}{2017/07/25}{File: \texttt{README.txt}: updated.} % \changes{v0.34}{2017/07/25}{Docs: Horizontal space limitations.} % \changes{v0.35}{2017/08/08}{\ 2017/08/08} % \changes{v0.36}{2017/08/15}{Source: Improved formatting.} % \changes{v0.36}{2017/08/17}{\ 2017/08/17} % \changes{v0.37}{2017/08/19}{\ 2017/08/19} % \GetFileInfo{lwarp.sty} % % \DoNotIndex{\newcommand,\renewcommand,\addtocounter,\begin,\end,\begingroup,\endgroup} % \DoNotIndex{\global,\ifbool,\ifthenelse,\isequivalentto,\let} % \DoNotIndex{\booltrue,\boolfalse} % \expandafter\DoNotIndex\expandafter{\detokenize{\(,\),\,,\\,\#,\$,\%,\^,\_,\~,\ ,\&,\{,\}}} % % % \thispagestyle{empty} % % \begin{center} % \includegraphics[width=.3\linewidth]{lwarp_logo.pdf} % % \bigskip % % {\Huge The \textbf{lwarp} package} % % {\Large \textup{\LaTeX{} to \HTMLfive}} % % \bigskip % % \fileversion{} --- \filedate % % \bigskip % % {\small\copyright{} 2016--2017} Brian Dunn\\ \small \texttt{bd@BDTechConcepts.com} % % % ^^A % \title{The \pkg{lwarp} package\thanks{This document % ^^A % corresponds to \pkg{lwarp}~\fileversion, % ^^A % dated \filedate.}} % ^^A % \author{{\small\copyright{} 2016--2017} Brian Dunn\\ \small \texttt{bd@BDTechConcepts.com}} % ^^A % \published{} % ^^A % \subtitle{\textup{\LaTeX{} to HTML5}} % ^^A % % ^^A % \maketitle % % \vfill % % \begin{abstract} % \noindent % The \pkg{lwarp} package allows \LaTeX\ to directly produce \HTMLfive\ output, % using external utility programs only for the final conversion of text and images. % Math may be represented by \SVG\ files or MathJax. % % Documents may be produced by pdf\LaTeX, \LuaLaTeX, or \XeLaTeX. % A |texlua| script removes the need for system utilities such as |make| and |gawk|, % and also supports |xindy| and |latexmk|. Configuration is automatic at the % first manual compile. % % Print and \HTML\ versions of each document may coexist, each with its own % set of auxiliary files. Support files are self-generated on request. % Assistance is provided for import into \EPUB\ conversion software and word processors. % % A modular package-loading system uses the \pkg{lwarp} version of a package for % \HTML\ when available. % More than a hundred \LaTeX\ packages are supported with these high-level source % compatibility replacements, and many others work as-is. % % A tutorial is provided to quickly introduce the user to the major components % of the package. % % % \bigskip % % \begin{center} % \textcolor{blue}{To update existing projects, see \cref{sec:updates}, % \nameref{sec:updates}.} % \end{center} % % \bigskip % % \noindent % \textcolor{red!30!black}{\bfseries % Note that this is still an ``alpha'' version of \pkg{lwarp}, % and some things may change in response to user feedback and % further project development. % } % % \bigskip % % \footnotesize % \begin{description} % \item[License:] \ % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of LaTeX % version 2005/12/01 or later. % \end{description} % % % \end{abstract} % % \vspace*{\fill} % \vspace*{\fill} % \vspace*{\fill} % % \end{center} % % \clearpage % % % \tableofcontents % % \clearpage % \listoffigures % \listoftables % % % \thispagestyle{pageheadfoot} % % \clearpage % % \part{lwarp.sty} % % \section{Updates} % \label{sec:updates} % % The following is intended for those updating existing projects which use % \pkg{lwarp}, highlighting any special changes which must be made due % to improvements or modifications in \pkg{lwarp} itself. % % For a detailed list of changes, see the Change History on page \pageref{sec:changehistory}. % % \begin{description} % \item[v0.37:] \ % \begin{itemize} % \item \cs{include} now maintains independent |.aux| files % \margintag{\cs{include} for \HTML} % for \HTML\ versions. % \item \pkg{comment}, used by \pkg{lwarp}, now maintains % \margintag{\texttt{latexmk}} % independent cut files for print and \HTML\ versions, helping |latexmk| to % better know whether to recompile. % \item Improved support for \LaTeX\ accents, % \margintag{accents and symbols} % \pkg{textcomp}, \pkg{siunitx} symbols. % \item Improved \pkg{babel-french} handling for % \margintag{\pkg{babel-french}} % load order and \textasciitilde\ tilde. % \end{itemize} % \item[v0.36:] \ % \begin{itemize} % \item Recorganized the documentation section regarding special cases and limitations. % (\Cref{sec:limitations}) % \item Improved source formatting. % \item \cs{fbox} and related now use \cs{fboxsep} and \cs{fboxrule}. % \margintag{boxes and frames} % \item \cs{makebox} and \cs{framebox} now use width and position. % \item \cs{fcolorbox} and related now work inside a \env{lateximage}. % \item \pkg{babel-french}: Improvements for French variants, load order, % \margintag{\pkg{babel-french}} % footnotes, ellipses. % \item Improved footnote numbering. % \margintag{footnotes} % \env{lateximage} footnotes now appear as regular footnotes to match % the numbering of the print version. % Also fixed a regression with MathJax. % \item Improved \pkg{siunitx} units. % \margintag{\pkg{siunitx}} % \item Fix for filenames while using MathJax. % \item Fix for \cs{rule} when \pkg{xcolor} is not loaded. % \item Added \pkg{transparent}, \pkg{upref}. % \end{itemize} % \item[v0.35:] Fix: \cs{textbf} and related. % \item[v0.34:] \ % \begin{itemize} % \item \env{BlockClass}'s optional argument has been moved % \watchout[Optional arguments] % in front of the mandatory argument: % \begin{sourcedisplay} % |BlockClass[style]{class}| \quad \textrm{(NEW)} % \end{sourcedisplay} % instead of: % \begin{sourcedisplay} % |BlockClass{class}[style]| \quad \textrm{(OLD)} % \end{sourcedisplay} % This change makes it more consistent with \LaTeX\ standards, % and avoids problems with space between arguments. % \item Likewise, \cs{InlineClass}'s optional argument now % \watchout[Optional arguments] % comes before the mandatory arguments: % \begin{sourcedisplay} % |\InlineClass[style]{class}{text}| % \end{sourcedisplay} % \item Improved compatibility between spans, minipages, lists, % \margintag{spans with minipages} % frames, and math. % Handles minipages and lists inside an \HTML\ span, % such as an \cs{fbox} containing a minipage, % although with minimal \HTML\ fomatting. % See \cref{sec:minipages}. % \cs{fboxBlock} is added to frame minipages, tables, % \margintag{framing minipages} % and lists with full \HTML\ formatting % but no longer inline, and behaves as \cs{fbox} for print output. % The \env{fminipage} environment is added for framed minipages, % as an environment with full \HTML\ formatting, % and draws a framed minipage in print output. % See \cref{sec:framedminipages}. % \cs{fbox} and minipages now often work in \SVG\ math and \env{lateximage}s. % MathJax supports \cs{fbox}, but not \cs{fboxBlock} nor \env{fminipage}. % \item Improved compatibility between \env{lateximage} and % \margintag{\env{lateximage}, \SVG\ math, \env{tabular}} % \env{minipage}, \cs{parbox}, \cs{makebox}, \cs{fbox}, \cs{framebox}, % \cs{raisebox}, \cs{scalebox}, \cs{reflectbox}, \env{tabular}, \pkg{booktabs}. % \item Improved font control for \env{lateximage}es and \SVG\ math. % \item Added the \env{eqnarray} environments.\margintag{\env{eqnarray}} % \item \pkg{fancyvrb} is no longer required (preloaded), % \margintag{verbatim packages} % but is still supported. % \item Added \pkg{verbatim} and \pkg{moreverb}. % \item Added \pkg{fancybox}, \pkg{boxedminipage2e} and \pkg{shadow}. % \margintag{framing packages} % \item \pkg{enumitem} is no longer required, but is still supported. % \margintag{list packages} % \item Added \pkg{enumerate} and \pkg{paralist}. % \item \pkg{titleps} is no longer required, but is still supported. % \item Added \pkg{crop}. % \item Added \pkg{rotfloat}, \pkg{marginfit}, % and several minor packages; see the change log. % \item Adds fixed-width \HTML\ spaces around punctuation % \margintag{\pkg{babel-french}} % when using \pkg{babel-french}. % \LuaTeX\ does not yet use the extra punctuation spacing. % \end{itemize} % \needspace{2\baselineskip} % \item[v0.33:] \ % \begin{itemize} % \item Tabular |@| and |!| columns now have their own \HTML\ columns. % \item |&| catcode changes are localized, perhaps causing errors % about the tab alignment character |&|, % so any definitions of macros or environments % which themselves contain \env{tabular} and |&| must be enclosed within \cs{StartDefiningTabulars} % and \cs{EndDefiningTabulars}. See \cref{sec:localizingampersand}. % This change is not required for the routine use of tables, % but only when a table is defined inside another macro or environment, % and while also using the |&| character inside the definition. % This may include the use inside conditional expressions. % \item Several math environments were incorrectly placed inline. % Also, for \pkg{amsmath} with \SVG\ math, the |fleqn| option has been removed, % resulting in improved spacing for aligned equations. % \item Bug fixes; see the changelog. % \end{itemize} % \item[v0.32:] Bug fixes; no source changes needed: % \begin{itemize} % \item |lwarpmk| has been adjusted to work with the latest |luatex|. % \item Spaces in the \cs{usepackage} and \cs{RequirePackage} package lists are now accepted and ignored. % \item Fix for the \pkg{glossaries} package and \cs{glo@name}. % \end{itemize} % \item[v0.31:] Bug fix; no source changes needed: % \begin{itemize} % \item Improved compatibility with \pkg{keyfloat}, % including the new \env{keywrap} environment. % \end{itemize} % \needspace{2\baselineskip} % \item[v0.30:] \ % \begin{itemize} % \item \pkg{lwarp-newproject} has been removed, and its functions % \watchout[\pkg{lwarp-newproject}] % have been combined with \pkg{lwarp}. % % To modify existing documents, remove from the document source: % \begin{sourcedisplay} % \cs{usepackage}\{lwarp-newproject\} % \end{sourcedisplay} % % The \pkg{lwarp} package now produces the configuration files during % print output, and also accepts the option |lwarpmk| if desired. % % \item A number of macros % \watchout[HTML setup changes.] % related to \HTML\ settings have been converted to options, and % other macros and options have been renamed to create a consistent syntax: % \begin{center} % \begin{tabular}{ll} % \toprule % Old Macro & New Package Option \\ \midrule % \cs{HomeHTMLFileName} & |HomeHTMLFilename| \\ % \cs{HTMLFileName} & |HTMLFilename| \\ % \cs{useLatexmk} & |latexmk| \\ % \cs{warpOSwindows} & |OSWindows| \\[2.5ex] \toprule % Old Package Option & New Package Option \\ \midrule % |lwarpmklang| & |IndexLanguage| \\ % (new) & |xdyFilename| \\[2.5ex] \toprule % Old Macro & New Macro \\ \midrule % \cs{MetaLanguage} & \cs{HTMLLanguage} \\ % \cs{HTMLauthor} & \cs{HTMLAuthor} \\ % \cs{NewHTMLdescription} & \cs{HTMLDescription} \\ % \cs{SetFirstPageTop} & \cs{HTMLFirstPageTop} \\ % \cs{SetPageTop} & \cs{HTMLPageTop} \\ % \cs{SetPageBottom} & \cs{HTMLPageBottom} \\ % \cs{NewCSS} & \cs{CSSFilename} \\ % \bottomrule % \end{tabular} % \end{center} % % \needspace{2\baselineskip} % \item Per the above changes, in existing documents, % modify the package load of \pkg{lwarp}, such as: % \begin{Verbatim}[tabsize=4,gobble=2] % \usepackage[ % HomeHTMLFilename=index, % HTMLFilename={}, % IndexLanguage=english % ]{lwarp} % \end{Verbatim} % % \item The file |lwarp_html.xdy| has been renamed |lwarp.xdy|. % To update each document's project: % \begin{enumerate} % \item Make the changes shown above. % \item Recompile the document in print mode. % This updates the project's configuration files, and also generates the % new file |lwarp.xdy|. % \item The old file |lwarp_html.xdy| may be deleted. % \end{enumerate} % % \item The new \pkg{lwarp} package option |xdyFilename| may be used to tell % |lwarpmk| to use a custom |.xdy| file instead of |lwarp.xdy|. % See \cref{sec:modifyxindy}. % % \item Improvements in index processing: % \begin{itemize} % \item |xindy|'s language is now used for index processing % as well as glossary. % \item Print mode without |latexmk| now uses |xindy| instead of |makeindex|. % \item |texindy|/|xindy| usage depends on |pdflatex| vs |xelatex|, |lualatex|. % \item For |pdflatex| and |texindy|, the |-C utf8| option is used. This is % supported in modern distributions, but a customized |lwarpmk.lua| may % need to be created for use with older distributions. % \end{itemize} % % \end{itemize} % % \needspace{2\baselineskip} % % \item[v0.29:] \ % \begin{itemize} % \item Add: |lwarpmklang| option for \pkg{lwarp-newproject} and \pkg{lwarp}. % Sets the language to use while processing the glossary. % (As of v0.30, this has been changed to the |IndexLanguage| option.) % \item Fix: \cs{includegraphics} when no optional arguments. % \end{itemize} % \item[v0.28:] \ % \begin{itemize} % \item \cs{HTMLAuthor} \marg{name} assigns \HTML\ meta author if non-empty. % Defaults to \cs{theauthor}. % \item Booean |HTMLDebugComments| controls whether \HTML\ comments are % added for closing \element{div}s, opening and closing sections, etc. % \item Boolean |FormatEPUB| changes \HTML\ output for easy \EPUB\ conversion % via an external program. % Removes per-file headers, footers, and nav. Adds footnotes per chapter/section. % \item Boolean |FormatWordProcessor| changes \HTML\ output for easier conversion % by a word processor. Removes headers and nav, prints footnotes per section, % and also forces single-file output and turns off \HTML\ debug comments. % \item Boolean |HTMLMarkFloats| adds text marks around floats only if % |FormatWordProcessor|. These make it easier to identify float boundaries, % which are to be manually converted to word-processor frames. % \item Updated for the new MathJax \acro{CDN} repository. % \item Adds \pkg{tabulary}. % \item Supports the options syntax for \pkg{graphics}. % \item Improved index references, now pointing exactly to their target. % \item Adds \pkg{glossaries}. % |lwarpmk| is modified to add |printglosssary| and |htmlglossary| actions. % \end{itemize} % % ^^A \needspace{2\baselineskip} % ^^A \item[v0.27:] \ % ^^A \begin{itemize} % ^^A \item Improved documentation for MacOS install. % ^^A \item Fix for \pkg{microtype} with \XeLaTeX\ and \LuaLaTeX. % ^^A \item Fix for table footnote paragraph tags. % ^^A \item Adds \pkg{lettrine}, \pkg{ulem}, and \pkg{soul}. % ^^A \end{itemize} % ^^A \needspace{2\baselineskip} % ^^A \item[v0.26:] \ % ^^A \begin{itemize} % ^^A \item Improved installation instructions for MiK\TeX\ regarding generating % ^^A the |lwarpmk| executable. % ^^A \item Footnotes are now supported by \LaTeX\ boxes instead of pagenotes. % ^^A \pkg{pagenote} now works as per the print version. % ^^A \pkg{footnote}, \pkg{footnotehyper}, \pkg{footmisc}, \pkg{endnotes}, % ^^A \pkg{marginnote}, and \pkg{sidenotes} are also supported. % ^^A \item \LaTeX\ labels now are used to track the page numbers of |latexiamge|s. % ^^A This allows the correct inclusion of |lateximage|s in footnotes, pagenotes, and endnotes. % ^^A \item \pkg{cutwin} and \pkg{floatflt} are also supported. % ^^A \end{itemize} % ^^A \needspace{2\baselineskip} % ^^A \item[v0.25:] \ % ^^A \begin{itemize} % ^^A \item Fix: Allows \pkg{graphicx} and \pkg{graphicsx} before \pkg{lwarp} because % ^^A \XeLaTeX\ and \LuaLaTeX\ use \pkg{xunicode} which uses \pkg{graphics}. % ^^A \item Package support for \pkg{framed}, several theorem packages, and ellipses. % ^^A \end{itemize} % ^^A \needspace{2\baselineskip} % ^^A \item[v0.24:] \ % ^^A \begin{itemize} % ^^A \item \pkg{tikz}'s |babel| library is load automatically as needed. % ^^A \item \pkg{subfig} has been added, along with |lofdepth| and |lotdepth|. % ^^A \item \env{picture} and \env{tikzpicture} now may be inline. % ^^A \end{itemize} % ^^A \needspace{2\baselineskip} % ^^A \item[v0.22:] \ % ^^A \begin{itemize} % ^^A \item Support has been added for tabular column types |D|, |!|, and |X|. % ^^A Unknown column types are converted to |l|. % ^^A \item Additional packages are supported, including \pkg{abstract}, % ^^A \pkg{dcolumn}, \pkg{tabularx}, and \pkg{varioref}. % ^^A \end{itemize} % ^^A \item[v0.21:] \ % ^^A \begin{itemize} % ^^A \item Documentation for installing on Windows has been updated and improved. % ^^A \item For Windows compatibility, the |lateximages| shell script % ^^A has been replaced with a |lateximages.txt| file, which is parsed % ^^A by |lwarpmk| to generate lateximages. % ^^A This does not require any changes in the user's code. % ^^A \item Windows |lwarpmk again| now functions. % ^^A \item For improved error handling, \pkg{lwarp} now verifies the % ^^A order in which packages are loaded, and signals an error for misplaced packages. % ^^A \pkg{inputenc}, \pkg{fontenc}, \pkg{newunicode}, and \pkg{fontspec} % ^^A must be loaded before \pkg{lwarp}, and the other packages which % ^^A \pkg{lwarp} knows about must be loaded after. % ^^A \item \pkg{lwarp} no longer requires a \cs{title} be assigned. % ^^A \end{itemize} % ^^A \item[v0.20:] \ % ^^A \begin{itemize} % ^^A \item The |makefile| and related infrastructure % ^^A has been replaced by the |lwarpmk| utility. % ^^A This provides increased portability, reduced dependencies, % ^^A and much simpler installation and setup. % ^^A \item The |lwarp-newproject| package is now used to locally create % ^^A support files. % ^^A \item The print and \HTML\ versions of a document may co-exist with their % ^^A own sets of auxiliary files. % ^^A \item Package handling is now controlled by a modular system which % ^^A looks for and loads an |lwarp-| version if available. % ^^A \item High-level source compatibility is provided for all supported % ^^A packages, almost totally eliminating the need % ^^A for |warpprint| and |warpHTML| environments. % ^^A \item A large number of additional packages are supported. % ^^A \item A new tutorial is included in the documentation, and % ^^A many obsolete sections have been removed. % ^^A \item \cs{NewHTMLdescription} sets the \HTML\ meta description tag for each file. % ^^A See \cref{sec:htmldescription}. (v0.30 changes this to \cs{HTMLDescription}.) % ^^A \item \cs{HTMLFilename} may now be empty, allowing filenames without a prefix. % ^^A Lwarp no longer automatically appends a |-| character. % ^^A \watchout % ^^A For existing projects, add a |-| to the end of \cs{HTMLFilename}. % ^^A \item \cs{HomeHTMLFilename} and \cs{HTMLFilename} no longer use % ^^A escaped underscore\watchout\ % ^^A characters. Underscores may be used in filenames as-is. % ^^A (Version 0.30 changes these to package options |HomeHTMLFilename| and % ^^A |HTMLFilename|.) % ^^A \item \pkg{lwarp} now tries to auto-detect the operating system, % ^^A and \cs{warpOSwindows} is only needed if the auto-detection % ^^A fails to detect Windows. (As of v0.30, \cs{warpOSwindows} has been converted to % ^^A the |OSWindows| option.) % ^^A \item Tabular column types |@|, |>|, and |<| are now supported. % ^^A \item |BlockClass| and \cs{InlineClass} add an optional style. % ^^A \item The |sidebar| and |example| environments have been moved to the % ^^A test suite, and are no longer included in \pkg{lwarp}. % ^^A \end{itemize} % ^^A \needspace{2\baselineskip} % ^^A \item[v0.19:] \ % ^^A \begin{itemize} % ^^A \item \textsc{MathJax} now may be used to display math via the |mathjax| option. % ^^A See \cref{sec:loading,sec:limitsmath}. % ^^A To use MathJax with a pre-existing project, % ^^A \watchout % ^^A copy or link the file |lwarp_mathjax.txt| to the project's directory. % ^^A \item \cs{rule} added, supporting width, height, raise, \cs{textcolor}. % ^^A \item \cs{LateximageFontSizeName} provides user-adjustable font size for math % ^^A and \env{lateximage}s. % ^^A \item \cs{minipagefullwidth} requests that the next minipage be % ^^A full-width in \HTML, but still the assigned width in print. % ^^A \item \env{minipage} improved side-by-side rendering. % ^^A \item CSS class |tablenotes| is provided for table note items. % ^^A \item \cs{warpprintonly} replaces \cs{rowprintedonly}, % ^^A and \cs{warpHTMLonly} is added. These behave like the \env{warpprint} % ^^A \watchout % ^^A and \env{warpHTML} environments, and are generally useful, so they replace % ^^A the previously table-specific syntax. % ^^A \item \pkg{cleveref} is loaded \cs{AtEndPreamble} for improved reliability. % ^^A See \cref{sec:cleveref}. % ^^A \item \cs{xfracHTMLfontsize} controls \pkg{xfrac} font size in \HTML. % ^^A \item \tikz\ improved catcode handling. % ^^A \end{itemize} % ^^A \item[v0.18:] \ % ^^A \begin{itemize} % ^^A \item The \pkg{verse} package and the verse-related commands from % ^^A the \pkg{memoir} package are now supported. % ^^A \item Responsive web design has been improved for the side\TOC. % ^^A \item \cs{includegraphics} now maintains relative sized for em, ex, and \%. % ^^A \end{itemize} % ^^A \item[v0.17:] \ % ^^A \begin{itemize} % ^^A \item \pkg{mdframed} package is supported. % ^^A \end{itemize} % ^^A \item[v0.16:] \ % ^^A \begin{itemize} % ^^A \item Font and input encoding are now controlled by the user, and % ^^A \pkg{lwarp} is loaded after fonts have been selected. % ^^A \item Support for \XeLaTeX{} and \LuaLaTeX. See \cref{sec:fonts}. % ^^A \end{itemize} % \end{description} % % \clearpage % % \section{Introduction} % \changes{v0.19}{2016/05/25}{Introduction: MathJax support mentioned.} % % The \pkg{lwarp} project aims to allow a rich \LaTeX{} document % to be converted to a reasonable \HTML\ % interpretation. No attempt has been made to force \LaTeX{} to provide for every % \HTML-related possibility, and \HTML\ cannot exactly render every possible \LaTeX{} concept. % Where compromise is necessary, it is desirable to allow the print output to remain % typographically rich, and compromise only in the \HTML\ conversion. % % Several ``modern'' features of \HTMLfive, \CSSthree, and \SVG\ % are employed to allow a fairly feature-rich document % without relying on the use of Javascript. % Limited testing on older browsers show that these new features % degrade gracefully, although the \SVG\ format % for math may not be available on small cell phones. % % |pdflatex|, |xelatex|, or |lualatex| is used, allowing \pkg{lwarp} to process the usual image formats. % While generating \HTML\ output, \SVG\ files are used in placed of \PDF. % Other formats such as \JPG\ are used as-is. % % \SVG\ images may be used for math, % and are also used for \env{picture}, and \tikz{} environments, % as this format has % better browser and e-book support than \MathML\ (as of this writing), % while still allowing for the high-quality display and printing of images (again, subject to potentially % bug-ridden\footnote{Firefox has had an on-again/off-again bug for quite some time regareding % printing \SVG{}s at high resolution.} browser % support). % % Furthermore, \SVG\ images allow math to be presented with % the same precise formatting as in the print version. % Math is accompanied by ALT tags holding the \LaTeX{} source for the expression, allowing it to be % copy/pasted into other documents.\footnote{There seems to be some debate as to whether % \MathML\ is actually an improvement over \LaTeX{} for sharing math. The author has no % particular opinion on the matter, except to say that in this case \LaTeX{} is much easier to implement!} % Custom \LaTeX{} macros may be used as-is in math expressions, since the math is evaluated % entirely inside \LaTeX. % % The \textsc{MathJax} JavaScript display engine may be selected % for math display instead of using \SVG\ images. % Subject to browser support and Internet access, % MathJax allows an \HTML\ page to display % math without relying on a large number of external image files, % one per math expression. \pkg{lwarp} maintains \LaTeX\ control for cross-referencing % and equation numbering\,/\,formatting. % % \hfill\rule[.7ex]{.3\linewidth}{.4pt}\hspace*{\fill} % % The \pkg{lwarp} package allows \LaTeX{} to directly generate \HTMLfive\ tags from a \LaTeX{} % source document, with only minor intervention on the user's part. % A |texlua| program called |lwarpmk| is used to process either the print or \HTML\ % version of the document. A few external utility programs are used to finish % the conversion from a \LaTeX{}-generated \PDF\ file which happens to have \HTMLfive\ tags, % to a number of \HTMLfive\ plain-text files and accompanying images. % % \pkg{lwarp} automatically generates the extra files necessary for % the \HTML\ conversion, such as \CSS\ and |.xdy| files, and configuration files % for the utility |lwarpmk|. % Also included is a parallel version of the user's source document, % |-html.tex|, which selects \HTML\ output and then inputs the user's own source. % This process allows both the printed and \HTML\ versions to co-exist side-by-side, % each with their own auxiliary files. % % When requesting packages during \HTML\ conversion, % |lwarp| first looks to see if it has its own modified version % to use instead of the usual \LaTeX\ version. These |lwarp-packagename.sty| files contain % code used to emulate or replace functions for \HTML\ output. % % Enough functionality is provided to convert a typical article containing technical content. % Not every package has been tested, but many of the most useful ones are known to work, % either as-is or through emulation with replacement code. (See \cref{tab:supported} on % page \pageref{tab:supported}.) % % Assistance is provide for modifying the \HTML\ output to suite the creation % of \EPUB\ documents, and for modifying the \HTML\ output to ease import into % a word processor. % % % \subsection{Supported packages and features} % % \changes{v0.15}{2016/04/05}{Docs: Moved the supported functions table to the introduction.} % % Supported classes include \pkg{book}, \pkg{report}, and \pkg{article}. % \pkg{memoir} is planned, but in the meantime many of the packages % used by \pkg{memoir} are already supported. % % % \Cref{tab:supported} lists some of the various \LaTeX{} features which may be used. % \emph{Supported} means that the package or macro may be used as-is, % perhaps with minor limitations. % \emph{Emulated} means that the original package or macro is not used, but similar % functionality is provided in a way which is intended to be compatible with the % user's \LaTeX{} code. % % \renewcommand{\arraystretch}{1.5} % % \begin{longtable}{>{\raggedright}m{.3\linewidth}m{.6\linewidth}} % \caption{\protect\LaTeX--HTML generation --- % \protect\pkg{lwarp} package --- % Supported functions\label{tab:supported}} \endfirsthead % \warpprintonly{\multicolumn{2}{c}{\pkg{lwarp} Supported Functions --- continued} \\ % Category & Status \\ \toprule \endhead} % \toprule % Category & Status \\ % \midrule % Engines: & pdf\LaTeX, \XeLaTeX, \LuaLaTeX \\ % \midrule % Classes: & \pkg{book}, \pkg{report}, or \pkg{article}. \pkg{memoir} is planned. \\ % \midrule % Sectioning: & Supported, with hyperlinks. % Honors \cmds{tocdepth} and \cmds{secnumdepth}. % Adds \cmds{filedepth} for splitting the \HTML\ output. % Files may be numbered sequentially or named according to section name. % Common short words and punctuation is removed from the filenames. % Emulates \pkg{titlesec}. \\ % Page layout: & Emulates \pkg{fancyhdr}, \pkg{titleps}. \\ % Table of contents, figures, tables: & Supported, with hyperlinks. % Emulates \pkg{titletoc} and \pkg{tocloft}. \\ % Title page: & \cs{maketitle}, \env{titlepage}, \pkg{titling}. Optional % \pkg{titling}-based commands for published and subtitle. \\ % \env{abstract}: & Supported \\ % \midrule % Cross-references: & Emulated, with hyperlinks. \\ % \pkg{hyperref}: & Emulated. % \HTML\ hyperlinks are generated for \TOC, \LOF, \LOT, % \cs{nameref}, \cs{ref}, % the \pkg{cleveref} commands, and index entries.\\ % \pkg{url}: & Supported, without hyperlinks so far. \\ % \midrule % Margin notes: & \pkg{marginfit}, \pkg{marginfix}. \\ % Footnotes: & \pkg{footnote}, \pkg{footmisc}, % \pkg{marginnote}, \pkg{sidenote}, \pkg{pagenote}, \pkg{endnotes}. \\ % Indexing: & \cmds{texindy} is used, with hyperlinks. \pkg{idxlayout} is emulated. \\ % Glossary: & \pkg{glossaries} and \cmds{xindy} are used. \\ % Bibliography: & Supported, without hyperlinks so far. \\ % \midrule % Math: & Supported. Converted to \SVG\ images with \HTML\ \cmds{ALT} tags containing the % \LaTeX{} source for the math expression. % MathJax supported as an alternative. % \AmS{} environments are supported. % User-defined macros are available during converson, % due to native \LaTeX{} processing.\\ % Theorems: & Support for native \LaTeX\ theorems, plus % \pkg{theorem}, \pkg{amsthm}, \pkg{ntheorem}. \\ % \midrule % Floats: & Appear where declared. % \pkg{float}, \pkg{rotfloat}, \pkg{newfloat}, \pkg{caption} and \pkg{subcaption}, % \pkg{subfig}, \pkg{capt-of}, \pkg{placeins}, \pkg{trivfloat}, \pkg{floatrow}, % \pkg{keyfloat}, \pkg{wrapfig}, \pkg{cutwin}, \pkg{floatflt}. \\ % \midrule % \env{tabular}: & Emulated. % \cs{multirow} and \cs{multicolumn} are available, but cannot % be used at the same time. % Nested tables are not supported. \\ % \pkg{array}: & Supported inside math environments, emulated elsewhere. \\ % \pkg{tabularx}, \pkg{tabulary}, \pkg{threeparttable}, \pkg{multirow}: & Emulated. \\ % \pkg{longtable}: & Emulated. Converted to a tabular. Captions supported. % Extra headings and \cs{kill} lines must be enclosed in % \cs{warpprintonly\{\}} \\ % \cmidrule{2-2} % \pkg{booktabs}: & Emulated. \cs{toprule} and \cs{bottomrule} % form black rules, \cs{midrule} forms silver rules, as demonstrated on % this table. % \cs{cmidrule}, demonstrated at this line, does not use width or trim options. \\ % \midrule % \pkg{graphics}, \pkg{graphicx}: & Emulated. % \cs{includegraphics} supports \cmds{width}, \cmds{height}, % \cmds{origin}, \cmds{angle}, and \cmds{scale} tags, and adds \cmds{class}. % References to \PDF\ files are changed to \SVG, other image types % are accepted as well. % \cs{rotatebox} and \cs{scalebox} are supported as well as \HTML\ can handle. \\ % \pkg{rotating}: & Emulated. All objects are displayed unrotated. \\ % \midrule % Lists: & Standard \LaTeX\ environments are supported, along with % \pkg{enumitem}, \pkg{enumerate}, \pkg{paralist}. % Spacing is still controlled by \CSS. \\ % \midrule % Environments: & Standard \LaTeX{} environments are supported. \\ % \pkg{picture} and \pkg{tikz}: & Converted to an \SVG\ image. \\ % \env{minipage}: & Supported with some \HTMLfive-imposed limitations. % Nested minipages are supported. % Footnotes appear at the bottom of the \HTML\ page. \\ % Verbatim: & \pkg{verbatim}, \pkg{moreverb}, \pkg{fancyvrb} (except for verbatim footnotes). \\ % Frames: & \pkg{framed}, \pkg{fancybox}, \pkg{mdframed}, \pkg{boxedminipage2e}, \pkg{shadow}. \\ % \pkg{multicol}: & Emulated, with \CSSthree. % Converted to up to three columns with an optional heading, % per browser support. Single-column if unsupported.\\ % \midrule % \pkg{siunitx}: & Mostly supported except for \cmds{per-mode=fraction}. \\ % \pkg{xfrac}: & Supported \\ % \midrule % Direct formatting: & \cs{emph}, \cs{textsuperscript}, % \cs{textbf}, etc are supported. % \cs{bfseries}, etc.\ are not yet supported. % \pkg{lettrine}, \pkg{ulem}, and \pkg{soul} are supported. \\ % Ordinals: & \pkg{nth}, \pkg{fmtcount}, and \pkg{engord} are supported. \\ % Text ligatures: & Ligatures for symbols are supported. % Ligatures for f, q, t are intentionally turned off % because many simpler browsers do not display them correctly. % Modern full-featured browsers re-create these ligatures on-the-fly.\\ % Horizontal space: & % \HTML\ output for thin-unbreakable, unbreakable, % \cs{enskip}, \cs{quad}, \cs{qquad}, \cs{hspace}. \\ % Rules: & \cs{rule} with width, height, raise, text color. \\ % \HTML\ reserved characters: & \cs{\&}, \cs{textless}, and % \cs{textgreater} are converted to \HTML\ entities. \\ % \midrule % \pkg{xcolor}: & \textcolor{DarkGreen}{Supported}. % Full package color names, any color models, % and \textcolor{Goldenrod}{mixing} is % converted to hex web colors via \cs{convertcolorspec}. % Patched commands are % \textcolor{Maroon}{\cs{textcolor}}, % \colorbox{LightSteelBlue}{\cs{colorbox}}, % and \fcolorbox{red}{NavajoWhite}{\cs{fcolorbox}}. % \cs{pagecolor} is not supported. \\ % \midrule % Where: & \\ % \textbf{Supported:} & The existing \LaTeX{} package is used. \\ % \textbf{Emulated:} & The \LaTeX{} package is not used, but some/all of its % functions are emulated. Null functions, lengths, and counters are provided % for source compatibility. \\ % \bottomrule % \end{longtable} % % % Supported packages include everything listed in the table of contents, % plus the packages listed in \cref{tab:additionalsupported}, % and probably others which have not yet been tested. % Many are simply nullfied during \HTML\ output. % Others are not affected by the output mode and thus work as-is. % % % \begin{table} % \caption{Additional supported packages} % \label{tab:additionalsupported} % \sffamily % babel, bm, % calc, cleveref, csquotes, % fancyvrb, fileerr, % newtxmath, nicefrac % siunitx, somedefs, % tikz, trace, % units, url, % varioref, % xspace % \end{table} % % % These packages and features probably works with little or no change to the % user's source code. % Special environments are provided to mark blocks of code which are for % print only, \HTML\ only, or both, should it be necessary. % % % % % \clearpage % % \section{Alternatives} % % Summarized below are several other ways to convert a \LaTeX{} or other document to \HTML. % Where an existing \LaTeX{} document is to be converted to \HTML, \pkg{lwarp} may be % a good choice. For new projects with a large number of documents, it may be worth % investigating the alternatives before decided which path to take. % % \subsection{Internet class} % % \changes{v0.21}{2017/02/15}{Docs: Added \protect\texttt{internet} class.} % % The closest to \pkg{lwarp} in design principle is the % \DescribeClass{internet} % \verb+internet+ class by Andrew Stacey % (\url{https://github.com/loopspace/latex-to-internet}), % an interesting project which directly produces several versions % of markdown, and also \HTML\ and \EPUB. % % % % \subsection{TeX4ht} % % \url{http://tug.org/tex4ht/}\DescribeProgram{TeX4ht} % % This system uses native \LaTeX{} processing to produce a DVI file containing special commands, % and then uses additional post-processing for the \HTML\ conversion by way of numerous configuration % files. % In some cases, \pkg{lwarp} provides a better \HTML\ conversion, and it % supports a different set of packages. % TeX4ht produces several other forms of output beyond \HTML. % % \subsection{Translators} % % \changes{v0.21}{2017/02/14}{Docs: Added TeX2page, GladTeX.} % % These systems use external programs to translate a subset of \LaTeX{} syntax into \HTML. % Search for each on \CTAN\ (\url{http:\\ctan.org}). % \begin{description} % \item [H\textsuperscript{E}v\textsuperscript{E}a:] \url{http://hevea.inria.fr/} % \DescribeProgram{Hevea} {\footnotesize(not on \CTAN)} % \item [T\textsubscript{T}H:] \url{http://hutchinson.belmont.ma.us/tth/} % \DescribeProgram{TtH} % \item [GELLMU:] \url{http://www.albany.edu/~hammond/gellmu/} % \DescribeProgram{GELLMU} % \item [\LaTeX{}ML:] \url{http://dlmf.nist.gov/LaTeXML/} % \DescribeProgram{LaTeXML} % \item [PlasTeX:] \url{https://github.com/tiarno/plastex} % \DescribeProgram{Plastex} % \item [\LaTeX2HTML:] \url{http://www.latex2html.org/} % \DescribeProgram{LaTeX2HTML} \\ % and \url{http://ctan.org/pkg/latex2html}. % \item [\TeX2page:] \url{http://ds26gte.github.io/tex2page/index.html} \DescribeProgram{TeX2page} % \end{description} % Finally, Glad\TeX\ may used to directly insert \LaTeX\ math into \HTML: % \begin{description} % \item [Glad\TeX:] \url{http://humenda.github.io/GladTeX/} \DescribeProgram{GladTeX} % \end{description} % % \subsection{AsciiDoc} % % AsciiDoc is one of the most capable markup languages, providing enough features to produce % the typical technical-writing document with cross-references, % and it writes \LaTeX{} and \HTML. % \begin{description} % \item [Asciidoctor:] \url{http://asciidoctor.org/} (More active.)\DescribeProgram{AsciiDoc} % \item [AsciiDoc:] \url{http://asciidoc.org/} (The original version.)\DescribeProgram{AsciiDoctor} % \end{description} % % The Asciidoctor-LaTeX project is adding additional \LaTeX{}-related features. % \begin{description} % \item [Asciidoctor-LateX:] ~ \\ % \url{http://www.noteshare.io/book/asciidoctor-latex-manual} \\ % \url{https://github.com/asciidoctor/asciidoctor-latex} % \DescribeProgram{Asciidoctor-LaTeX} % \end{description} % % \subsection{Pandoc} % \DescribeProgram{Pandoc} % % A markup system which also reads and writes \LaTeX{} and \HTML. % \begin{description} % \item [Pandoc:] \url{http://pandoc.org/} % \end{description} % % (Watch for improvements in cross-references to figures and tables.) % % \subsection{Word processors} % % It should be noted that the popular word processors % \DescribeProgram{Word}\DescribeProgram{LibreOffice}\DescribeProgram{OpenOffice} % have advanced through the years in their abilities % to represent math with a \LaTeX-ish input syntax, unicode math fonts, % and high-quality output, and also generate \HTML\ with varying success. % See recent developments in Microsoft\,\textregistered{} Word\,\textregistered{} % and LibreOffice\,\texttrademark{} Writer. % % \subsection{Commercial systems} % % Likewise, several professional systems exist whose % \DescribeProgram{Adobe} \DescribeProgram{FrameMaker} % \DescribeProgram{InDesign} \DescribeProgram{Flare} \DescribeProgram{Madcap} % abilities have been advancing in the areas of typesetting, cross-referencing, and \HTML\ generation. % See Adobe\,\textregistered{} FrameMaker\,\textregistered{}, % Adobe\,\textregistered{} InDesign\,\textregistered{}, % and Madcap Flare\,\texttrademark{}. % % \subsection{Comparisons} % \index{markup languages} % % AsciiDoc, Pandoc, and various other markup languages typically have a syntax which tries to be % natural and human-readable, but the use of advanced features tends to require % many combinations of special characters, resulting in a complicated mess of syntax. % By contrast, \LaTeX{} spells things out in readable words but takes longer to type, although % integrated editors exist which can provide faster entry and a graphic user interface. % For those functions which are covered by the typical markup language % it is arguable that \LaTeX{} is comparably easy to learn, while \LaTeX{} provides many more advanced % features where needed, along with a large number of pre-existing packages which provide solutions % to numerous common tasks. % % Text-based document-markup systems share some of the advantages of \LaTeX{} vs.\ a typical word % processor. Documents formats are stable. The documents themselves are portable, % work well with revision control, % do not crash or become corrupted, and are easily generated under program control. % Formatting commands are visible, % cross-referencing is automatic, and editing is responsive. % Search/replace with regular expressions provides a powerful tool for % the manipulation of both document contents and structure. % Markup systems and some commercial systems allow printed output % through a \LaTeX{} back end, yielding high-quality results especially when the \LaTeX{} % template is adjusted, but they lose the ability to use \LaTeX{} macros and % other \LaTeX{} source-document features. % % The effort required to customize the output of each markup system varies. % For print output, \LaTeX{} configuration % files are usually used. For \HTML\ output, a \CSS\ file will be available, but additional % configuration may require editing some form of control file with a different syntax, such as XML. % In the case of \pkg{lwarp}, CSS is used, and much \HTML\ output is adjusted % through the usual \LaTeX{} optional macro parameters, % but further customization may require patching \LaTeX{} code. % % The popular word processors and professional document systems each has a large % base of after-market support including pre-designed styles and templates, and often include % content-management systems for topic reuse. % % % % % \clearpage % % \section{Installation} % % \Cref{tab:utility} shows the tools which are used for % the \LaTeX\ to \HTML\ conversion. % In most cases, these will be available via the % standard package-installation tools. % % \index{utility>programs} % \index{programs>utility} % % \begin{table} % \caption{Required software programs\label{tab:utility}} % \hrule % \begin{description} % % \item[Provided by your \LaTeX\ distribution:] \ % % From \TeX{}Live: \url{http://tug.org/texlive/}. % % \begin{description} % % \item[\LaTeX:] |pdflatex|, |xelatex|, or |lualatex|. % \DescribeProgram[requirement]{pdfLaTeX} % \DescribeProgram[requirement]{XeLaTeX} % \DescribeProgram[requirement]{LuaLaTeX} % % \item[The \pkg{lwarp} package:] This package. % % \item[The |lwarpmk| utility:] Provided along with this package. This % should be an operating-system executable in the same way that % |pdflatex| or |latexmk| is. It is possible to have the % \pkg{lwarp} package generate a local copy of |lwarpmk| % called |lwarpmk.lua|. % See \cref{sec:genlatexmk}. % % \item[luatex:] Used by the |lwarpmk| program to simplify and automate document generation. % % \item [xindy:] The \pkg{xindy} package is used by \pkg{lwarp} to create % indexes. On a MiK\TeX\ system this may have to be acquired separately, % but it is part of the regular installer as of mid 2015. % % \item[latexmk:] Optionally used by |lwarpmk| to compile \LaTeX\ code. % On a MiK\TeX\ system, Perl may need to be installed first. % % \item[pdfcrop:] Used to pull images out of the \LaTeX{} \PDF. % \DescribeProgram[requirement]{pdfcrop} % % \end{description} % % \item[Poppler PDF utilities:] \ % % \begin{description} % % \item[pdftotext:] Used to convert \PDF\ to text. % \DescribeProgram[requirement]{pdftotext}\index{Poppler} % % \item[pdfseparate:] Used to pull images out of the \LaTeX{} \PDF. % \DescribeProgram[requirement]{pdfseparate} % % \item[pdftocairo:] Used to convert images to \SVG. % \DescribeProgram[requirement]{pdftocairo} % % \end{description} % % These might be provided by your operating-system package manager. % % From Poppler: \url{poppler.freedesktop.org}. % % For MacOS\textregistered, see % \url{https://brew.sh/}, install Homebrew, then % \userentry{brew install poppler} % % For Windows, see: \\ % \url{https://sourceforge.net/projects/poppler-win32/} \quad and: \\ % \url{http://blog.alivate.com.au/poppler-windows/} % % \item[Perl:] \ % % This may be provided by your operating-system package manager, and is % required for some of the Poppler \PDF\ utilities. % % \url{perl.org}, \url{strawberryperl.com} % % \item[Automatically downloaded from the internet as required:] \ % \begin{description} % % \item[MathJax:] Optionally used to display math. % Automatically loaded from the MathJax website when needed. \\ % From: \url{mathjax.org} % \DescribeProgram[requirement]{MathJax} % % \end{description} % \end{description} % % \hrule % \end{table} % % \subsection{Installing the \protect\pkg{lwarp} package} % % There are several ways to install \pkg{lwarp}. These are listed here % with the preferred methods listed first: % % \begin{description} % \raggedright % % \item [Pre-installed:] Try entering into a command line: % \userentry{kpsewhich lwarp.sty} % % If a path to |lwarp.sty| is shown, then \pkg{lwarp} is already installed. % % \item [\TeX\ Live:]If using a \TeX\ Live distribution, % try installing via |tlmgr|: % \userentry{tlmgr install lwarp} % % \item [MiK\TeX:] If using MiK\TeX, try using the package installer to % install the package |lwarp|. % Also update the package |miktex-misc|, which will install the % |lwarpmk| executable. % \changes{v0.26}{2017/03/23}{Docs: Improved MiK\TeX\ install instructions.} % % \item [Operating-system package:] The operating-system package manager may % already have |lwarp|, perhaps as part of a set of \TeX-related packages. % % \item [CTAN TDS archive:] \pkg{lwarp} may be downloaded from the Comprehensive \TeX\ Archive: % \begin{enumerate} % \item See \url{http://ctan.org/pkg/lwarp} for the \pkg{lwarp} package. % \item Download the \TDS\ archive: |lwarp.tds.zip| % \item Find the \TeX\ |local| directory: % \begin{description} % \item[\TeX\ Live:] \ % % \userentry{kpsewhich -var-value TEXMFLOCAL} % \item[MiK\TeX:] \ % % In the ``Settings'' window, ``Roots'' tab, look for a local \TDS\ root. % \end{description} % This should be something like: % \begin{sourcedisplay} % |/usr/local/texlive/texmf-local/| % \end{sourcedisplay} % \item Unpack the archive in the \TDS\ local directory. % \item Renew the cache: % \userentry{mktexlsr} \quad —\,or\,— % \userentry{texhash} % % Or, for Windows MiK\TeX, start the program called |MiKTeX Settings (Admin)| % and click on the button called \textsf{Refresh FNDB}. % \end{enumerate} % % \item[CTAN \texttt{.dtx} and \texttt{.ins} files:] Another form of \TeX\ package % is the |.dtx| and |.ins| source files. These files are used to create % the documentation and |.sty| files. % % \begin{enumerate} % \item See \url{http://ctan.org/pkg/lwarp} for the \pkg{lwarp} package. % \item Download the zip archive |lwarp.zip| into your own |lwarp| directory. % \item Unpack |lwarp.zip|. % \item Locate the contents |lwarp.dtx| and |lwarp.ins| % \item Create the documentation: \userentry{pdflatex lwarp.dtx} (several times) % \item Create the |.sty| files: \userentry{pdflatex lwarp.ins} % \item Copy the |.sty| files somewhere such as the \TeX\ Live local tree % found in the previous \CTAN\ \TDS\ section, under the subdirectory: % \begin{sourcedisplay} % |/tex/latex/local/lwarp| % \end{sourcedisplay} % \item Copy the documentation |lwarp.pdf| to a |source| directory in the local tree, % such as: % \begin{sourcedisplay} % |/doc/local/lwarp| % \end{sourcedisplay} % \item Renew the cache: % \userentry{mktexlsr} \quad —\,or\,— % \userentry{texhash} % % Or, for Windows MiK\TeX, start the program called |MiKTeX Settings (Admin)| % and click on the button called \textsf{Refresh FNDB}. % % \item See \cref{sec:locallwarpmk} to generate your local copy of |lwarpmk|. % \item Once the local version of |lwarpmk.lua| is installed, it may be made % available system-wide as per \cref{sec:installlwarpmk}. % \end{enumerate} % \item[Project-local \CTAN\ \texttt{.dtx} and \texttt{.ins} files:] The % |.dtx| and |.ins| files may be downloaded to a project % directory, then compiled right there, alongside the % document source files. The resultant |*.sty| and |lwarpmk.lua| files % may be used as-is, so long as they are in the same directory % as the document source. This approach is especially useful if % you would like to temporarily test\margintag{Just testing!}\ % \pkg{lwarp} before deciding whether to permanently install it. % \end{description} % % \subsection{Installing the \protect\texttt{lwarpmk} utility} % \label{sec:installlwarpmk} % % \changes{v0.21}{2017/02/22}{Docs: Installing on Windows.} % % {\small % (Note: If |lwarpmk| is not already installed, % it is easiest to use a local copy instead of installing it system-wide. % See \cref{sec:locallwarpmk}.) % } % % After the \pkg{lwarp} package is installed, % you may need to setup the |lwarpmk| utility: % \begin{enumerate} % \item At a command line, try executing |lwarpmk|. If the |lwarpmk| help message % appears, then |lwarpmk| is already set up. % If not, it is easiest to generate and use a local copy. % See \cref{sec:locallwarpmk}. % % \item For MiK\TeX, try updating the |miktex-misc| package. This may install % the |lwarpmk| executable for you. % \changes{v0.26}{2017/03/23}{Docs: Improved MiK\TeX\ install instructions.} % % Otherwise, continue with the following: % % \item Locate the file |lwarpmk.lua|, which should be in the |scripts| directory % of the \TDS\ tree. On a \TeX\ Live or MiK\TeX\ system you may use % \userentry{kpsewhich lwarpmk.lua} % % (If the file is not found, you may also generate a local copy and use it instead. % See \cref{sec:locallwarpmk}.) % % \item Create |lwarpmk|: % \begin{description} % \item [Unix:] Create a symbolic link and make it executable: % \begin{enumerate} % \item Locate the \TeX\ Live binaries: % \userentry{kpsewhich -var-value TEXMFROOT} % This will be something like: % \begin{sourcedisplay} % |/usr/local/texlive/| % \end{sourcedisplay} % The binaries are then located in the |bin/| directory % under the root: % \begin{sourcedisplay} % |/usr/local/texlive//bin//| % \end{sourcedisplay} % In this directory you will find programs % such as |pdflatex| and |makeindex|. % \item In the binaries directory, % create a new symbolic link from the binaries directory to |lwarpmk.lua|: % \userentry{ln -s lwarpmk} % \item Make the link executable: % \userentry{chmod 0755 lwarpmk} % \end{enumerate} % \item [Windows \TeX\ Live:] Create a new |lwarpmk.exe| file: % \begin{enumerate} % \item Locate the \TeX\ Live binaries as shown above for Unix. % \item In the binaries directory, make a \emph{copy} of |runscript.exe| % and call it |lwarpmk.exe| % This will call the copy of |lwarpmk.lua| % which is in the |scripts| directory of the distribution. % \end{enumerate} % \item [Windows MiK\TeX:] Create a new |lwarpmk.bat| file: % \begin{enumerate} % \item Locate the binaries. These will be in a directory such as: % \begin{sourcedisplay} % |C:\Program Files\MiKTeX 2.9\miktex\bin\x64| % \end{sourcedisplay} % In this directory you will find programs % such as |pdflatex.exe| and |makeindex.exe|. % \item Create a new file named |lwarpmk.bat| containing: % \begin{sourcedisplay} % {\footnotesize % |texlua "C:\Program Files\MiKTeX 2.9\scripts\lwarp\lwarp.texlua" %*|} % \end{sourcedisplay} % This will call the copy of |lwarpmk.lua| % which is in the |scripts| directory of the distribution. % \end{enumerate} % \end{description} % \end{enumerate} % % \subsubsection{Using a local copy of \protect\pkg{lwarpmk}} % \label{sec:locallwarpmk} % It is also possible to use a local version of |lwarpmk|: % \begin{enumerate} % \item When compiling the tutorial in \cref{sec:tutorial}, % use the |lwarpmk| option for the \pkg{lwarp} package: % \begin{sourcedisplay} % |\usepackage[lwarpmk]{lwarp}| % \end{sourcedisplay} % \item When the tutorial is compiled with |pdflatex|, the file |lwarpmk.lua| % will be generated along with the other configuration files. % \item |lwarpmk.lua| may be used for this project: % \begin{description} % \item[Unix:] \ % \begin{enumerate} % \item Make |lwarpmk.lua| executable: \userentry{chmod 0755 lwarpmk.lua} % \item Compile documents with % \userentry{./lwarpmk.lua html} % \userentry{./lwarpmk.lua print} \quad etc. % \item It may be useful to rename or link to a version without the |.lua| suffix. % \end{enumerate} % \item[Windows:] \ % % Compile documents with either of the following, depending % on which command shell is being used: % \userentry{texlua lwarpmk.lua html} % \userentry{texlua lwarpmk.lua print} \quad etc. % % Or: % % \userentry{lwarpmk html} % \userentry{lwarpmk print} \quad etc. % \end{description} % \end{enumerate} % % % \subsection{Installing additional utilities} % % \changes{v0.27}{2017/04/02}{Docs: Installing utilities for MacOS.} % % \begin{description} % \item [To test for the existence of the additional utilities:] \ % % Enter the following in a command line. If each programs' version is % displayed, then that utility is already installed. % See \cref{tab:utility} on page \pageref{tab:utility}. % % \userentry{luatex --version} % \userentry{xindy --version} % \userentry{latexmk --version} % \userentry{perl --version} % \userentry{pdfcrop --version} % \userentry{pdftotext -v} % \userentry{pdfseparate --version} % \userentry{pdftocairo -v} % % \item [To install |xindy|, |latexmk|, and |pdfcrop|:] \ % % The \TeX\ utilities |xindy|, |latexmk|, and |pdfcrop| may be provided by % your operating system's package manager, and are also provided by % the \CTAN\ archive: % \begin{sourcedisplay} % \url{http://ctan.org/pkg/xindy} \\ % \url{http://ctan.org/pkg/latexmk} \\ % \url{http://ctan.org/pkg/pdfcrop} % \end{sourcedisplay} % % % \item [To install the Poppler utilities to a Unix/Linux system:] \ % \DescribeProgram[requirement]{pdftotext}\index{Poppler} % \DescribeProgram[requirement]{pdfseparate} % \DescribeProgram[requirement]{pdftocairo} % % The tools from the \textsc{Poppler} project should be provided by your % operating system's package manager. % % % \item [To install the Poppler utilities to a MacOS machine:] \ % \begin{enumerate} % \item Install Homebrew from \url{https://brew.sh/}: % \userentry{\small~ \\ \hspace*{-2in}/usr/bin/ruby -e "\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"} % \item Install the Poppler utilities: % \userentry{brew install poppler} % \end{enumerate} % % % \item [To install the Poppler utilities to a Windows machine:] \ % % \begin{enumerate} % \item See \cref{tab:utility} on \cpageref{tab:utility}. % \item Download and extract the Poppler utilities |pdftotext|, |pdfseparate|, % and |pdftocairo| to a directory, such as |Poppler|. % \item In the Start window, type "Path" to search for results % related to Path. Or, open the control panel and search for "Path". % \item Choose "Edit the system environment variables" in the control panel. % \item Choose the "Environment Variables" button. % \item Choose the "Path" variable, then the "Edit" button. % \item Choose the "New" button to make an additional entry. % \item Enter the |bin| directory of the Poppler utilities, such as: % \begin{sourcedisplay} % |C:\Users\\Desktop\Poppler\poppler-0.5_x86\poppler-0.5\bin| % \end{sourcedisplay} % % Be sure to include |\bin|. % \item Click "Ok" when done. % \end{enumerate} % % \item [To install Perl to a Windows machine:] \ % \DescribeProgram[requirement]{perl}\index{Perl} % \begin{enumerate} % \item Download and install a version of Perl, such as Straweberry Perl, % to a directory without a space in its name, such as |C:\Strawberry|. % \item Edit the Path as seen above for the Poppler utilities. % \item Enter the |bin| directory of the Perl utility, such as: % \begin{sourcedisplay} % |C:\Strawberry\perl\bin| % \end{sourcedisplay} % % Be sure to include |\bin|. % \item Click "Ok" when done. % \end{enumerate} % % \end{description} % % \vfill % \textcolor{red}{\textbf{Any utilities installed by hand must be added to the |PATH|.}} % \vfill % % % % \clearpage % % \section{Tutorial} % \label{sec:tutorial} % % This section shows an example of how to create an \pkg{lwarp} document. % % % \subsection{Starting a new project} % % \changes{v0.21}{2017/02/23}{File \texttt{lwarp\_tutorial.txt} added.} % % \begin{enumerate} % % \item Create a new project directory called |tutorial|. % % \item Inside the |tutorial| directory, % \DescribeFile{tutorial.tex} % create a new file called |tutorial.tex|. % This may be done several ways: % \begin{description} % \item [Copy from the documentation PDF:] \ % % A listing is in \cref{fig:tutorial}, % which may be copied/pasted from the figure directly into your own editor, % depending on the quality of the \PDF\ viewer and editor, or: % % \item [Copy from the \pkg{lwarp} documentation directory:] \ % % Another copy may be found by entering into a command line: % \DescribeFile{lwarp_tutorial.txt} % \watchout[Note: |.txt| suffix!] % \userentry{texdoc -l lwarp\_tutorial.txt} % % This should be in the |doc/latex/lwarp/| directory along % with this \PDF\ documentation. % Copy |lwarp_tutorial.txt| directly into your |tutorial| directory, % renamed as |tutorial.tex|. % \end{description} % % \emph{When using Windows, use an editor other than Notepad, % \watchout[Bad formatting!] % since Notepad does not accept the end-of-line from a Unix text file.} % % \item Compile the project: \userentry{pdflatex tutorial.tex} % \quad (several times) % % (|xelatex| or |lualatex| may be used as well.) % % \item View the resulting |tutorial.pdf| with a \PDF\ viewer. % % \end{enumerate} % % % A number of new files are created when |tutorial.tex| is compiled, as % shown in \cref{fig:newprojectfiles}. These files are created by % the |lwarp| package. % % (Two of the new files are configuration files for the helper program |lwarpmk|. % Whenever a print version of the document is created, % the configuration files for |lwarpmk| are updated to % record the operating system, \LaTeX\ program (|pdflatex|, |xelatex|, or |lualatex|), % the filenames of the source code and \HTML\ output, and whether % the additional helper program |latexmk| will be used to compile the document.) % % % % \clearpage % % \begingroup % \captionof{figure}{tutorial.tex listing} % \label{fig:tutorial} % % \begin{center} % \footnotesize % \textcolor{red}{Note: There are two pages!} % \end{center} % % \small % % \VerbatimInput{lwarp_tutorial.txt} % % ^^A ************************************************************************** % ^^A NOTE: lwarp_tutorial.txt is located in the TDS doc directory! % ^^A Copy it to the source directory if you wish to recompile lwarp.dtx! % ^^A (It is stored in the doc directory so that texdoc can find it and % ^^A the user can copy it.) % ^^A ************************************************************************** % % \endgroup % % % \begin{table} % \caption{Files created along with the print version\label{fig:newprojectfiles}} % \begin{description} % % \item [|tutorial.pdf|:] The \PDF\ output from \LaTeX. % The print version of the document. % % \item [|tutorial\_html.tex|:] A small |.tex| file used to create % a parallel \HTML\ version of the document, which co-exists with usual % the \PDF\ version, and which will have its % own auxiliary files. In this way, both \PDF\ and \HTML\ % documents may co-exist side-by-side. % % \item [Auxiliary files:] The usual \LaTeX\ files |.aux|, |.log|, |.out|, |.toc|, |.lof|, |.idx|. % When an \HTML\ version of the document is created, |_html| versions % of the auxiliary files will also be generated. % % \item [|lwarpmk.conf|:] A configuration file for |lwarpmk|, % which is used to automate the compilation of \PDF\ or \HTML\ % versions of the document. % % \item [|tutorial.lwarpmkconf|:] Another configuration file used by |lwarpmk|, % which is only useful if you wish to have several projects % residing in the same directory. % % \item [|.css files|:] |lwarp.css|, |lwarp_formal.css|, |lwarp_sagebrush.css| % These files are standard for \pkg{lwarp}, and are not meant to be modified % by the user. % % \item [|sample\_project.css|:] An example of a user-customized \CSS\ file, % which may be used for project-specific changes to the \pkg{lwarp} defaults. % % \item [|lwarp.xdy|:] Used by \pkg{lwarp} while creating an index. % This file should not be modified by the user. % A custom file may be used instead, if necessary. % % \item [|lwarp\_mathjax.txt|:] Inserted into the \HTML\ files when % |MathJax| is used to display math. % This file should not be modified by the user. % % \item [|comment.cut|:] A temporary file used by \pkg{lwarp} to % conditionally process blocks of text. This file may be ignored. % \end{description} % % \hrule \medskip % \label{sec:genlatexmk} % When the |lwarpmk| option is given to the \pkg{lwarp} package: % \begin{description} % \item [|lwarpmk.lua|:] A local copy of the |lwarpmk| utility. % % On Unix-related operating systems this file must be made executable: % \begin{sourcedisplay} % |chmod u+x lwarpmk.lua| % \end{sourcedisplay} % % This may be useful to have to archive with a project for future use. % \end{description} % \end{table} % % % % \clearpage % % \subsection{Compiling the print version with \texttt{lwarpmk}} % % The |lwarpmk| utility program is used to compile either the printed or % the \HTML\ version of the document. % % |lwarpmk print| is used to recompile a printed version of the document. % % \begin{enumerate} % % \item Re-compile the print version: \userentry{lwarpmk print} % % |lwarpmk| prints an introduction then checks to see if the document % must be recompiled. If it seems that the files are up-to-date, then % |lwarpmk| informs you of that fact and then exits. % % \item Make a small change in the original document, % such as adding a space character. % % \item Recompile again. \userentry{lwarpmk print} % % The document is recompiled when a change is seen in the source. % Several compilations may be necessary to resolve cross-references. % % \item Force a recompile to occur. % % \userentry{lwarpmk again} % \userentry{lwarpmk print} % % |lwarpmk again| updates the date code for the file, % triggering a recompile the next time the document is made.\footnote{ % Although, when using the utility |latexmk| (introduced later), the changed date is % ignored and an actual change in contents must occur to cause a recompile.} % % \item Process the index.\index{index>processing}\footnote{A \texttt{lwarpmk printglossary} command is also % available to process a glossary produced with the \textsf{glossaries} package. % See \cref{sec:glossaries}.} % \userentry{lwarpmk printindex} % % \item Recompile again to include the index. % \userentry{lwarpmk print} % % \end{enumerate} % % Note that the \HTML\ customization commands are ignored while making the % print version. % % % \clearpage % % \subsection{Compiling the HTML version with \texttt{lwarpmk}} % % |lwarpmk html| is used to recompile an \HTML\ version of the document. % % \begin{enumerate} % \item Compile the \HTML\ version: % \userentry{lwarpmk html} % % \begin{enumerate} % \item |lwarpmk| uses \LaTeX\ to process |tutorial_html.tex| % to create \\ % |tutorial_html.pdf|. % \item |pdftotext| is then used to convert to the file |tutorial_html.html|. % This file is a plain-text file containing \HTML\ tags and % content for the entire document. % \item |lwarpmk| manually splits |tutorial_html.html| into % individual \HTML\ files according to the \HTML\ settings. % For this tutorial, the result is |tutorial.html| (the home page), % along with |First-chapter.html|\footnote{ % \texttt{First-chapter.html} % also contains the first section, even though the second % section is its own \HTML\ page. This behavior is % controlled by the boolean \texttt{CombineHigherDepths}.}, % |Some-math.html|, and the document's % index in |_Index.html|.\footnote{\texttt{index.html} is commonly % used as a homepage, so the document index is in \texttt{\_Index.html}.} % \end{enumerate} % % \item View the homepage in a web browser. % % \qquad Open the file |tutorial.html| in a web browser. % % Note that math is still displayed as its plain-text \LaTeX\ source % \margintag{math} % until the % images of the math expressions have been generated. Math may be % displayed as \SVG\ images or by a MathJax script, as seen in % \cref{sec:tutorialsvgmath,sec:tutorialmathjax}. % % \item Force a recompile: % \userentry{lwarpmk again} % \userentry{lwarpmk html} % \userentry{lwarpmk print} % % \item Process the \HTML\ index and recompile:\index{index>processing}\footnote{A \texttt{lwarpmk htmlglossary} command is also % available to process a glossary produced with the \textsf{glossaries} package. % See \cref{sec:glossaries}.} % \userentry{lwarpmk htmlindex} % \userentry{lwarpmk html} % % |_Index.html|, is updated for the new \LaTeX\ index. % % \item Reload the web page to see the added index. % \end{enumerate} % % % % \clearpage % % \subsection{Generating the SVG images} % \label{sec:tutorialsvgmath} % % By default \pkg{lwarp} represents math as \SVG\ images with % \margintag{math as \SVG\ images} % the \LaTeX\ source included in \attribute{alt} attributes. In this way, % the math displays as it was drawn by \LaTeX, and the \LaTeX\ source % may be copied and pasted into some other document. % % \pkg{lwarp} uses the same mechanism for |picture| and \tikz\ environments. % \margintag{\env{picture} and \tikz} % % \begin{enumerate} % \item Create the \SVG\ images: % \userentry{lwarpmk limages} % \userentry{lwarpmk html} % % \item Move to the tutorial's math page and reload. % % \item The math images are displayed using the same font and formatting % as the printed version. % % \item Copy/paste a math expression into a text editor to see the \LaTeX\ source. % \end{enumerate} % % \limitssvgimages % % \clearpage % % \subsection{Using MathJax for math} % \label{sec:tutorialmathjax} % % Math may also be represented using the MathJax Javascript project. % \margintag{math with MathJax} % % \begin{enumerate} % \item In the tutorial's source code, uncomment the |mathjax| package option for \pkg{lwarp}: % \begin{sourcedisplay} % mathjax, \% Use MathJax to display math. % \end{sourcedisplay} % % \item Recompile \userentry{lwarpmk html} % % \item Reload the math page. % \end{enumerate} % % MathJax requires web access unless a local copy of MathJax is available, % \watchout[MathJax requirements] % and it also requires that Javascript is enabled for the web page. % The math is rendered by MathJax. Right-click on math to see several % options for rendering, and for copying the \LaTeX\ source. % % While using MathJax has many advantages, it may not be able to represent % complex expressions or spacing adjustments as well as \LaTeX. % % % % \clearpage % \subsection{Changing the CSS style} % % \DescribeMacro{\CSSFilename} % \cs{CSSFilename} may be used to choose which |.css| file is used to display % each section of the web page. Use \cs{CSSFilename} before |\begin{document}| % to assign the style of the home page. % If different parts of the website should have different styles, % call \cs{CSSFilename} again before each section heading which creates a new file. % % The styles provided by \pkg{lwarp} include: % \begin{description} % \item[|lwarp.css|:] A default style if \cs{CSSFilename} is not used. This % style is comparable to a plain \LaTeX\ document. % To set this style, you may use |\CSSFilename{lwarp.css}|, or no \cs{CSSFilename} call at all. % \item[|lwarp\_formal.css|:] A formal style with a serif fonts and a traditional % look. % \item[|lwarp\_sagebrush.css|:] A style with muted colors, gradient backgrounds, % additional borders, and rounded corners. % \end{description} % % To see each style in use, change the \cs{CSSFilename} entry in the tutorial, % |lwarpmk html| again, and then reload the webpage. % % A customized style may also be created. % \margintag{Custom \CSS} % For each new project a file % called |sample_project.css| is generated. This may be renamed to % |.css| then used by assigning |\CSSFilename{.css}|. % % Note that |sample_project.css| is overwritten whenever \pkg{lwarp} % is loaded in print mode. % It is therefore important to rename the file \watchout[Rename it!] % to something like |.css| before % using it, so that your own changes are not overwritten. % % |.css| has an entry which loads |lwarp.css|, and this % entry may be changed to load |lwarp_formal.css| or |lwarp_sagebrush.css| if % desired. Additional changes to the \CSS\ may be made by making entries % later in the |.css| file. % % % % \clearpage % % \subsection{Customizing the HTML output} % \label{sec:htmlsettings} % \index{settings>HTML conversion} % \index{HTML>conversion settings} % % Several settings may be used to customize the \HTML\ output. % Watch for the correct placement of each!\watchout[Placement!] % % Note that if changes are made, % \watchout[Changes!] % it is best to first: % \begin{enumerate} % \item Clear all the \HTML, \PDF, and auxiliary files: \userentry{lwarpmk clearall} % \item Recompile the print version in order to recreate % the configuration files for |lwarpmk|: \userentry{lwarpmk print} % \item Finally, recompile the \HTML\ version with the new settings: \userentry{lwarpmk html} % \end{enumerate} % % \begin{description}[style=unboxed] % % \item[Options for the \pkg{lwarp} package:] \ \newline % Use the following as options for |\usepackage[]{lwarp}|: % % \begin{description} % % \ItemDescribeOption{HomeHTMLFilename} Filename of the homepage, without % the ``|.html|'' suffix. % Defaults to the \cs{BaseJobname}. A common setting is: % \begin{sourcedisplay} % |HomeHTMLFilename=index| % \end{sourcedisplay} % causing the % homepage to be the file |index.html|. Underscores are allowed in % \margintag{filename underscores} % |HomeHTMLFilename| and |HTMLFilename| options, but may need to be escaped % elsewhere, such as when appearing in a list: % \index{underscore>filename}\index{file>underscore} % \changes{v0.24}{2017/03/13}{Docs: Filename underscore.} % \begin{sourcedisplay} % \cs{item} [\cs{href}\{file\textcolor{red}{\textbackslash\_}name.pdf\}\{text\}] \textbackslash % \end{sourcedisplay} % % \ItemDescribeOption{HTMLFilename} A filename prefix for the rest of the \HTML\ web pages. % Useful for numbered web pages with a common prefix. May be empty. % % \ItemDescribeOption{latexmk} Controls whether % \pkg{lwarp} uses |latexmk| to % compile the document. This setting is written to |lwarpmk|'s configuration % files. Defaults to false. % % \ItemDescribeOption{mathsvg} Selects \SVG\ display for math output. (The default.) % % \ItemDescribeOption{mathjax} Selects MathJax for math output. % % \end{description} % % \item[Placed in the preamble before \texttt{\cs{begin}\{document\}}:] \ % % \begin{description} % % \ItemDescribeCounter{tocdepth} Sectioning depth of the table of contents. % See \cref{sec:stackdepths} for a list of \LaTeX{} stack depths. % % \ItemDescribeCounter{SideTOCDepth} Sectioning depth of the side\TOC. % Defaults to 1, causing the side\TOC\ to show sections but not subsections. % % Each subpage of the website has its own small table of contents % \margintag{side\TOC} % on the side (the ``side\TOC''). Its depth is set by |SideTOCDepth|. % This side\TOC\ is only shown if the web page is wide enough. % When using a narrow web browser window, % ``responsive web design'' is used to show the side\TOC\ at the top of the % page and a link back to ``Home'' at the bottom. % % \label{sec:filedepth} % It is recommended to set: % \begin{sourcedisplay} % |SideTOCDepth|\,=\,|FileDepth| % \end{sourcedisplay} % or % \begin{sourcedisplay} % |SideTOCDepth|\,=\,|FileDepth|+1 % \end{sourcedisplay} % % If |SideTOCDepth|\,<\,|FileDepth|, web pages will be inaccessible via the % side\TOC. \watchout % \index{file>inaccessible} % \index{page>inacessible} % \index{missing sections} % \index{section>missing} % % \ItemDescribeCounter{FileDepth} Sectioning depth of file splits. % Defaults to -5, causing the entire \HTML\ website to be one single file. % \begin{itemize} % \item To place the entire file into one \HTML\ page, use: % \begin{sourcedisplay} % |\setcounter{FileDepth}{-5}}| % \end{sourcedisplay} % \item To split the \HTML\ file at \cs{section} depth, use: % \begin{sourcedisplay} % |\setcounter{FileDepth}{1}}| % \end{sourcedisplay} % \item To ensure that the \HTML\ pages/files are accessible: % \watchout\\ % Place a \cs{tableofcontents} somewhere before the first section % break (therefore in the ``home page''), and set % \begin{sourcedisplay} % |tocdepth|\,>=\,|FileDepth| % \end{sourcedisplay} % \index{file>inaccessible} % \index{page>inacessible} % \index{missing sections} % \index{section>missing} % \end{itemize} % % \ItemDescribeBoolean{CombineHigherDepths} Combine a higher section with % its first lower subsections, down to the |FileDepth|. % Defaults to true. Set to false to simulate the concept of a chapter % opening on its own page, for example. % % The file splits are controlled by the counter |FileDepth| and % the boolean |CombineHigherDepths|. % Setting |FileDepth| to 0 splits the file % at chapters, 1 at sections, etc. |CombineHigherDepths| controls whether % to combine pages at levels higher than the chosen |FileDepth|, such as % in this tutorial where the page which opens the chapter also contains the % first section. % Be careful to set |tocdepth| and |SideTOCDepth| to allow % \watchout[Inaccesible pages!] % access to each page of the website. Set |tocdepth| and |SideTOCDepth| to be % greater than or equal to |FileDepth|. % % When making changes to the file structure, % \watchout[Lost in an old page!] % it is possible to end up % with the web browser pointing to an old file which is no longer in use. % When this occurs, changes to the web site will not appear in the browser, % even if reloading the page, because that page is no longer in use. % It is best to return to the home page, clean the files (|lwarpmk cleanall|), % change |FileDepth| and/or |CombineHigherDepths|, then finally recompile and % renavigate to the desired page using the new file structure. % % \ItemDescribeBoolean{FileSectionNames} If true, web page filenames are % derived from a sanitized version of the section names. If false, web pages % are numbered. Either way, the |HTMLFilename| option is used as a prefix. % % Example \HTML\ filenames: % \changes{v0.20}{2016/09/11}{Docs: Examples for generating \HTML\ file names.} % \label{sec:filenameexamples} % \margintag{HTML filenames} % \index{HTML>filename generation} % \begin{description} % \item[Numbered \HTML\ nodes:] \ % % Example: Homepage |index.html|, and |node-1|, |node-2|. % (See \cs{SetHTMLFileNumber} to number grouped by chapter, for example.) % \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4] % \usepackage[ % HomeHTMLFilename=index, % HTMLFilename={node-} % ]{lwarp} % \boolfalse{FileSectionNames} % \end{Verbatim} % % \item[Named \HTML\ sections, no prefix:] \ % % Example: |index.html|, and |About.html|, |Products.html| % \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4] % \usepackage[ % HomeHTMLFilename=index, % HTMLFilename={} % ]{lwarp} % \booltrue{FileSectionNames} % \end{Verbatim} % % \item[Named \HTML\ sections, with prefix:] \ % % Example: Homepage |mywebsite.html|, and additional pages such % as |mywebsite-About.html|, etc. % \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4] % \usepackage[ % HomeHTMLFilename=mywebsite, % HTMLFilename={mywebsite-} % ]{lwarp} % \booltrue{FileSectionNames} % \end{Verbatim} % \end{description} % % \ItemDescribeMacro{\abstractname} The name of the abstract. % This may also be over-written % by the \pkg{babel} package. Defaults to ``Abstract''. % % \end{description} % % % \item[Placed before \texttt{\cs{begin}\{document\}}, % or before any sectioning command which causes a file break:] \ % % \begin{description} % \ItemDescribeMacro{\CSSFilename} \marg{filename.css} \quad % Sets the \CSS\ file to use for the following % files. May be changed before each each sectioning command which would % cause a file split. % % The \CSS\ styles of the web pages are set by the \cs{CSSFilename} command. % If \cs{CSSFilename} is not used, a default plain style is used to mimic printed % \LaTeX\ output. |lwarp_sagebrush.css| is a semi-fancy colored style as shown % in this tutorial. Change it to |lwarp_formal.css| for a more formal look, % or comment out the \cs{CSSFilename} command to see the default. % \cs{CSSFilename} may be used before each file break to set the \CSS\ for % individual pagess of the website. % % \ItemDescribeMacro{\HTMLLanguage} The \HTML\ file's |html lang| tag. % Defaults to |en-US|. % % \ItemDescribeMacro{\HTMLAuthor} The \HTML\ header's meta author. % Defaults to \cs{theauthor}. % % \ItemDescribeMacro{\HTMLDescription} \marg{description} \quad % Sets the \HTML\ \attribute{description} tag for % the following files. May be changed before each each sectioning command which would % cause a file split. % % \ItemDescribeMacro{\HTMLFirstPageTop} \marg{contents} \quad % A user-definable custom action applied % to the top of the home page. Useful for logos, etc. % Defaults empty. % Ignored in print output. % % \ItemDescribeMacro{\HTMLPageTop} \marg{contents} \quad % A user-definable custom action applied to % the top of pages other than the home page. Useful for logos, etc. % Defaults empty. % |\LinkHome| may be used to place a link back to the homepage. % Ignored in print output. % % \ItemDescribeMacro{\HTMLPageBottom} \marg{contents} \quad % A user-definable custom action applied to the % bottom of each web page. % Useful for authors, copyright notices, contact information, etc. % Defaults empty. % |\LinkHome| may be used to place a link back to the homepage. % Ignored in print output. % % \end{description} % % % \needspace{2\baselineskip} % \item[Placed in the home page before the first sectioning command which causes a file break:] \ % % \begin{description} % \ItemDescribeMacro{\tableofcontents} % Used to place a table of contents on the home page. % This command must be used before the first file split, % \watchout[TOC on the homepage!] % so that a way is available to navigate to other files from the homepage. % % Links to each chapter/section are provided, as selected by |tocdepth|. % \end{description} % % % \needspace{2\baselineskip} % \item[Placed in the document wherever necessary:] \ % % \begin{description} % \ItemDescribeEnv{warpprint} An environment which is only used % while generating print output. Place here anything which does not % apply to \HTML\ and which may cause problems with \pkg{lwarp}. % If \pkg{lwarp} knows about and emulates or supports % a package then its related macros, lengths, counters, etc. probably won't have % to be placed inside a \env{warpprint} environment, but unknown packages % may cause problems which may be isolated from \pkg{lwarp} using this environment. % % \ItemDescribeEnv{warpHTML} An environment which is only used % while generating \HTML\ output. This is useful for website logos and % other items which have no purpose in printed output. % % \ItemDescribeMacro{\warpprintonly} \marg{contents} \quad % A macro version of the \env{warpprint} environment. % % \ItemDescribeMacro{\warpHTMLonly} \marg{contents} \quad % A macro version of the \env{warpHTML} environment. % \end{description} % % \end{description} % % % \clearpage % % \subsection{Using \texttt{latexmk}} % % |latexmk| is a \LaTeX\ utility used to monitor changes in source files % and recompile as needed. % % \begin{enumerate} % \item In the tutorial's source code uncomment the |latexmk| option for the % \pkg{lwarp} package: % \begin{sourcedisplay} % latexmk, \% Use latexmk to compile. % \end{sourcedisplay} % % \item Recompile the printed version of the document. % \userentry{lwarpmk print} % % \begin{sloppy} % \pkg{lwarp} updates its own configuration files (|lwarpmk.conf| and \newline % |tutorial.lwarpmkconf|) whenever the printed version of the document % is compiled. These configuration files remember that |lwarpmk| should % use |latexmk| to compile the document. % \end{sloppy} % % \item Recompile the document. % \userentry{lwarpmk print} \quad and/or % \userentry{lwarpmk html} % \end{enumerate} % % Changes are detected by comparing checksums % rather than modification times, so |lwarpmk again| will not trigger a % recompile, but |latexmk| has a much better awareness of changes than % the |lwarpmk| utility does and it is likely to correctly know when to % recompile. A recompile may be forced by making a small change to the source. % % % \clearpage % % \subsection{Using XeLaTeX or LuaLaTeX} % % \XeLaTeX\ or \LuaLaTeX\ may be used instead of \LaTeX. % % \begin{enumerate} % % \item Remove the auxiliary files for the project: % \userentry{lwarpmk cleanall} % % \item Use |xelatex| or |lualatex| to recompile the printed version. % \userentry{xelatex tutorial.tex} \quad -or- % \userentry{lualatex tutorial.tex} % % When the recompile occurs, % the configuration files for |lwarpmk| are modified to remember % which \TeX\ engine was used. \XeLaTeX\ or \LuaLaTeX\ will be used for % future runs of |lwarpmk|. % % \item To recompile the document: % \userentry{lwarpmk print} \quad -and- % \userentry{lwarpmk html} % % \item Also rememeber to update the indexes and recompile again. % \end{enumerate} % % % % \clearpage % % \subsection{Using a glossary} % % \changes{v0.29}{2017/04/15}{Docs: Using a glossary} % % \pkg{lwarp} supports the \pkg{glossaries} package, although this tutorial % does not supply an example. % % \DescribeOption{IndexLanguage} % To assign a language to be used while processing the index and glossary, % use the |IndexLanguage| option: % \index{language>glossary} % \index{language>index} % \index{glossary>language} % \index{index>language} % % \begin{Verbatim}[gobble=2,frame=lines] % \usepackage[IndexLanguage=english]{lwarp} % \end{Verbatim} % % \index{glossary>processing} % To process the glossary for the print version: % \index{glossary>processing} % \userentry{lwarpmk printglossary} % % To process the glossary for the \HTML\ version: % \userentry{lwarpmk htmlglossary} % % In each case, the document will have to be recompiled afterwards. % % % % % \clearpage % % \subsection{Cleaning auxiliary files} % % To remove the auxiliary files |.aux|, |.toc|, |.lof|, |.lot|, |.idx|, |.ind|, |.log|, % and |.gl*|: % \userentry{lwarpmk clean} % % % \subsection{Cleaning auxiliary and output files} % % To remove the auxiliary files, and also remove the |.pdf| and |.html| files: % \userentry{lwarpmk cleanall} % % % \subsection{Processing multiple projects in the same directory} % % It is possible to have several projects in the same directory. % |lwarpmk| has an optional parameter which is the document to compile. % % To create each project: % \userentry{pdflatex project\_a} % \userentry{pdflatex project\_b} % % Each project is given its own configuration file: % \begin{sourcedisplay} % |project_a.lwarpmkconf|, |project_b.lwarpmkconf| % \end{sourcedisplay} % % To compile each project with |lwarkmk|: % \userentry{lwarpmk print project\_a} % \userentry{lwarpmk html project\_b} % % % \subsection{Using the \texttt{make} utility} % % |lwarpmk| has an action which may be useful for integration with the % common |make| utility: % \begin{sourcedisplay} % |lwarpmk pdftohtml [project]| % \end{sourcedisplay} % % |make| may be used to compile the code to \PDF\ with \HTML\ % tags (|project_html.pdf|), then |lwarpmk| may be used to % convert each target to \HTML\ files. % % % \clearpage % % \section{Additional details} % % \label{sec:usage} % % % % \subsection{Font and UTF-8 support} % \label{sec:fonts} % \index{font>selection} % \index{Unicode>selection} % \index{UTF-8>selection} % \changes{v0.16}{2016/04/08}{Docs: Font and UTF-8 support.} % \changes{v0.16}{2016/04/08}{Lwarp no longer selects fonts.} % % \pkg{lwarp} uses |pdftotext| to convert \PDF\ output into UTF-8-encoded % text. This process requires that UTF-8 information be embedded in the \PDF\ % file, which usually prevents the use of bit-mapped fonts. % \index{font>bitmapped} % % While using |pdflatex|, if no font-related package is specified, the default % \margintag{vector fonts} % bit-mapped Computer Modern font is used, % \margintag{Computer Modern}% % \index{font>Computer Modern}\index{Computer Modern}% % \watchout% % so simply add % \begin{sourcedisplay} % |usepackage{lmodern}| % \end{sourcedisplay} % to the preamble to enable the related vector font instead, or use % \begin{sourcedisplay} % |\usepackage{dejavu}| % \end{sourcedisplay} % % \index{Deja Vu}% % \index{font>Deja Vu}% % \index{Unicode>enhanced coverage}% % \index{UTF-8>enhanced coverage}% % or other other font packages, which may provide an increased coverage of Unicode mappings. % Avoid bit-mapped fonts. % % \XeLaTeX{} and \LuaLaTeX{} users must use the \pkg{fontspec} package. % \watchout % Do NOT use \pkg{fontenc}! % % Place \pkg{fontspec} or \pkg{fontenc} and other font and UTF-8 related commands % after the |\documentclass| command and before |\usepackage{lwarp}|: % % \begin{enumerate} % \item |documentclass{article/book/report}| goes here, followed by any of: % \item Font and UTF-8 related commands: % \begin{itemize} % \item For \XeLaTeX{} or \LuaLaTeX: % \begin{itemize} % \item \pkg{fontspec} and font choices % \DescribePackage{fontspec} % % \medskip % \pkg{lwarp} sets the following to turn off \TeX{} ligatures during % \margintag{ligatures} % the generation of \HTML\ tags, and turn off common ligatures % in regular text, since older browsers may not display them correctly % and newer browsers can automatically re-create them. % \index{ligatures}\index{font>ligatures} % \vspace{-1ex} % \begin{Verbatim}[gobble=2,obeytabs,tabsize=4,frame=lines] % \defaultfontfeatures[\rmfamily]{Ligatures={NoCommon,TeX}} % \defaultfontfeatures[\sffamily]{Ligatures={NoCommon,TeX}} % \defaultfontfeatures[\ttfamily]{Ligatures=NoCommon} % \end{Verbatim} % \end{itemize} % \item For |pdflatex|: % \begin{itemize} % \item \pkg{lmodern} or other font-related packages % \DescribePackage{lmodern} % \index{font>packages} % \item \pkg{fontenc} % \DescribePackage{fontenc} % \item \pkg{inputenc} % \DescribePackage{inputenc} % \item \pkg{newunicodechar} % \DescribePackage{newunicodechar} % \item |\input glyphtounicode.tex| % \DescribeFile{glyphtounicode} % \item |\input glyphtounicode-cmr.tex% from the pdfx package| % \item |\pdfgentounicode=1| % \item \pkg{cmap} % \DescribePackage{cmap} % \item \pkg{textcomp} % \DescribePackage{textcomp} % \item \pkg{microtype} is automatically used by \pkg{lwarp} % \DescribePackage{microtype} % to turn off f,q,t,T,Q ligatures for the same % \margintag{ligatures} % browser-related reasons shown above. Also, the monospaced font is used % during \HTML\ tag generation to turn off \TeX{} ligatures. % \index{ligatures}\index{font>ligatures} % \end{itemize} % \end{itemize} % \item |\usepackage{lwarp}| (\cref{sec:loading}) goes after any of the above, followed by: % \item \ldots{} the rest of the preamble and the main document. % \end{enumerate} % % % \subsubsection{Indexes and UTF-8} % \index{UTF-8>index} % \index{index>UTF-8} % % \pkg{lwarp} uses the |xindy| program to processes indexes. % % While using |xelatex| or |lualatex|, |xindy| is used for the index. % Everything is handled in UTF-8 encoding, and should work as expected. % % While using |pdflatex|, the |texindy| program is used with the |-C utf8| option, % which is newly supported in recent distributions of \LaTeX. This option correctly % sorts index entries into headings while using Latin languages, but will not work % well with others. \XeLaTeX\ or \LuaLaTeX\ are recommended for non-Latin languages. % % For an older distribution of \LaTeX, it may be necessary to generate a local version of % |lwarpmk.lua| and modify it to remove the |-C utf8| option from the texindy call. % See \cref{sec:modifylwarpmk}. % % % % % \subsection{\protect\pkg{lwarp} package loading and options} % \label{sec:loading} % \index{settings>lwarp package options} % % \pkg{lwarp} supports |book|, |report|, and |article| classes. % % Load the \pkg{lwarp} package immediately after the font and UTF-8 setup commands. % \changes{v0.16}{2016/04/08}{Docs: Moved location of \cs{usepackage\{lwarp\}}.} % \changes{v0.19}{2016/05/25}{Docs: Math options.} % \DescribePackage{lwarp} % \index{lwarp>loading}\index{lwarp>options} % % \DescribeOption{warpprint} % \DescribeOption{warpHTML} % Select the |warpprint| option to generate print output (default), % or the |warpHTML| option to generate \HTMLfive{} output. % The default is print output, so the print version may be % compiled with the usual |pdflatex|, etc. % When \pkg{lwarp} is loaded in print mode, it creates % |_html.tex|, which sets the |warpHTML| option before calling % the user's source code |.tex|. In this way, |.tex| % can |\usepackage{lwarp}| without any options to create a printed version, % while |_html.tex| will create an \HTML\ version. % % \DescribeOption{mathsvg} % \DescribeOption{mathjax} % For math display, select |mathsvg| (default), or |mathjax|. % For more information about the math options, see \cref{sec:limitsmath}. % % See \cref{tab:options} for the full list of options. % % % \begin{table} % \caption{Package options\label{tab:options}} % \centering % \begin{tabular}{>{\ttfamily}lp{3.25in}} % Option & Description \\ \hline % warpprint & Generate print output, and also generate configuration files. \\ % warpHTML & Generate \HTML\ output. \\ % mathsvg & Show math using \SVG\ images. \\ % mathjax & Show math using MathJax. \\ % OSWindows & Force compatibility with MS-Windows. \\ % BaseJobname & The \cs{jobname} to use. % Set to the \cs{jobname} of the printed version even while generating \HTML. \\ % HomeHTMLFilename & The filename of the home page. \\ % HTMLFilename & A prefix for the filenames of the remaining web pages. \\ % IndexLanguage & The |xindy| language option used for index and glossary generation. \\ % latexmk & Boolean for |lwarpmk| to use |latexmk| for compiling documents. % Otherwise, |lwarpmk| attempts to recompile several times by itself. \\ % lwarpmk & Generate a local copy of |lwarpmk.lua|. \\ % xdyFilename & Tells |lwarpmk| to use a custom filename for |xindy|, instead of |lwarp.xdy|. \\ % \end{tabular} % \end{table} % % % % \subsection{Selecting the operating system} % \label{sec:OSportabilityusage} % \changes{v0.11}{2016/03/11}{Added section: Selecting the operating system.} % % \osportabilityusage % % % \subsection{Selecting actions for print or HTML output} % \label{sec:selectingoutput} % \index{settings>selecting output} % \changes{v0.15}{2016/04/05}{Docs: Clarify print/HTML output.} % % The following environments and macros are used to select actions which only apply % to either traditional \LaTeX{} print-formatted PDF generation, % or to \HTML\ generation. % % For most of built-in \LaTeX\ and many additional packages % there is user-level source code support or emulation, % so no special handling will be required. % For those cases which \pkg{lwarp} does not handle by itself, the % following environments and macros may be used to isolate sections % of code for print-only or \HTML-only. % % These environments are also useful for creating a special version of % the titlepage for print and another for \HTML. % \DescribeEnv{warpHTML} % Anything which is to be done only for \HTMLfive{} output % is surrounded by a |warpHTML| environment: % \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4] % \begin{warpHTML} % ... something to be done only during HTML generation % \end{warpHTML} % \end{Verbatim} % % \DescribeEnv{warpprint} % Anything which is to be done only for print output % is surrounded by a |warpprint| environment: % \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4] % \begin{warpprint} % ... something to be done only during traditional PDF generation % \end{warpprint} % \end{Verbatim} % % \DescribeEnv{warpall} % Anything which is to be done for any output % may be surrounded by a |warpall| environment. Doing so is optional. % \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4] % \begin{warpall} % ... something to be done during print PDF or HTML output % \end{warpall} % \end{Verbatim} % % % Macros are also provided for print-only or \HTML-only code: % % \DescribeMacro{\warpprintonly} \marg{actions} % % Performs the given actions only when print output is being generated. % % \DescribeMacro{\warpHTMLonly} \marg{actions} % % Performs the given actions only when \HTML\ output is being generated. % % % % \subsection{Commands to be placed into the \env{warpprint} environment} % \label{sec:printcommands} % % \changes{v0.14}{2016/03/26}{Docs: Commands into a warpprint environment.} % % Certain print-related commands should always be placed % inside a \env{warpprint} environment, or may need other special handling. % These are unrelated to \HTML\ output, but are hard to isolate automatically. % For example: % % \begin{itemize} % \item Paragraph formatting: \cs{parindent} \cs{parskip} % \item Manual page positions such as the \pkg{textpos} package, which is % emulated but only in a limited way. % \end{itemize} % % Some packages require additional setup commands. Where these packages are emulated % for \HTML, setup commands may work for the emulated \HTML\ output as well as for print % output. See the details for each package in this document for more information. % % Also see \cref{sec:troubleshooting}: \nameref{sec:troubleshooting}. % % % % % % % \subsection{Title page} % \label{sec:settitle} % \index{settings>title page} % % In the preamble, place an additional block of code to set the following: % \vspace{-2em} % \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4] % \title{Document Title} % One line only % \subtitle{Optional Document Subtitle \\ with optional multiple lines} % \author{Author One\affiliation{Affiliation One} \and % Author Two\affiliation{Affiliation Two} } % \date{Optional date} % \published{Optional Journal Name \\ Optional multiple lines} % \end{Verbatim} % % The title is used in the meta tags in the \HTML\ files, and the rest are used % in |\maketitle|. % % % \DescribeMacro{\maketitle} % Use |\maketitle| just after the |\begin{document}|, as this will establish % the title of the homepage. Optionally, use a |titlepage| environment instead. % % \DescribeEnv{titlepage} % The \env{titlepage} environment may be used to hold a custom title page. % The titlepage will be set in a \element{div} class |titlepage|, and \cs{printtitle}, etc.\ may be used % inside this environment. % % \DescribeEnv{titlingpage} % Another form of custom title page, where \cs{maketitle} is allowed, and % additional information may be included as well. % % \DescribeMacro{\title} \marg{title} % Avoid newlines in the |\title|; these will interfere with the % file break and \CSS\ detection. % \watchout % Use the |\subtitle| command instead. % In \HTML, the title will appear in a heading \element{h1}. % % \DescribeMacro{\author} \marg{author} % % In |\author|, use |\protect| before formatting commands such as |\textsc|. % \watchout % In \HTML, the author will appear in a \element{div} class |author|. % \cs{affiliation} is a new addition to \pkg{lwarp}. % % \DescribeMacro{\date} \marg{date} % % |\date| works as expected. % In \HTML, this will appear in a \element{div} class |titledate|. % % \DescribeMacro{\subtitle} \marg{subtitle} % % A new command which sets a subtitle. Newlines are allowed. % The default is empty. % In \HTML, this will appear in a \element{div} class |subtitle|. % % \DescribeMacro{\published} \marg{published} % % A new command which sets a publisher. % The default is empty. % In \HTML, this will appear in a \element{div} class |published|. % % % \DescribeMacro{\thanks} \marg{text} % % \cs{thanks} are allowed in the titlepage fields, and will be rendered % as \HTML\ notes at the bottom of the title page. % % % \subsection{HTML page meta descriptions} % % \label{sec:htmldescription} % \index{HTML>meta tag>description} % \index{description>HTML meta tag} % \index{meta tag, HTML>description} % \DescribeMacro{\HTMLDescription} \marg{A description of the web page.} % \quad The default is no description. % % Each page of \HTML\ output should have its own \HTML\ meta description, % which usually shows up in web search results, % \margintag{limitations} % is limited to around % 150 characters in length, and should not include the \acro{ASCII} double quote character ("). % % Use \cs{HTMLDescription} % \margintag{placement} % just before |\begin{document}| to set the description of the home page, % and also just before each sectioning command such as \cs{chapter} or \cs{section} % where a new file will be generated, depending on |FileDepth|. For example, if |FileDepth| is 1, % use \cs{HTMLDescription} just before each \cs{section} command, and that description will be % placed inside the \HTML\ page for that \cs{section}. The same descrition will be used for % all following \HTML\ files as well, until reset by a new \cs{HTMLDescription}. It is best % to use a unique description for each \HTML\ file. % % To disable the generation of \HTML\ description meta tags, % \margintag{disabling} % use:\\ % \hspace*{1em} |\HTMLDescription{}| % % % \subsection{HTML page meta author} % % \index{HTML>meta tag>author} % \index{author>HTML meta tag} % \index{meta tag, HTML>author} % \DescribeMacro{\HTMLAuthor} \marg{author} \quad Sets the contents % of the web page \element{meta name="author"} element. % Defaults to |\HTMLAuthor{\theauthor}|. % May be set empty to cancel the meta author tag. % % % \subsection{CSS} % % \label{sec:projectcss} % \DescribeFile{lwarp.css}\DescribeFile{project.css}\DescribeFile{sample_project.css}\label{sec:lwarpcss}It is best % to make a local project-specific \CSS\ file such as |project.css|, containing only % things which are different from |lwarp.css|. % |project.css| should refer to |lwarp.css| as follows: % \index{CSS>project-specific changes}\index{CSS>lwarp.css} % \index{settings>\CSS\ project-specific} % \vspace{-2ex} % \VerbatimInput[frame=lines]{sample_project.css} % % An example file called |sample_project.css| is provided, and may be renamed |project.css|. % % \label{sec:setcss} % % \DescribeMacro{\CSSFilename} % For each section at which \HTML\ files are split, % |\CSSFilename| may be used before the sectioning command to select a \CSS\ file for that and all % following sections. This may be changed numerous times throughout the file, resulting in % different \HTML\ pages having different \CSS\ files assigned: % \begin{Verbatim}[gobble=2,tabsize=4] % ... % \newCSS{myCSS.css} % \chapter{Another Chapter} % ... % \end{Verbatim} % \index{CSS>file selection} % \index{CSS>per HTML page} % \index{settings>CSS selection} % % % \subsection{Modifying \protect\texttt{xindy} index processing} % \label{sec:modifyxindy} % % \DescribeProgram{xindy} % \DescribeFile{lwarp.xdy} % \pkg{lwarpmk} uses the file |lwarp.xdy| to process the index. % \index{lwarp.xdy>customizing} % \index{xindy>customizing} % This file is over-written by \pkg{lwarp} whenever a print version of % the document is processed. % % To customize index processing: % \begin{enumerate} % \item Copy |lwarp.xdy| to a new filename such as |projectname.xdy| % \item Make changes to |projectname.xdy|. % Keep the line which says % \begin{Verbatim}[gobble=2,tabsize=4] % (markup-locref :open "\hyperindexref{" :close "}") % \end{Verbatim} % This line creates the hyperlinks for the \HTML\ index. During print output % \cs{hyperindexref} becomes a null function. % \item In the document source use the |xdyFilename| option for \pkg{lwarp}: % \DescribeOption{xdyFilename} % \begin{Verbatim}[gobble=2,tabsize=4] % \usepackage[ % ... other options ... % xdyFilename=projectname.xdy, % ]{lwarp} % \end{Verbatim} % \item Recompile the print version, which causes % \pkg{lwarp} to rewrite the |lwarpmk.conf| configuration file. % This tells |lwarpmk| to use the custom |projectname.xdy| file instead of |lwarp.xdy|. % \end{enumerate} % % % % % \section{Special cases and limitations} % \label{sec:limitations} % % \label{sec:successfulcommands} % \index{HTML>commands for a successful conversion} % % \changes{v0.14}{2016/03/26}{Docs: Commands for a successful \HTML\ conversion.} % \changes{v0.36}{2017/08/11}{Docs: Reorganized: Special cases and limitations.} % % Also see \cref{sec:troubleshooting}: \nameref{sec:troubleshooting}. % % Some commonly-used \LaTeX{} expressions should be modified to allow % for a smooth conversion to both \HTML\ and print-formatted outputs: % % % \subsection{Formatting} % % % \subsubsection{Text formatting} % % \limitstext % % \subsubsection{Horizontal space} % % \limitshspace % % % \subsubsection{Text alignment} % % Use the environments \env{center}, \env{flushright}, \env{flushleft} instead % of the macros \cs{centering}, \cs{raggedright}, \cs{raggedleft}. % % % \subsubsection{Accents} % % \limitsaccents % % % \subsubsection{Textcomp} % % \limitstextcomp % % % \subsubsection{Superscripts and other non-math uses of math mode} % % Use \cs{textsuperscript\{x\}} instead of |$^{x}$| % % \subsubsection{Empty \cs{item} followed by a new line of text or a nested list:} % % Use a trailing backslash: |\item[label] \| % \index{item>empty}\index{list item, empty} % % % \subsubsection{Filenames in lists} % % \index{underscore>filename}\index{file>underscore} % \changes{v0.24}{2017/03/13}{Docs: Filename underscore.} % Escape underscores in % \margintag{filename underscore} % the filenames: % \begin{sourcedisplay} % |\item[\href{file\_name.pdf}{text}]| % \end{sourcedisplay} % % % % \subsection{Boxes and minipages} % % % \subsubsection{Save Boxes} % % \changes{v0.27}{2017/04/04}{Docs: Limitations of saveboxes.} % % \limitssaveboxes % % % \subsubsection{Minipages} % \label{sec:minipages} % % \limitsminipage % % % \subsubsection{Side-by-side minipages} % % Place side-by-side minipages inside a |center| environment, % with horizontal space between them, such as \cs{quad}, \cs{qquad}, % \cs{hspace}, or \cs{hfill}. The result is similar in print and % \HTML. Do not use space commands at the start or end of the line. % % \subsubsection{Framed minipages and other environments} % \label{sec:framedminipages} % % \cs{fbox} can only be used around inline \element{span} items during % \HTML\ output, but \HTML\ cannot place a block element such as a \element{div} for a minipage % or a list inside of a \element{span}. Several options are provided for framing an object, % depending on which kind of object and which packages are loaded: % % For a framed object, options include: % \DescribeMacro{\fbox} % \DescribeMacro{\fboxBlock} % \DescribeEnv{fminipage} % \index{fbox>around a minipage} % \index{minipage>framed} % \index{framed objects} % \begin{description}[style=unboxed] % \item [To remove the frame in HTML output:] Place the \cs{fbox} command and % its closing brace inside \env{warpprint} environments. % This will nullify the frame for \HTML\ output. % \item [To frame the contents inline with some formatting losses in HTML:] % This is the default action of \cs{fbox} when enclosing a minipage. % \margintag{For inline text:} % During \HTML\ output, \cs{fbox} nullifies the \HTML\ tags % for \env{minipage}, \cs{parbox}, % and lists. The contents are included as inline text inside the % \cs{fbox}'s \element{span} of class |framebox|. % For lists, line breaks are converted to \HTML\ breaks. % The result is a plain-text inline version of the contents, framed inline % with the surrounding text, but lacking any extra \HTML\ markup. % \item [To frame the contents on their own line with improved formatting in HTML:] A new % command \cs{fboxBlock} is included, % \margintag{For inline \env{minipage} and lists:} % intended to be a direct replacement % for \cs{fbox} for cases where the \cs{fbox} surrounds a minipage, table, or list. % For print output, this behaves as \cs{fbox}. % For \HTML\ output, the contents are placed % inside an \HTML\ \element{div} with the class |framed|, resulting in the contents % being placed on their own line with a frame surrounding them. % The contents preserve their \HTML\ formatting, so lists and minipages look nicer, % and valid \HTML\ is created for a \env{tabular}. % While an \cs{fbox} containing a \env{tabular} is valid \LaTeX\ code, the result % in \HTML\ is problematic since a table is a \element{div} not a \element{span}, % so use \cs{fboxBlock} around a \env{tabular}, or else place the \env{tabular} % inside a \env{minipage}, or use \env{fminipage}, described next. % Also see below regarding the ``Misplaced alignment tab character \&'' error. % \item [To create a framed minipage in both print and HTML:] A new environment \env{fminipage} % \margintag{For display \env{tabular}, minipages, and lists:} % is included. For print output, this is identical to \env{minipage}, except that % it is also framed. % For \HTML\ output, this forms a \element{div} of class |framed|, the contents % preserve their \HTML\ formatting, and valid \HTML\ is created for a \env{tabular}. % Also see below regarding the ``Misplaced alignment tab character \&'' error. % \item [To create colored frames and boxes:] See \cref{sec:xcolor} for \pkg{xcolor}'s % \margintag{colored boxes and frames:} % \cs{colorbox} and \cs{fcolorbox}, % and \pkg{lwarp}'s additional \cs{colorboxBlock} and \cs{fcolorboxBlock}. % \item [To frame tables or verbatim environments:] Place the contents % inside a \env{fminipage}, or perhaps a \cs{fboxBlock} for a \env{tabular}. % Also, if using \cs{fboxblock} with \env{tabular}, % \watchout[Misplaced alignment tab character \&] % you will have to use \cs{StartDefiningTabulars} % before the start of the macro which uses \cs{fboxBlock} and the \env{tabular}, % and \cs{EndDefiningTabulars} afterwards. % Also see the \pkg{lwarp} documentation for the \pkg{fancybox} package. % \item [To frame equations:] See \cref{sec:fancybox} for the \pkg{fancybox} package. % \item [For fancy framed minipages:] See packages \pkg{boxedminipage}, % \pkg{shadow}, \pkg{fancybox}, \pkg{framed}, \pkg{mdframed}. % \item [Custom environments:] Use a custom environment to create a sidebar, % containing a \env{BlockClass} environment % with custom \CSS\ formatting, % and |\warpprintonly{\hrule}| command: % \begin{Verbatim}[gobble=2,frame=lines] % \begin{BlockClass}{frameminipage}% ignored in print output % % use CSS to format div class ``framedminipage'' % \warpprintonly{\hrule} % only appears in print output % Contents % \warpprintonly{\hrule} % only appears in print output % \end{BlockClass} % \end{Verbatim} % \end{description} % % % \subsubsection{\pkg{fancybox} package} % % \limitsfancybox % % % \subsubsection{\pkg{mdframed} package} % % \limitsmdframed % % % % % \subsection{Cross-references} % % \limitsreferences % % \subsubsection{Page references} The printed page does not translate to the \HTML\ % page, so references to page numbers are converted to parentheses containing % \cs{pagerefPageFor}, which defaults to ``see '', % followed by a hyperlink to the appropriate % object. Ex: ``Sec.~\textcolor{red}{1.23} % on page (see sec.~\textcolor{red}{1.23})''. % \cs{pagerefPageFor} may be redefined to ``page for '', empty, etc. % % % \subsubsection{\pkg{cleveref} and \pkg{varioref} packages} % % \changes{v0.22}{2017/03/01}{\pkg{varioref}: Supported.} % % \limitspageref % % \subsubsection{Hyperlinks, \pkg{hyperref}, and \pkg{url}} % % \limitshyperlinks % % % \subsubsection{Footnotes and page notes} % % \limitsfootnotes % % % \subsection{Math} % \label{sec:limitsmath} % % \limitsmath % % For an example of using custom \LaTeX\ macros with MathJax, % \margintag{custom MathJax macros} % see page \pageref{ex:mathjaxmacros}. % % % \subsubsection{\pkg{ntheorem} package} % % \limitsntheorem % % % \subsubsection{\pkg{siunitx} package} % % \DescribePackage{siunitx} % \limitssiunitx % % % \subsubsection{\pkg{units} and \pkg{nicefrac} packages} % % \DescribePackage{units} % \DescribePackage{nicefrac} % \limitsnicefrac % % % \subsubsection{\pkg{newtxmath} package} % % \DescribePackage{newtxmath} % \limitsnewtxmath % % % \subsection{Graphics} % % \limitsgraphics % % % \subsubsection{\pkg{xcolor} package} % % \limitsxcolor % % % \subsection{Tabular} % \label{sec:limitstabular} % \limitstabular % % % \subsubsection{\pkg{longtable} package} % % \limitslongtable % % % % % \subsubsection{\pkg{float}, \pkg{trivfloat}, and/or \pkg{algorithmicx} together} % % \limitscombiningfloats % % % \subsubsection{\pkg{caption} and \pkg{subcaption} packages} % % \limitscaption % % % % \subsection{Floats} % % % \subsubsection{\pkg{subfig} package} % % \limitssubfig % % % \subsubsection{\pkg{floatrow} package} % % \limitsfloatrow % % % \subsection{Miscellaneous} % % \subsubsection{\pkg{abstract} package} % % \limitsabstract % % % \subsubsection{\pkg{verse} and \pkg{memoir}} % % \limitsverse % % % \subsubsection{\pkg{newclude} package} % % \changes{v0.14}{2016/03/29}{Docs: Newclude limitations.} % % \DescribePackage{newclude} % \limitsnewclude % % % % \subsubsection{\pkg{babel} package} % % \DescribePackage{babel} % ^^A \limitsbabelone % % \limitsbabeltwo % % % \subsubsection{\pkg{glossaries} package} % \label{sec:glossaries} % % \DescribePackage{glossaries} % \limitsglossaries % % % % % % % % \clearpage % % \section{EPUB conversion} % \label{sec:epub} % % \pkg{lwarp} does not produce \EPUB\ documents, % but it may be told to modify its \HTML\ output % to greatly assist in the conversion. % An external program may then be used to finish the conversion % to \EPUB. % % To assign the author's name for regular \pkg{lwarp} \HTML\ % \margintag{\element{meta} author} % files, and also for the \EPUB, % use \cs{HTMLAuthor} \marg{name}. This assigns the name to the % \element{meta} author element. It may be set empty, and it defaults to % \cs{theauthor}. % % A special boolean is provided to simplify the process of % converting \pkg{lwarp} \HTML\ output to \EPUB: % % \DescribeBoolean{FormatEPUB} % \begin{docsidebar} % \raggedright % Default false. % |FormatEPUB| changes \HTML\ output for easy \EPUB\ conversion % via an external program. Removes per-file headers, footers, and nav. % Adds footnotes per chapter/section. % \end{docsidebar} % \index{EPUB>HTML conversion settings} % \index{HTML>conversion settings>EPUB} % % To help convert \pkg{lwarp} \HTML\ output to \EPUB, add % \begin{sourcedisplay} % |\booltrue{FormatEPUB}| % \end{sourcedisplay} % to the project's source preamble after |\usepackage{lwarp}|. % The \EPUB\ version of the document cannot co-exist with the % regular \HTML\ version, so \userentry{lwarpmk cleanall} then % \userentry{lwarpmk html} % to recompile with the |FormatEPUB| boolean turned on. % Several changes are then made to the \HTML\ output: % \begin{itemize} % \item Headers, footers, and navigation are removed at file splits. % \item Any accumulated footnotes are printed at the bottom of each file split. % \end{itemize} % % The resulting files will be ready to be loaded into an \EPUB\ conversion % program, such as the open-source program Calibre (\url{https://calibre-ebook.com/}). % \index{Calibre}\index{EPUB>conversion software}\margintag{Calibre} % % The \EPUB\ conversion program must know what order the files are included. % For \pkg{lwarp} projects, set the \EPUB\ conversion software to % \watchout[search order] % do a breadth-first search of the files. % For Calibre, this option is found in % \begin{UIdisplay} % \textsf{Preferences $\to$ Plugins $\to$ File type plugins $\to$ HTML to Zip} % \end{UIdisplay} % Check the box \textsf{Add linked files in breadth first order.} % % The \EPUB-conversion program must also know where the section breaks are located. % \watchout[section breaks] % For a list of \pkg{lwarp}'s section headings, % see \cref{tab:depthsheadings}. % For example, an |article| % class document would break at \cs{section}, which is mapped to \HTML\ % heading level \element{h4}, whereas a |book| class document would break at \cs{chapter}, % which is \HTML\ heading level \element{h3}. % For Calibre, this option is found in % \begin{UIdisplay} % \textsf{Preferences $\to$ Conversion (Common Options) $\to$ % Structure Detection $\to$ Detect chapters at (XPath expression)} % \end{UIdisplay} % Select the ``magic wand'' to the right of this entry box, and set % the first entry % \begin{UIdisplay} % Math HTML tags with tag name: % \end{UIdisplay} % to \element{h4}. (Or \element{h3} for document classes with \cs{chapter}s.) % The \textsf{Detect chapters at} field should then show % \begin{UIdisplay} % //h:h4 \qquad \textrm{---\,or\,---} \qquad //h:h3 % \end{UIdisplay} % % This option is also available on the main tool bar at the \textsf{Convert books} % button. % % Once these settings have been made, the \pkg{lwarp}-generated \HTML\ files % may be loaded by Calibre, and then converted to an \EPUB. % % \begin{docsidebar}[MathJax support] % MathJax may be used in \EPUB\ documents. % Some e-readers include MathJax, but any given reader % may or may not have a recent version, and may or may not include % extensions such as support for \pkg{siunitx}. % % \pkg{lwarp} adds some modifications to \MathML\ to support equations numbered % by chapter. These modifications may not be compatible with the e-reader's % version of MathJax, so \pkg{lwarp} requests that a known version be loaded % instead. In some cases chapter numbering of equations still doesn't work. % % Until math support in \EPUB\ documents is improved, it is recommended to use % \SVG\ images instead of MathJax, especially for equations numbered by chapter, % or where \pkg{siunitx} support is important. % \end{docsidebar} % % % % % \clearpage % % \section{Word-processor conversion} % % \pkg{lwarp} may be told to modify its \HTML\ output to make it % easier to import the \HTML\ document into a word processor. % At the time of this writing, it seems that LibreOffice works best at % preserving table layout, but it still has some limitations, such as % an inability to automatically assign figure and table % frames and captions according to user-selected \HTML\ classes. % \pkg{lwarp} provides some assistance in locating these frame boundaries, % as shown below. % % % A special boolean is provided to simplify the process of % converting \pkg{lwarp} \HTML\ output to \EPUB: % % \DescribeBoolean{FormatWordProcessor} % \begin{docsidebar} % \raggedright % Default false. % Changes \HTML\ output for easier conversion % by a word processor. % Removes headers and nav, prints footnotes per section, % and also forces single-file output and turns off \HTML\ debug % comments. % \end{docsidebar} % \index{word processor>HTML conversion settings} % \index{HTML>conversion settings>word processor} % % To help modify \pkg{lwarp} \HTML\ output for easier % import to a word processor, add % \begin{sourcedisplay} % |\booltrue{FormatWordProcessor}| % \end{sourcedisplay} % to the project's source preamble after \pkg{lwarp} is loaded. % Several changes are then made to the \HTML\ output: % \begin{itemize} % \item Headers, footers, and navigation are removed at file splits. % \item Any accumulated footnotes are printed at the bottom of each file split. % These will have to be manually moved to their proper place in % the document. \pkg{lwarp} does not know where the page breaks % will be in the word processor's document, so the footnotes are % simply moved to the end of each sectional break. % \item Forces single-file output. % \item Turns off \HTML\ debugging comments. % These are comments appearing inside the \HTML\ code, % marking the opening/closing of sections and \element{div}s, % but they are no longer useful when the document has been % imported into a word processor. % \end{itemize} % % An additional boolean may be set to help mark float boundaries: % % \DescribeBoolean{HTMLMarkFloats} % \begin{docsidebar} % \raggedright % Default true. % Adds |=== table begin| or |=== figure begin|, and |=== end| % around floats while formatting for word processors. % This helps identify boundaries of floats to be manually converted % to word-processor frames. % \end{docsidebar} % \index{word processor>HTML conversion settings} % \index{HTML>conversion settings>word processor} % % When enabled, markers are placed around each float, helping the % user to identify float boundaries for further conversion to % word processor frames and captions. % % % \clearpage % % \section{Modifying \protect\pkg{lwarp}} % \pagestyle{pageheadfoot} % % Purely text-based packages probably will work as-is when generating % \HTML. % % Look to existing code for ideas on how to expand into new code. % % An environment may be converted to a |lateximage| then displayed % with an image of the resulting \LaTeX{} output. % See \cref{sec:picture} for an example of the |picture| environment. % % To create a custom \HTML\ block or inline \CSS\ class, % see \cref{sec:highlevelclasses}. % % \subsection{Creating an \protect\pkg{lwarp} version of a package} % % When creating \HTML, % \pkg{lwarp} redefines the \cs{usepackage} and \cs{RequirePackage} % macros such that it first looks to see if a |lwarp-.sty| % version exists. If so, the \pkg{lwarp} version is used instead. % This modular system allows users to create their own % versions of packages for \pkg{lwarp} to use for \HTML, simply by creating % a new package with a |lwarp-| prefix. If placed in the local % directory along with the source code, it will be seen by that project % alone. If placed alongside the other |lwarp-| packages where \TeX\ % can see it, then the user's new package will be seen by any documents % using \pkg{lwarp}. (Remember |mktexlsr| or |texhash|.) % % An |lwarp-.sty| package is only used during \HTML\ % generation. Its purpose is to pretend to be the original package, % while modify anything necessary to create a successful \HTML\ conversion. % For many packages it is sufficient to simply provide nullified macros, % lengths, counters, etc. for anything which the original package does, % while passing the raw text on to be typeset. See the pre-existing % |lwarp-| packages for examples. % % Anything the user might expect of the original package % must be replaced or emulated by the new |lwarp-| package, including % package options, user-adjustable counters, lengths, and booleans, and % conditional behaviors. % In many of these packages, most of the new definitions have a ``local'' prefix % according to the package name, and |@| characters inside the name, % which hides these names from the user. In most cases these macros % will not need to be emulated for \HTML\ output. Only the ``user-facing'' % macros need to be nullified or emulated. % % Each |lwarp-| package should first call either \cs{LWR@ProvidesPackageDrop} % or \cs{LWR@ProvidesPackagePass}. If |Drop|ped, the original print-version % package is ignored, and only the |lwarp-| version is used. % Use this where the original print version is useless for \HTML. % If |Pass|ed, the original package is loaded first, with the user-supplied options, % then the |lwarp-| version continues loading as well. % See \cref{sec:ntheorem} (\nameref{sec:ntheorem}) % for an example of selectively disabling user options for a package. % Use this when \HTML\ % output only requires some modifications of the original package. % For a case where the original package is usable without changes, there is no % need to create a |lwarp-| version. % % % \subsection{Testing \protect\pkg{lwarp}} % % \changes{v0.25}{2017/03/22}{Docs: Testing \protect\pkg{lwarp}.} % % When changes have been made, test the print output before testing the % \HTML. The print output compiles faster, and any errors in the printed % version will be easier to figure out than the \HTML\ version. % % Remember that the configuration files are only rewritten when compiling the % printed version of the document. % % Sometimes it is worth checking the |_html.pdf| file, which is the % \PDF\ containing \HTML\ tags. Also, |_html.html| has % the text conversion of these tags, before the file is split into individual % \HTML\ files. % % It is also worth checking the browser's tools for verifying the correctness % of \HTML\ and \CSS\ code. % % % \subsection{Modifying \protect\texttt{lwarpmk}} % \label{sec:modifylwarpmk} % % \changes{v0.28}{2017/04/14}{Docs: Modfying lwarpmk and index processing.} % % \DescribeProgram{lwarpmk} % \DescribeFile{lwarpmk.lua} % In most installations, |lwarpmk.lua| is an executable file located somewhere % \index{lwarpmk>customizing} % the operating system knows about, and it is called by typing ``|lwarpmk|'' into % a terminal. % % A project-local copy of |lwarpmk.lua| may be generated, modified, and then used to % compile documents: % \begin{enumerate} % \item Add the |lwarpmk| option to the \pkg{lwarp} package. % \item Recompile the printed version of the document. % The |lwarpmk| option causes \pkg{lwarp} to create a local copy of |lwarpmk.lua| % \item The |lwarpmk| option may now be removed from the \pkg{lwarp} package. % \item Copy and rename |lwarpmk.lua| to a new file such as |mymake.lua|. % \item Modify |mymake.lua| as desired. % \item If necessary, make |mymake.lua| executable. % \item Use |mymake.lua| instead of |lwarpmk.lua|. % \end{enumerate} % % To adjust the command-line arguments for compiling the document, % look in |mymake.lua| for ``|latexname|''. % % To adjust the command-line arguments for processing the index, % look for ``|xindy|''. % % % % % \clearpage % % \section{Troubleshooting} % \label{sec:troubleshooting} % \index{FAQ}\index{Frequently Asked Questions}\index{bugs} % \index{troubleshooting}\index{problems}\index{error messages} % \index{debugging} % % \subsection{Using the \protect\texttt{lwarp.sty} package} % % Also see: \\ % \Cref{sec:printcommands}: \nameref{sec:printcommands} \\ % \Cref{sec:successfulcommands}: \nameref{sec:successfulcommands} \\ % \Cref{sec:limitations}: \nameref{sec:limitations} % % \changes{v0.14}{2016/03/26}{Docs: Troubleshooting cross-references.} % \changes{v0.16}{2016/04/08}{Docs: Text not converting.} % \changes{v0.34}{2017/08/08}{Docs: Misplaced alignment character.} % % \begin{description} % % \item [Text is not converting:] ~ % \begin{itemize} % \item Font-related UTF-8 information must be embedded in the \PDF\ file. % See \cref{sec:fonts} regarding vector fonts. % \end{itemize} % % \item [Undefined HTML settings:] \ % \begin{itemize} % \item See the warning regarding the placement of the \HTML\ settings % at \cref{sec:htmlsettings}. % \end{itemize} % % \item [Misplaced alignment character \&:] \ % \begin{itemize} % \item If using \env{tabular} inside a \cs{fbox} or other macro, % use \cs{StartDefiningTabulars} before the definition, and % \cs{EndDefiningTabulars} after. See \cref{sec:limitstabular} % \end{itemize} % % \item [Obscure error messages:] ~ % \begin{itemize} % \item Be sure that a print version of the document compiles and % that your document's \LaTeX{} code is correct, before attempting % to generate an \HTML\ version. % \end{itemize} % % \item [Missing sections:] ~ % \begin{itemize} % \item See \cref{sec:filedepth} regarding the % |FileDepth| and |SideTOCDepth| counters, % and the use of \cs{tableofcontents} in the home page. % \end{itemize} % % \item [Missing HTML files:] \ % \item See the warning regarding changes to the \HTML\ settings % at \cref{sec:htmlsettings}. % % \item [Missing / incorrect cross-references:] ~ % \index{cross-references>missing or incorrect} % \begin{itemize} % \item Use |lwarpmk again| followed % by |lwarpmk html| or |lwarpmk print| to compile the document one more time. % \item \limitsreferences % \item \limitspageref % \end{itemize} % % \item [Em-dashes or En-dashes in listing captions and titles:] \ % % Use \XeLaTeX\ or \LuaLaTeX. % % \item [Floats out of sequence:] ~ % \begin{description} % \item [Mixed ``Here'' and floating:] Floats [H]ere and regular floats may % become out of order. \cs{clearpage} if necessary. % \item [Caption setup:] With \cs{captionsetup} set the positions for % the captions |above| or |below| to match their use in the source code. % \end{description} % % \item [Print document contains \HTML\ tags:] ~ % \begin{itemize} % \item Be sure that the document % selects |\usepackage[warpprint]{lwarp}| instead of |[warpHTML]|. % \end{itemize} % \item [HTML document contains a single unformatted print % document:] ~ % \begin{itemize} % \item Be sure that the document % selects |\usepackage[warpHTML]{lwarp}| instead of |[warpprint]|. % \end{itemize} % % \item [Images are appearing in strange places:] ~ % \index{images>in strange places} % \begin{itemize} % \item |lwarpmk limages| to refresh the |lateximage| images. % \end{itemize} % % \item[SVG images:] \limitssvgimages % % \item [``Leaders not followed by proper glue'':] This can be caused by % a missing |l@| or |l@| definition. % See \pkg{lwarp}'s definitions for examples. % % \item [Plain-looking document:] ~ % \begin{itemize} % \item The document's \CSS\ stylesheet may not be available, or may be % linked incorrectly. Verify any \cs{CSSFilename} statements point to % a valid \CSS\ file. % \end{itemize} % % \item [Broken fragments of HTML:] ~ % \begin{itemize} % \item Check the \PDF\ file used to create \HTML\ % to see if the tags overflowed the margin. % (This is why such large page size and margins are used.) % \end{itemize} % % \item [Changes do not seem to be taking effect:] ~ % \begin{itemize} % \item Be sure to |lwarpmk clean|, recompile, then start by reloading the home page. % You may have been looking at an older version of the document. % If you changed a section name, you may have been looking at % the file for the old name. % \item See the warning regarding changes to the \HTML\ settings % at \cref{sec:htmlsettings}. % \item Verify that the proper \CSS\ is actually being used. % \item The browser may compensate for some subtle changes, such as % automatically generating ligatures, reflowing text, etc. % \end{itemize} % % \item [Un-matched conditional compiles:] ~ % \begin{itemize} % \item Verify the proper |begin|/|end| of |warpprint|, |warpHTML|, and |warpall| environments. % \end{itemize} % % \end{description} % % % \subsubsection{Debug tracing output} % % \DescribeMacro{\tracinglwarp} % When \cs{tracinglwarp} is used, \pkg{lwarp} will add extra % tracing messages to the |.log| file. The last several messages % may help track down errors. % % Place \cs{tracinglwarp} just after |\usepackage{lwarp}| to % activate tracing. % % % % % \subsection{Compiling the \protect\texttt{lwarp.dtx} file} % % \begin{description} % \item [\texttt{lwarp\_tutorial.tex}:] Copy or link |lwarp_tutorial.txt| % from the \acro{TDS} |doc| directory to the |source| directory, % or wherever you wish to compile the documentation. % This file is included verbatim into the documentation, but is in the |doc| % directory so that it may be found by |texdoc| and copied by the user. % \item [Illogical error messages caused by an out-of-sync |lwarp.sty| file:] ~ % \begin{enumerate} % \item Delete the |lwarp.sty| file. % \item |pdflatex lwarp.ins| to generate a new |lwarp.sty| file. % \item |pdflatex lwarp.dtx| to recompile the |lwarp.pdf| documentation. % \end{enumerate} % % \item [Un-nested environments:]~ % % Be sure to properly nest: % \begin{itemize} % \item |\begin{macrocode}| and |\end{macrocode}| % \item |\begin{macro}| and |\end{macro}| % \item |\begin{environment}| and |\end{environment}| % \end{itemize} % \end{description} % % % % % \StopEventually{\PrintChanges\PrintIndex} % % % % % \section{Implementation} % % % This package is perhaps best described as a large collection of smaller % individual technical challenges, % in many cases solved through a number of \sout{crude hacks} clever tricks. % Reference sources are % given for many of the solutions, and a quick internet search will provide % additional possibilities. % % Judgement calls were made, and are often commented. Improvements are possible. % The author is open to ideas and suggestions. % % Packages were patched for re-use where they provided significant functionality. % Examples include \pkg{xcolor} with its color models and conversion to \HTML\ % color output, and \pkg{siunitx} which provides many number and unit-formatting % options, almost all of which are available in pure-text form, and thus % easily used by \cmds{pdftotext}. % % Packages were emulated where their primary purpose was visual formatting which is not % relevent to \HTML\ output. For example, packages related to sectioning % are already patched by numerous other packages, creating a difficult number of % combinations to try to support, and yet in \HTML\ output all of the % formatting is thrown away, so these packages are merely emulated. % % Packages with graphical output are allowed as-is, but must be nested inside a % \env{lateximage} environment to preserve the graphics. % % There is still room to improve the factoring of the code, and doing so will become % important if support for other output formats is added. Rather than wait until the % code is pristine, the author felt it best to publish early and accept input before % pushing on towards a perhaps less-than-ideal solution. % % % Testing has primarily been done with the Iceweasel/Firefox browser. % % % \section{Stack depths} % \label{sec:stackdepths} % \index{HTML>headings} % \index{section>depths}\index{stack depths} % % Stacks are created to track depth inside the \LaTeX{} document structure. % This depth is translated to \HTML\ headings as shown % in \cref{tab:depthsheadings}. % ``Depth'' here is not % depth in the traditional computer-science stack-usage sense, but rather a % representation of the nesting depth inside the \LaTeX{} document structure. % % When starting a new section, the program first must close out any existing % sections and lists of a deeper level to keep the \HTML\ tags nested correctly. % % \begin{table} % \caption{Section depths and HTML headings\label{tab:depthsheadings}} % \begin{tabular}{lcl} % \toprule % Section & \parbox[c]{.35in}{\LaTeX{} depth} & \HTML\ headings \\ % \midrule % title of the entire website & & \element{h1} \\ % none & -5 & new for this package \\ % book & -2 & \textbf{not yet used} \\ % part & -1 & \element{h2} \\ % chapter & 0 & \element{h3} \\ % section & 1 & \element{h4} \\ % subsection & 2 & \element{h5} \\ % subsubsection & 3 & \element{h6} \\ % paragraph & 4 & \element{span class = "paragraph"} \\ % subparagraph & 5 & \element{span class = "subparagraph"} \\ % listitem & 7 & new for this package, used for list items \\ % \bottomrule % \end{tabular} % \end{table} % % Support for the \pkg{memoir} package will require the addition of a |book| % level, which may push the \HTML\ headings down a step, and also cause % |subsubsection| to become a \element{div} due to a limit of six \HTML\ headings. % % It is possible to use \HTMLfive{} \element{section} and \element{h1} for all levels, % but this may not be well-recognized by older browsers. % % Fixed levels for parts and chapters allow the \CSS\ to remain fixed as well. % % % \clearpage % % % % \section{Source Code} % This is where the documented source code for \pkg{lwarp} begins, % continuing through the following sections all the way to the % change log and index at the end of this document. % % \index{numbers>left margin}\index{line numbers} % \index{margin>numbers}\index{margin>tags} % \documentationnotes % \index{warning icon}\index{danger icon}\index{icon>warning} % \index{for>HTML output}\index{for>PRINT output}\index{for>HTML \& PRINT} % \changes{v0.15}{2016/04/05}{Docs: Added warning icons for items needing % special attention.} % % \vfill % % \begin{center} % \pkg{lwarp} source code begins on the following page. % \end{center} % % % % \clearpage % % \section{Detecting the \TeX\ Engine — pdflatex, lualatex, xelatex} % % \begin{macrocode} \RequirePackage{iftex} \ifLuaTeX \RequirePackage{luatex85}% until the geometry package is updated \fi % \end{macrocode} % % % % \section{Unicode Input Characters} % \changes{v0.18}{2016/05/17}{PDF Unicode input characters.} % \index{Unicode>input characters} % % \codeall % % If using |pdflatex|, convert a minimal set of Unicode characters. % Additional characters may be defined by the user, as needed. % % A commonly-used multiply symbol is declared to be \cs{texttimes}. % % The first arguments of \cs{newunicodechar} below are text ligatures in % the source code, even though they are not printed in the following % listing. % \begin{macrocode} \RequirePackage{newunicodechar} \newunicodechar{⨯}{\texttimes} \ifPDFTeX \newunicodechar{ff}{ff}% the first arguments are ligatures \newunicodechar{fi}{fi} \newunicodechar{fl}{fl} \newunicodechar{ffi}{ffi} \newunicodechar{ffl}{ffl} \newunicodechar{—}{---} \newunicodechar{–}{--} % \end{macrocode} % In PDF\TeX, preserve upright quotes in verbatim text: % \begin{macrocode} \RequirePackage{upquote} \else \fi % \end{macrocode} % % \clearpage % % \section{Early package requirements} % % \DescribePackage{etoolbox} % Provides |\ifbool| and other functions. % % \begin{macrocode} \RequirePackage{etoolbox}[2011/01/03] % requires v2.6 for \BeforeBeginEnvironment, etc. % \end{macrocode} % \DescribePackage{ifplatform} % Provides \cs{ifwindows} to try to automatically detect % Windows OS. % % \begin{macrocode} \RequirePackage{ifplatform}% sense op-system platform % \end{macrocode} % % % % % \DescribePackage{letltxmacro} % Used to redefine \cs{textbf} and friends. % % \begin{macrocode} \RequirePackage{letltxmacro} % \end{macrocode} % % \clearpage % % % \section{Operating-System portability} % \label{sec:OSportability} % \changes{v0.11}{2016/03/11}{Added section: Operating-System portability.} % % \osportabilityusage % % % % \subsection{Common portability code} % % \DescribeBoolean{usingOSWindows} Set if the |OSWindows| option is used. % \begin{macrocode} \newbool{usingOSWindows} \boolfalse{usingOSWindows} % \end{macrocode} % % \subsection{Unix, Linux, and Mac\,OS} % \begin{macro}{\OSPathSymbol} % Symbol used to separate directories in a path. % \begin{macrocode} \newcommand*{\OSPathSymbol}{/} % \end{macrocode} % \end{macro} % \subsection{MS-Windows} % For MS-Windows: % % \begin{macro}{\LWR@setOSWindows} % Set defaults for the MS-Windows operating system. % \pkg{lwarp} attempts to auto-detect the operatings system, % and the |OSWindows| option may also be used to force % MS-Windows compatibility. % % \changes{v0.20}{2016/12/19}{Auto-detects operating system.} % % \begin{macrocode} \newcommand*{\LWR@setOSWindows} { \booltrue{usingOSWindows} \renewcommand*{\OSPathSymbol}{\@backslashchar} } % \end{macrocode} % \end{macro} % % Test for windows during compile. The user may also specify % |OSWindows| package option in case this test fails. % \begin{macrocode} \ifwindows \LWR@setOSWindows \fi % \end{macrocode} % % \section{Package options} % \label{sec:handlingpackageoptions} % % % \DescribePackage{kvoptions} % Allows key/value package options. % \begin{macrocode} \RequirePackage{kvoptions} \SetupKeyvalOptions{family=LWR,prefix=LWR@} % \end{macrocode} % \DescribeBoolean{warpingprint} % \DescribeBoolean{warpingHTML} % \DescribeBoolean{mathjax} % % Set to true/false depending on the package option selections for % print/\HTML/\EPUB\ output and mathsvg/mathjax: % \begin{macrocode} \newbool{warpingprint} \newbool{warpingHTML} \newbool{mathjax} % \end{macrocode} % % % The default is print output, % \margintag{defaults} % and \SVG\ math if the user chose \HTML\ output. % \begin{macrocode} \booltrue{warpingprint}% \boolfalse{warpingHTML}% \boolfalse{mathjax}% % \end{macrocode} % % % % \DescribeOption{warpprint} % If the |warpprint| option is given, boolean |warpingprint| is true and boolean |warpingHTML| is false, % and may be used for |\ifbool| tests. % % % \begin{macrocode} \DeclareVoidOption{warpprint}{% \PackageInfo{lwarp}{Using option 'warpprint'} \booltrue{warpingprint}% \boolfalse{warpingHTML}% } % \end{macrocode} % \begin{environment}{warpHTML} % Anything in the |warpHTML| environment will be generated for \HTML\ output only. % % \DescribeOption{warpHTML} % If the |warpHTML| option is given, boolean |warpingHTML| is true and boolean |warpingprint| is false, % and may be used for |\ifbool| tests. % % \begin{macrocode} \DeclareVoidOption{warpHTML}{% \PackageInfo{lwarp}{Using option 'warpHTML'}% \booltrue{warpingHTML}% \boolfalse{warpingprint}% } % \end{macrocode} % \end{environment} % % % % % \changes{v0.19}{2016/05/25}{Options: mathsvg and mathjax} % \DescribeOption{mathsvg} % Option |mathsvg| selects \SVG\ math display: % \index{math>mathsvg option} % \index{SVG>mathsvg option} % If the |mathsvg| option is given, boolean |mathjax| is false, and may be used for |\ifbool| tests. % \begin{macrocode} \DeclareVoidOption{mathsvg}{% \PackageInfo{lwarp}{Using option 'mathsvg'} \boolfalse{mathjax}% } % \end{macrocode} % % \DescribeOption{mathjax} % Option |mathjax| selects MathJax math display: % \index{math>mathjax option} % \index{MathJax>mathjax option} % If the |mathjax| option is given, boolean |mathjax| is true, may be used for |\ifbool| tests. % \begin{macrocode} \DeclareVoidOption{mathjax}{% \PackageInfo{lwarp}{Using option 'mathjax'} \booltrue{mathjax}% } % \end{macrocode} % \DescribeOption{BaseJobname} % Option |BaseJobname| sets the \cs{BaseJobname} for this document. % % This is the \cs{jobname} of the printed version, even if currently % compiling the \HTML\ version. % I.e. this is the \cs{jobname} without |_html| appended. % This is used to set \cs{HomeHTMLFilename} if the user did not provide one. % \begin{macrocode} \DeclareStringOption[\jobname]{BaseJobname} % \end{macrocode} % \DescribeOption{IndexLanguage} Sets the language to be assigned % in |lwarpmk|'s configuration files. This is then used by |lwarpmk| while % processing the index and glossary. % % \changes{v0.29}{2017/04/15}{Add: \protect\texttt{lwarpmklang} option for \pkg{lwarp}.} % \changes{v0.30}{2017/04/28}{Option \protect\texttt{lwarpmklang} changed % to \protect\texttt{IndexLanguage}.} % % \begin{macrocode} \DeclareStringOption[english]{IndexLanguage} % \end{macrocode} % \DescribeOption{xdyFilename} Selects a custom |.xdy| file. % The default is |lwarp.xdy|. % A customized file should be based on |lwarp.xdy|, and must retain % the line % \begin{Verbatim}[gobble=4] % (markup-locref :open "\hyperindexref{" :close "}") % \end{Verbatim} % % \changes{v0.30}{2017/04/28}{Option \protect\texttt{xdyFilename} added.} % % \begin{macrocode} \DeclareStringOption[lwarp.xdy]{xdyFilename} % \end{macrocode} % \DescribeOption{lwarpmk} Tells \pkg{lwarp} to % generate a local copy of |lwarpmk| called |lwarpmk.lua|. % Useful for archiving for future use. % This file may be made executable and acts just like |lwarpmk|. % % If |lwarpmk| option, creates a local copy of |lwarpmk.lua|: % \begin{macrocode} \newbool{LWR@creatinglwarpmk} \boolfalse{LWR@creatinglwarpmk} \DeclareVoidOption{lwarpmk}{ \PackageInfo{lwarp}{Using option 'lwarpmk'} \booltrue{LWR@creatinglwarpmk} } % \end{macrocode} % \DescribeOption{OSWindows} Tells \pkg{lwarp} to use MS-Windows compatibility. % Auto-detection of the operating system is attempted, and this option is only % necessary if the auto-detection fails. % See the automatically-generated |lwarpmk.conf| file to find out % whether the operating system was detected correctly. % % \changes{v0.30}{2017/04/27}{Option \texttt{OSWindows} replaces macro \cs{warpOSwindows}.} % % \begin{macrocode} \DeclareVoidOption{OSWindows}{ \PackageInfo{lwarp}{Using option 'OSWindows'} \LWR@setOSWindows } % \end{macrocode} % \DescribeOption{HomeHTMLFilename} % The filename of the homepage. % The default is the jobname. % This option is stored into \cs{LWR@HomeHTMLFilename}, % and later transferred into \cs{HomeHTMLFilename} for internal use. % % \changes{v0.30}{2017/04/27}{Options \texttt{HomeHTMLFilename} and \texttt{HTMLFilename} % replace macros \cs{HomeHTMLFilename} and \cs{HTMLFilename}.} % % \begin{macrocode} \DeclareStringOption[]{HomeHTMLFilename} % \end{macrocode} % \DescribeOption{HTMLFilename} % The filename prefix of web pages after the homepage. % The default is empty, no prefix. % This option is stored into \cs{LWR@HTMLFilename}, % and later transferred into \cs{HTMLFilename} for internal use. % % \begin{macrocode} \DeclareStringOption[]{HTMLFilename} % \end{macrocode} % \DescribeOption{latexmk} % Option |latexmk| tells |lwarpmk| to use |latexmk| when compiling documents. % % \changes{v0.30}{2017/04/29}{Option \protect\texttt{latexmk} replaces macro \cs{UseLatexmk}.} % % \begin{macrocode} \DeclareBoolOption[false]{latexmk} % \end{macrocode} % Execute the package options, with the defaults which have been set just above: % \margintag{Execute options} % \begin{macrocode} \ProcessKeyvalOptions*\relax % \end{macrocode} % Assign the \cs{BaseJobname} if the user hasn't provided one: % \begin{macrocode} \providecommand*{\BaseJobname}{\LWR@BaseJobname} % \end{macrocode} % Defaults unless already over-ridden by the user: % \begin{macrocode} \ifcsempty{LWR@HomeHTMLFilename}{ \newcommand*{\HomeHTMLFilename}{\BaseJobname} }{ \csedef{HomeHTMLFilename}{\LWR@HomeHTMLFilename} } \csedef{HTMLFilename}{\LWR@HTMLFilename} % \end{macrocode} % % % % \subsection{Conditional compilation} % % % % \begin{macro}{\warpprintonly} \marg{contents} % % Only process the contents if producing printed output. % \changes{v0.19}{2016/06/06}{Replaces \cs{rowprintedonly}.} % \begin{macrocode} \newcommand{\warpprintonly}[1]{\ifbool{warpingprint}{#1}{}} % \end{macrocode} % \end{macro} % % % \begin{macro}{\warpHTMLonly} \marg{contents} % % Only process the contents if producing \HTML\ output. % \changes{v0.19}{2016/06/06}{Added.} % \begin{macrocode} \newcommand{\warpHTMLonly}[1]{\ifbool{warpingHTML}{#1}{}} % \end{macrocode} % \end{macro} % % % \DescribePackage{comment} Provides conditional code blocks. % % \begin{macrocode} \RequirePackage{comment} % \end{macrocode} % Use |comment_print.cut| for print mode, and % |comment_html.cut| for \HTML\ mode. % This helps |latexmk| to more reliably know whether to recompile. % % \changes{v0.37}{2017/08/19}{\pkg{comment}: Maintains independent % cutfiles for print, \protect\HTML.} % % \begin{macrocode} \ifbool{warpingHTML}{ \def\DefaultCutFileName{\def\CommentCutFile{comment_html.cut}} }{} \ifbool{warpingprint}{ \def\DefaultCutFileName{\def\CommentCutFile{comment_print.cut}} }{} % \end{macrocode} % \begin{macrocode} \excludecomment{testing} % \end{macrocode} % \begin{environment}{warpall} % Anything in the |warpall| environment will be generated for print or \HTML\ outputs. % \begin{macrocode} \includecomment{warpall} % \end{macrocode} % \end{environment} % \begin{environment}{warpprint} % \begin{environment}{warpHTML} % Anything in the |warpprint| environment will be generated for print output only. % % For \HTML\ output: % \begin{macrocode} \ifbool{warpingHTML}{% \includecomment{warpHTML} } {\excludecomment{warpHTML}}% % \end{macrocode} % \begin{macrocode} \ifbool{warpingprint} {\includecomment{warpprint}} {\excludecomment{warpprint}} % \end{macrocode} % \end{environment} % \end{environment} % Optionally generate a local copy of |lwarpmk|. % Default to no. % \begin{macrocode} \ifbool{LWR@creatinglwarpmk} {\includecomment{LWR@createlwarpmk}} {\excludecomment{LWR@createlwarpmk}} % \end{macrocode} % % % % % % % \section{Misplaced packages} % % \changes{v0.21}{2017/02/22}{Add: Errors for misplaced packages.} % Several packages should only be loaded before \pkg{lwarp}, and % others should only be loaded after. % % Packages which should only be loaded before \pkg{lwarp} have their own % \begin{sourcedisplay} % |lwarp-.sty| % \end{sourcedisplay} % which will trigger an error if they are loaded after % \pkg{lwarp}. % Examples include \pkg{fontspec}, \pkg{inputenc}, \pkg{fontenc}, % and \pkg{newunicodechar}. % % % \begin{macro}{\LWR@loadafter} \marg{packagename} \quad % Error if this package was loaded before \pkg{lwarp}. % % \begin{macrocode} \newcommand*{\LWR@loadafter}[1]{% \@ifpackageloaded{#1} { \PackageError{lwarp} {Package #1, or one which uses #1, must be loaded after lwarp} {Move \detokenize{\usepackage}{#1} after \detokenize{\usepackage}{lwarp}. Package #1 may also be loaded by something else, which must also be moved after lwarp.} } {} } % \end{macrocode} % \end{macro} % \begin{macro}{\LWR@loadbefore} \marg{packagename} \quad % Error if this package is after \pkg{lwarp}. % % \changes{v0.33}{2017/07/06}{Fix: No \cs{PackageError} if already loaded.} % % \begin{macrocode} \newcommand*{\LWR@loadbefore}[1]{% \@ifpackageloaded{#1} {} { \PackageError{lwarp} {Package #1 must be loaded before lwarp} {Move \detokenize{\usepackage}{#1} before \detokenize{\usepackage}{lwarp}.} } } % \end{macrocode} % \end{macro} % \begin{macro}{\LWR@loadnever} \marg{badpackagename} \marg{replacementpkgname} % % The first packages is not supported, so tell the user to use the second instead. % % \changes{v0.25}{2017/03/16}{Added the ability to prevent conflicting packages.} % % \begin{macrocode} \newcommand*{\LWR@loadnever}[2]{% \PackageError{lwarp} {Package #1 is not supported by lwarp's HTML conversion. Package(s) #2 may be useful instead} {Package #1 might conflict with lwarp in some way, or is superceded by another package. For a possible alternative, see package(s) #2.} } % \end{macrocode} % \end{macro} % Packages which should only be loaded after \pkg{lwarp} are tested % here to trip an error of they have already been loaded. % % \changes{v0.25}{2017/03/16}{Fix: Allows XE\LaTeX\ and % \LuaLaTeX\ to preload graphics and graphicx.} % % The following packages must be loaded after \pkg{lwarp}: % \begin{macrocode} \LWR@loadafter{abstract} \LWR@loadafter{afterpage} \LWR@loadafter{algorithmicx} \LWR@loadafter{alltt} \LWR@loadafter{amsthm} \LWR@loadafter{array} \LWR@loadafter{balance} \LWR@loadafter{bookmark} \LWR@loadafter{booktabs} \LWR@loadafter{boxedminipage} \LWR@loadafter{boxedminipage2e} \LWR@loadafter{ccaption} \LWR@loadafter{changepage} \LWR@loadafter{crop} \LWR@loadafter{cutwin} \LWR@loadafter{dcolumn} \LWR@loadafter{draftwatermark} \LWR@loadafter{ellipsis} \LWR@loadafter{emptypage} \LWR@loadafter{enumerate} \LWR@loadafter{enumitem} \LWR@loadafter{epigraph} \LWR@loadafter{eso-pic} \LWR@loadafter{everypage} \LWR@loadafter{everyshi} \LWR@loadafter{extramarks} \LWR@loadafter{fancybox} \LWR@loadafter{fancyhdr} \LWR@loadafter{fancyvrb} \LWR@loadafter{figcaps} \LWR@loadafter{float} \LWR@loadafter{floatflt} \LWR@loadafter{floatpag} \LWR@loadafter{floatrow} \LWR@loadafter{flushend} \LWR@loadafter{ftnright} \LWR@loadafter{fullpage} \LWR@loadafter{geometry} \LWR@loadafter{glossaries} % \LWR@loadafter{graphics}% pre-loaded by xunicode % \LWR@loadafter{graphicx}% pre-loaded by xunicode \LWR@loadafter{hyperref} \LWR@loadafter{hyperxmp} \LWR@loadafter{idxlayout} \LWR@loadafter{indentfirst} \LWR@loadafter{keyfloat} \LWR@loadafter{layout} \LWR@loadafter{letterspace} \LWR@loadafter{lettrine} \LWR@loadafter{lips} \LWR@loadafter{listings} \LWR@loadafter{longtable} \LWR@loadafter{lscape} \LWR@loadafter{ltcaption} \LWR@loadafter{marginfit} \LWR@loadafter{marginfix} \LWR@loadafter{marginnote} \LWR@loadafter{mcaption} \LWR@loadafter{mdframed} \LWR@loadafter{microtype} \LWR@loadafter{moreverb} \LWR@loadafter{mparhack} %\LWR@loadafter{multicol}% loaded by ltxdoc \LWR@loadafter{multirow} \LWR@loadafter{nameref} \LWR@loadafter{needspace} \LWR@loadafter{newtxmath} \LWR@loadafter{nextpage} \LWR@loadafter{nowidow} \LWR@loadafter{ntheorem} \LWR@loadafter{pagenote} \LWR@loadafter{paralist} \LWR@loadafter{parskip} \LWR@loadafter{pdflscape} \LWR@loadafter{pdfsync} \LWR@loadafter{placeins} \LWR@loadafter{prelim2e} \LWR@loadafter{ragged2e} \LWR@loadafter{rotating} \LWR@loadafter{rotfloat} \LWR@loadafter{savetrees} \LWR@loadafter{setspace} \LWR@loadafter{shadow} \LWR@loadafter{showidx} \LWR@loadafter{showkeys} \LWR@loadafter{sidecap} \LWR@loadafter{sidenotes} \LWR@loadafter{soul} \LWR@loadafter{subfig} \LWR@loadafter{tabularx} \LWR@loadafter{tabulary} \LWR@loadafter{textpos} \LWR@loadafter{theorem} \LWR@loadafter{threeparttable} \LWR@loadafter{tikz} \LWR@loadafter{titleps} \LWR@loadafter{titlesec} \LWR@loadafter{titletoc} \LWR@loadafter{tocloft} \LWR@loadafter{transparent} \LWR@loadafter{trivfloat} \LWR@loadafter{ulem} \LWR@loadafter{upref} \LWR@loadafter{varioref} \LWR@loadafter{verse} \LWR@loadafter{wallpaper} \LWR@loadafter{wrapfig} \LWR@loadafter{xcolor} \LWR@loadafter{xfrac} \LWR@loadafter{xmpincl} % \end{macrocode} % \section{Required packages} % \label{sec:requiredpackages} % \index{packages>required} % \changes{v0.16}{2016/04/08}{Lwarp no longer selects fonts.} % These packages are automatically loaded by \pkg{lwarp} when generating % \HTML\ output. Some of them are also automatically loaded when % generating print output, but some are not. % % In the document preamble, create a \env{warpprint} environment, and place % inside it any of the following packages which are required and which % are labeled as ``Print: OK to Load in a \env{warpprint} environment''. % Those packages which are labeled as ``Print: Pre-Loaded'' % need not be placed into the document preamble. % \codeall % \begin{macrocode} \begin{warpall} % \end{macrocode} % \changes{v0.16}{2016/04/07}{Added XeLaTeX, LuaLaTeX support.} % See: \url{http://tex.stackexchange.com/a/47579}. % Detects \XeTeX{} and \LuaLaTeX: % \index{XeLaTeX>detection}\index{LuaLaTeX>detection} % \begin{macrocode} \RequirePackage{iftex} \newif\ifxetexorluatex \ifXeTeX \xetexorluatextrue \else \ifLuaTeX \xetexorluatextrue \else \xetexorluatexfalse \fi \fi % \end{macrocode} % \begin{macrocode} \end{warpall} % \end{macrocode} % \codehtml % \begin{macrocode} \begin{warpHTML} % \end{macrocode} % ^^A % ^^A % ^^A % For \XeTeX{} or \LuaLaTeX, use \pkg{fontspec}. % ^^A % \marginpar{\textcolor{blue}{\XeTeX{} or \LuaLaTeX{} only:}} % ^^A % % ^^A % See:\\ % ^^A % \href % ^^A % {http://tex.stackexchange.com/questions/2984/frequently-loaded-packages-differences-between-pdflatex-and-xelatex} % ^^A % {http://tex.stackexchange.com/questions/2984/\\ % ^^A % \hspace*{.25in}frequently-loaded-packages-differences-between-pdflatex-and-xelatex} % ^^A % % ^^A % \index{font>during conversion} % ^^A % For \XeLaTeX{} and \LuaLaTeX, uses DejaVu Serif for enhanced Cyrillic and Greek coverage. % ^^A % \index{Unicode>XeLaTeX \& LuaLaTeX} % \begin{macrocode} \ifxetexorluatex % ^^A \usepackage[no-math]{fontspec} % \end{macrocode} % ^^A \defaultfontfeatures{Ligatures=Common} % ^^A \setmainfont{DejaVu Serif} % ^^A \setsansfont{DejaVu Sans} % ^^A \setmonofont{DejaVu Sans Mono} % The monospaced font is used for \HTML\ tags, % so turn off its TeX ligatures and common ligatures: % \begin{macrocode} \defaultfontfeatures[\rmfamily]{Ligatures={NoCommon,TeX}} \defaultfontfeatures[\sffamily]{Ligatures={NoCommon,TeX}} \defaultfontfeatures[\ttfamily]{Ligatures=NoCommon} \else % \end{macrocode} % ^^A % For |pdflatex|, use \pkg{fontenc} and \pkg{lmodern}: % ^^A % \marginpar{\textcolor{blue}{|pdflatex| only:}} % ^^A % \index{Unicode>pdfLaTeX} % ^^A % \index{pdfLaTeX>Unicode support} % ^^A % \begin{macrocode} % ^^A \RequirePDFTeX % error if not pdflatex % ^^A % ^^A \input glyphtounicode.tex % ^^A \input glyphtounicode-cmr.tex% from the pdfx package % ^^A \pdfgentounicode=1 % ^^A % ^^A \usepackage{cmap}% help map Russian to unicode % ^^A \defaulthyphenchar=127% % ^^A % \end{macrocode} % ^^A % ^^A % \DescribePackage{lmodern} % ^^A % % ^^A % \pdflatexonly % ^^A % % ^^A % |pdftotext| works better with a vector font. % ^^A % This font choice does not control the \HTML\ file, but it does appear in the % ^^A % images generated from math expressions. % ^^A % \begin{macrocode} % ^^A \RequirePackage{lmodern} % ^^A % \end{macrocode} % ^^A % ^^A % ^^A % \DescribePackage{fontenc} % ^^A % % ^^A % \pdflatexonly % ^^A % % ^^A % \begin{macrocode} % ^^A \RequirePackage[T1]{fontenc} % ^^A % \end{macrocode} % ^^A % ^^A % ^^A % \DescribePackage{inputenc} % ^^A % % ^^A % \pdflatexonly % ^^A % % ^^A % \begin{macrocode} % ^^A \RequirePackage[utf8]{inputenc} % ^^A % \end{macrocode} % ^^A % \pdflatexonly % % \DescribePackage{microtype} % \changes{v0.18}{2016/05/18}{Microtype disabled during \HTML\ generation} % % Older browsers don't % \index{ligatures} % display ligatures. % \margintag{ligatures} % Turn off letter ligatures, keeping % \LaTeX{} dash and quote ligatures, which may fail on older browers % but at least won't corrupt written words. % \begin{macrocode} \RequirePackage {microtype} \microtypesetup{ protrusion=false, expansion=false, tracking=false, kerning=false, spacing=false} \DisableLigatures[f,q,t,T,Q]{encoding = *,family = *} % \end{macrocode} % ^^A % ^^A % ^^A % \DescribePackage{newunicodechar} % ^^A % % ^^A % % ^^A % \pdflatexonly % ^^A % % ^^A % Note that the font used by the source code listing may not correctly display the % ^^A % \watchout % ^^A % actual Unicode character contained in the \cs{newunicode\{\}} expression. % ^^A % The listing printout may not display ligatures or the dashes correctly. % ^^A % \begin{macrocode} % ^^A \RequirePackage{newunicodechar} % ^^A \newunicodechar{Í}{\IeC {\'I}} % ^^A \newunicodechar{ff}{ff}% ligatures % ^^A \newunicodechar{fi}{fi} % ^^A \newunicodechar{fl}{fl} % ^^A \newunicodechar{ffi}{ffi} % ^^A \newunicodechar{ffl}{ffl} % ^^A %% \newunicodechar{°}{\degree} % ^^A \newunicodechar{ρ}{\ensuremath{\rho}} % ^^A \newunicodechar{⨯}{\texttimes} % ^^A %% \newunicodechar{®}{\textregistered} % ^^A %% \newunicodechar{©}{\textcopyright} % ^^A \newunicodechar{—}{---}% emdash % ^^A \newunicodechar{–}{--}% endash % ^^A %% \newunicodechar{”}{''}% closing quote % ^^A %% \newunicodechar{“}{``}% opening quote % ^^A %% \newunicodechar{§}{\S} % ^^A %% \newunicodechar{¶}{\P} % ^^A %% \newunicodechar{†}{\dag} % ^^A %% \newunicodechar{‡}{\ddag} % ^^A % \end{macrocode} % ^^A % ^^A % ^^A % \DescribePackage{textcomp} % ^^A % % ^^A % % ^^A % \pdflatexonly % ^^A % % ^^A % Provides \cs{degree}, \cs{textquotesingle}, \cs{textmu}. % ^^A % \begin{macrocode} % ^^A \RequirePackage{textcomp} % ^^A % \end{macrocode} % ^^A % \begin{macrocode} \fi % \end{macrocode} % ^^A % \marginpar{\textcolor{blue}{End of \XeLaTeX, \LuaLaTeX, |pdflatex| choices.}} % ^^A % \begin{macrocode} \end{warpHTML} % \end{macrocode} % \DescribePackage{geometry} % Tactics to avoid unwanted page breaks and margin overflow: % \begin{itemize} % \item Uses a very long and wide page to minimize page breaks and margin overflow. % \item Uses a scriptsize font. % \item Uses extra space at the margin to avoid \HTML\ tag overflow off the page. % \item Forces a new PDF page before some environments. % \item Forces line break between major pieces of long tags. % \end{itemize} % % \changes{v0.20}{2017/01/12}{Page geometry set to 6in wide with large margins.} % \changes{v0.27}{2017/04/04}{Page geometry modified to reduce line overflow.} % \changes{v0.28}{2017/04/13}{Forced oneside to maintain large right margin.} % % \codehtml % \begin{macrocode} \begin{warpHTML} \RequirePackage[paperheight=190in,paperwidth=20in,% left=2in,right=12in,% top=1in,bottom=1in,% ]{geometry} \@twosidefalse \@mparswitchfalse \end{warpHTML} % \end{macrocode} % \codeall % \begin{macrocode} \begin{warpall} % \end{macrocode} % \DescribePackage{xparse} % % \LaTeX{}3 command argument parsing % ^^A \RequirePackage[log-declarations=false]{xparse} % \begin{macrocode} \RequirePackage{xparse} % \end{macrocode} % \begin{macrocode} \end{warpall} % \end{macrocode} % \codehtml % \begin{macrocode} \begin{warpHTML} % \end{macrocode} % \DescribePackage{expl3} % % \LaTeX{}3 programming % \begin{macrocode} \RequirePackage{expl3} % \end{macrocode} % ^^A % \DescribePackage{l3regex} % ^^A % % ^^A % \LaTeX{}3 regular expression handling % ^^A % \begin{macrocode} % ^^A \RequirePackage{l3regex} % ^^A % \end{macrocode} % ^^A % \begin{macro}{\EmulatesPackage} \marg{pkg name} \oarg{yyyy/mm/dd and comments} % ^^A % % ^^A % Similar to \cs{ProvidesPackage}. Used where the \pkg{lwarp} package emulates % ^^A % other packages. % ^^A % For example, \pkg{trivfloat} wants to load \pkg{float}, which is emulated by \pkg{lwarp}. % ^^A % Since |\EmulatesPackage{float}| is declared by \pkg{lwarp}, % ^^A % \pkg{trivfloat} will not load \pkg{float} on its own. % ^^A % Doing so would have over-written the \pkg{lwarp} emulation. % ^^A % % ^^A % Do not use \cs{EmulatesPackage} for packages which are patched by other % ^^A % \watchout % ^^A % packages. The emulated code cannot be patched correctly. % ^^A % % ^^A % \begin{macrocode} % ^^A \NewDocumentCommand{\EmulatesPackage}{m O{}}{% % ^^A \expandafter\xdef\csname ver@#1.sty\endcsname{#2 --- % ^^A Emulated by package \@currname.} % ^^A } % ^^A \@onlypreamble\EmulatesPackage % ^^A % \end{macrocode} % ^^A % \end{macro} % ^^A % \DescribePackage{gettitlestring} % % Used to emulate \cs{nameref}. % \begin{macrocode} \RequirePackage{gettitlestring} % \end{macrocode} % \DescribePackage{everyhook} % % \pkg{everyhook} is used to patch paragraph handling. % \begin{macrocode} \RequirePackage{everyhook} \end{warpHTML} % \end{macrocode} % \codeall % \begin{macrocode} \begin{warpall} % \end{macrocode} % \DescribePackage{filecontents} % % Used to write helper files, done in print mode. % % Patched to work with \pkg{morewrites}, per % \href % {https://tex.stackexchange.com/questions/312830/does-morewrites-not-support-filecontents-and-can-i-write-body-of-environment-us/312910} % {\texttt{https://tex.stackexchange.com/questions/312830/\\ % does-morewrites-not-support-filecontents-and-can-i-write-body-of-environment-us/\\ % 312910}} % % \changes{v0.34}{2017/08/02}{\pkg{filecontents}: Required. Patched for \protect\pkg{morewrites}.} % % \begin{macrocode} \RequirePackage{filecontents} \@ifpackagelater{filecontents}{2011/10/09}% {} { \newwrite\fcwrite \let\LWR@origfilec@ntents\filec@ntents \def\filec@ntents{\def\chardef##1\write{\let\reserved@c\fcwrite}\LWR@origfilec@ntents} } % \end{macrocode} % \begin{macrocode} \end{warpall} % \end{macrocode} % \codehtml % \begin{macrocode} \begin{warpHTML} % \end{macrocode} % \DescribePackage{xifthen} % \begin{macrocode} \RequirePackage{xifthen} % \end{macrocode} % \DescribePackage{xstring} % \begin{macrocode} \RequirePackage{xstring} % \end{macrocode} % \DescribePackage{xstring} % \begin{macrocode} \RequirePackage{verbatim} % \end{macrocode} % \DescribePackage{makeidx} % \begin{macrocode} \RequirePackage{makeidx} \makeindex % \end{macrocode} % \DescribePackage{calc} % \begin{macrocode} \RequirePackage{calc} % \end{macrocode} % \DescribePackage{refcount} % \begin{macrocode} \RequirePackage{refcount} % \end{macrocode} % \DescribePackage{newfloat} % \begin{macrocode} \RequirePackage{newfloat} % \end{macrocode} % \DescribePackage{caption} % \begin{macrocode} \RequirePackage{caption} % \end{macrocode} % \changes{v0.24}{2017/03/06}{No longer preloads \pkg{subcaption}; % conflicted with \pkg{subfig}.} % \begin{macrocode} \end{warpHTML} % \end{macrocode} % \codeall % \begin{macrocode} \begin{warpall} % \end{macrocode} % \DescribePackage{titling} % % Used for |\maketitle| and the title page. See \cref{sec:titles}. % \begin{macrocode} \RequirePackage{titling} % \end{macrocode} % \DescribePackage{environ} % % Used to encapsulate math environments for re-use in \HTML\ ALT text. % % \begin{macrocode} \RequirePackage{environ} % \end{macrocode} % \begin{macrocode} \end{warpall} % \end{macrocode} % \codehtml % \begin{macrocode} \begin{warpHTML} % \end{macrocode} % \DescribePackage{zref} % % Used for cross-references. % \begin{macrocode} \RequirePackage{zref} % \end{macrocode} % \DescribePackage{amsmath} % \changes{v0.16}{2016/04/09}{Fix: amsmath options clash} % % Equation numbers are placed to the left for \HTML. % % \pkg{newtxmath} automatically loads \pkg{amsmath}, % so the options |leqno| and |fleqn| are passed beforehand to be % picked up both here and by \pkg{newtxmath} if it is used. % \changes{v0.16}{2016/04/11}{Fix: newtxmath compatibility.} % \changes{v0.33}{2016/06/21}{\protect\pkg{amsmath}: Removed \protect\texttt{fleqn} option.} % % \begin{macrocode} \PassOptionsToPackage{leqno}{amsmath} \RequirePackage{amsmath} % \end{macrocode} % \DescribePackage{xfrac} % % Patched for \HTML\ use. % See \cref{sec:xfrac}. % \begin{macrocode} \RequirePackage{xfrac} % \end{macrocode} % % Used to convert lengths for image width/height options. % % \begin{macrocode} \RequirePackage{printlen} % \end{macrocode} % \begin{macrocode} \end{warpHTML} % \end{macrocode} % \section{Loading packages} % % % \codehtml % \begin{macrocode} \begin{warpHTML} % \end{macrocode} % Remember the original \cs{RequirePackage}: % \begin{macrocode} \LetLtxMacro{\LWR@origRequirePackage}{\RequirePackage} % \end{macrocode} % \begin{macro}{\LWR@requirepackagenames} Stores the list of required package names. % \begin{macrocode} \newcommand*{\LWR@requirepackagenames}{} % \end{macrocode} % \end{macro} % \begin{macro}{\LWR@findword} \oarg{1: separator} \marg{2: list} % \marg{3: index} \oarg{4: destination} % % Note that argument 4 is passed directly to \cs{StrBetween}. % \begin{macrocode} \newcommand*\LWR@findword[3][,]{% \StrBetween[#3,\numexpr#3+1]{#1#2#1}{#1}{#1}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\LWR@lookforpackagename} \marg{index} % If this is a package name, re-direct it to the \pkg{lwarp} version % by renaming it |lwarp-| followed by the original name. % \begin{macrocode} \newcommand*{\LWR@lookforpackagename}[1]{% % \end{macrocode} % Find the n'th package name from the list: % \begin{macrocode} \LWR@findword{\LWR@requirepackagenames}{#1}[\LWR@strresult]% % \end{macrocode} % Remove blanks. % The original name with blanks is in |LWR@strresult| and % the final name with no blanks goes into |LWR@strresulttwo|. % \begin{macrocode} \StrSubstitute[100]{\LWR@strresult}{ }{}[\LWR@strresulttwo]% % \end{macrocode} % See if the package name was found: % \begin{macrocode} \IfStrEq{\LWR@strresulttwo}{}% {}% no filename {% yes filename % \end{macrocode} % If found, and if an \pkg{lwarp}-equivalent name exists, use |lwarp-|* instead. % \begin{macrocode} \IfFileExists{lwarp-\LWR@strresulttwo.sty}% {% lwarp-* file found \StrSubstitute% {\LWR@requirepackagenames}% {\LWR@strresult}% {lwarp-\LWR@strresulttwo}[\LWR@requirepackagenames]% }% {}% no lwarp-* file }% yes filename } % \end{macrocode} % \end{macro} % % % \begin{macro}{\RequirePackage} \oarg{1: options} \marg{2: package names} \oarg{3: version} % % For each of many package names in a comma-separated list, % if an \pkg{lwarp} version of a package exists, % select it instead of the \LaTeX\ version. % % \changes{v0.32}{2017/06/09}{Fix: Ignores blanks in package list.} % % \begin{macrocode} \RenewDocumentCommand{\RequirePackage}{o m o}{% % \end{macrocode} % Redirect up to nine names: % \begin{macrocode} \renewcommand*{\LWR@requirepackagenames}{#2} \LWR@lookforpackagename{1} \LWR@lookforpackagename{2} \LWR@lookforpackagename{3} \LWR@lookforpackagename{4} \LWR@lookforpackagename{5} \LWR@lookforpackagename{6} \LWR@lookforpackagename{7} \LWR@lookforpackagename{8} \LWR@lookforpackagename{9} % \end{macrocode} % \cs{RequirePackage} depending on the options and version: % \begin{macrocode} \IfValueTF{#1} {% options given \IfValueTF{#3}% version given? {\LWR@origRequirePackage[#1]{\LWR@requirepackagenames}[#3]} {\LWR@origRequirePackage[#1]{\LWR@requirepackagenames}} } {% no options given \IfValueTF{#3}% version given? {\LWR@origRequirePackage{\LWR@requirepackagenames}[#3]} {\LWR@origRequirePackage{\LWR@requirepackagenames}} } } \LetLtxMacro{\usepackage}{\RequirePackage} % \end{macrocode} % \end{macro} % \begin{macro}{\LWR@ProvidesPackagePass} \marg{pkgname} \oarg{version} % % Uses the original package, including options. % \begin{macrocode} \NewDocumentCommand{\LWR@ProvidesPackagePass}{m o}{ \PackageInfo{lwarp}{Using package `#1' and adding lwarp modifications, including options,}% \IfValueTF{#2} {\ProvidesPackage{lwarp-#1}[#2]} {\ProvidesPackage{lwarp-#1}} \DeclareOption*{\PassOptionsToPackage{\CurrentOption}{#1}} \ProcessOptions\relax \IfValueTF{#2} {\LWR@origRequirePackage{#1}[#2]} {\LWR@origRequirePackage{#1}} } % \end{macrocode} % \end{macro} % \begin{macro}{\LWR@ProvidesPackageDrop} \marg{pkgname} \oarg{version} % % Ignores the original package and uses lwarp's version instead. % Drops/discards all options. % \begin{macrocode} \NewDocumentCommand{\LWR@ProvidesPackageDrop}{m o}{ \PackageInfo{lwarp}{Replacing package `#1' with the lwarp version, discarding options,}% \IfValueTF{#2} {\ProvidesPackage{lwarp-#1}[#2]} {\ProvidesPackage{lwarp-#1}} \DeclareOption*{} \ProcessOptions\relax } % \end{macrocode} % \end{macro} % \begin{macrocode} \end{warpHTML} % \end{macrocode} % \section{File handles} % Defines file handles for writes. % \changes{v0.37}{2017/08/19}{File handles reorganized.} % \codeall % \begin{macrocode} \begin{warpall} % \end{macrocode} % \begin{macro}{\LWR@quickfile} % For quick temporary use only. % This is reused in several places. % \begin{macrocode} \newwrite\LWR@quickfile% % \end{macrocode} % \end{macro} % \begin{macrocode} \end{warpall} % \end{macrocode} % \codehtml % \begin{macrocode} \begin{warpHTML} % \end{macrocode} % \begin{macro}{\LWR@lateximagesfile} % For |lateximages.txt|. % \begin{macrocode} \newwrite\LWR@lateximagesfile % \end{macrocode} % \end{macro} % \begin{macrocode} \end{warpHTML} % \end{macrocode} % \section{Include a file} % % During \HTML\ output, |\include{}| causes the following to occur: % % \begin{enumerate} % \item \pkg{lwarp} creates |_html_inc.tex| whose contents are: % \begin{sourcedisplay} % \cs{input} \textless{}filename\textgreater.tex % \end{sourcedisplay} % \item |_html_inc.tex| is then \cs{include}d instead of |.tex|. % \item |_html_inc.aux| is automatically generated and used by \LaTeX. % \end{enumerate} % % \codehtml % \begin{macrocode} \begin{warpHTML} % \end{macrocode} % \begin{macro}{\include} \marg{filename} % % \changes{v0.37}{2017/08/19}{Maintains independent \protect\texttt{.aux} files for \protect\HTML.} % % \begin{macro}{\@include} \marg{filename} Modified to load |_html_inc| files. % \begin{macrocode} \def\@include#1 {% \immediate\openout\LWR@quickfile #1_html_inc.tex% new \immediate\write\LWR@quickfile{\string\input{#1.tex}}% new \immediate\closeout\LWR@quickfile% new \LWR@origclearpage% \changed \if@filesw \immediate\write\@mainaux{\string\@input{#1_html_inc.aux}}% changed \fi \@tempswatrue \if@partsw \@tempswafalse \edef\reserved@b{#1}% \@for\reserved@a:=\@partlist\do {\ifx\reserved@a\reserved@b\@tempswatrue\fi}% \fi \if@tempswa \let\@auxout\@partaux \if@filesw \immediate\openout\@partaux #1_html_inc.aux % changed \immediate\write\@partaux{\relax}% \fi \@input@{#1_html_inc.tex}% changed \LWR@origclearpage% changed \@writeckpt{#1}% \if@filesw \immediate\closeout\@partaux \fi \else \deadcycles\z@ \@nameuse{cp@#1}% \fi \let\@auxout\@mainaux% } % \end{macrocode} % \end{macro} % \end{macro} % \begin{macrocode} \end{warpHTML} % \end{macrocode} % \section{Copying a file} % \codehtml % \begin{macrocode} \begin{warpHTML} % \end{macrocode} % \begin{macro}{\LWR@copyfile} \marg{source filename} \marg{destination filename} % % Used to copy the |.toc| file to |.sidetoc| to re-print the \TOC\ in % the side\TOC\ navigation pane. % \begin{macrocode} \newwrite\LWR@copyoutfile % open the file to write to \newread\LWR@copyinfile % open the file to read from \newcommand*{\LWR@copyfile}[2]{% \immediate\openout\LWR@copyoutfile=#2 \openin\LWR@copyinfile=#1 \begingroup\endlinechar=-1 \makeatletter \loop\unless\ifeof\LWR@copyinfile \read\LWR@copyinfile to\LWR@fileline % Read one line and store it into \LWR@fileline % \LWR@fileline\par % print the content into the pdf % print the content: \immediate\write\LWR@copyoutfile{\unexpanded\expandafter{\LWR@fileline}}% \repeat \closeout\LWR@copyoutfile \endgroup } % \end{macrocode} % \end{macro} % \begin{macrocode} \end{warpHTML} % \end{macrocode} % \section{Debugging messages} % \begin{macrocode} \begin{warpall} % \end{macrocode} % \DescribeBoolean{LWR@tracinglwarp} True if tracing is turned on. % \begin{macrocode} \newbool{LWR@tracinglwarp} % \end{macrocode} % % \begin{macro}{\tracinglwarp} Turns on the debug tracing messages. % \changes{v0.20}{2017/02/07}{Added.} % \begin{macrocode} \newcommand{\tracinglwarp}{\booltrue{LWR@tracinglwarp}} % \end{macrocode} % \end{macro} % % \begin{macro}{\LWR@traceinfo} \marg{text} \quad If tracing is turned on, writes % the text to the |.log| file. % \begin{macrocode} \newcommand{\LWR@traceinfo}[1]{% \ifbool{LWR@tracinglwarp}% {% \typeout{*** lwarp: #1}% % \PackageInfo{lwarp}{#1 : }% }% {}% } % \end{macrocode} % \end{macro} % \DescribeBoolean{HTMLDebugComments} Default false. % Add comments in \HTML\ % about closing \element{div}s, sections, etc. % \index{HTML>conversion settings>debug comments} % \index{debugging>HTML debug comments} % \index{troubleshooting>HTML debug comments} % % \changes{v0.28}{2017/04/09}{Added boolean \texttt{HTMLDebugComments.}} % % \begin{macrocode} \newbool{HTMLDebugComments} \boolfalse{HTMLDebugComments} % \end{macrocode} % If \cs{tracinglwarp}, show where preamble hooks occur: % \begin{macrocode} \AfterEndPreamble{ \LWR@traceinfo{AfterEndPreamble} } \AtBeginDocument{ \LWR@traceinfo{AtBeginDocument} } % \end{macrocode} % \section{HTML-conversion output modifications} % % These booleans modify the \HTML\ output in various ways % to improve conversion to \EPUB\ or word processor imports. % % % \DescribeBoolean{FormatEPUB} Default false. % Changes \HTML\ output for easy \EPUB\ conversion % via an external program. Removes per-file headers, footers, and nav. % Adds footnotes per chapter/section. % \index{EPUB>HTML conversion settings} % \index{HTML>conversion settings>EPUB} % % \changes{v0.28}{2017/04/09}{Added boolean \texttt{FormatEPUB}.} % % \begin{macrocode} \newbool{FormatEPUB} \boolfalse{FormatEPUB} % \end{macrocode} % % % \DescribeBoolean{FormatWordProcessor} Default false. % Changes \HTML\ output for easier conversion % by a word processor. % Removes headers and nav, prints footnotes per section, % and also forces single-file output and turns off \HTML\ debug % comments. % \index{word processor>HTML conversion settings} % \index{HTML>conversion settings>word processor} % % \changes{v0.28}{2017/04/09}{Added boolean \texttt{FormatWordProcessor}.} % % \begin{macrocode} \newbool{FormatWordProcessor} \boolfalse{FormatWordProcessor} % \end{macrocode} % % % \DescribeBoolean{HTMLMarkFloats} Default true. % Adds |=== table begin| or |=== figure begin|, and |=== end| % around floats while formatting for word processors. % This helps identify boundaries of floats to be manually converted % to word-processor frames. % (Perhaps some day word processors will have \HTML\ import options % for identifying \element{div} classes for figures and tables.) % \index{word processor>HTML conversion settings} % \index{HTML>conversion settings>word processor} % % \changes{v0.28}{2017/04/09}{Added boolean \texttt{HTMLMarkFloats}} % % \begin{macrocode} \newbool{HTMLMarkFloats} \booltrue{HTMLMarkFloats} % \end{macrocode} % \begin{macrocode} \end{warpall} % \end{macrocode} % \section{Remembering original formatting macros} % \codehtml % \begin{macrocode} \begin{warpHTML} % \end{macrocode} % Remember original definitions of formatting commands. % Will be changed to \HTML\ commands for most uses. % Will be temporarily restored to original meaning inside any lateximage environment. % Also nullify unused commands. % \begin{macrocode} \LetLtxMacro{\LWR@origtextrm}{\textrm} \LetLtxMacro{\LWR@origtextsf}{\textsf} \LetLtxMacro{\LWR@origtexttt}{\texttt} \LetLtxMacro{\LWR@origtextnormal}{\textnormal} \LetLtxMacro{\LWR@origtextbf}{\textbf} \LetLtxMacro{\LWR@origtextmd}{\textmd} \LetLtxMacro{\LWR@origtextit}{\textit} \LetLtxMacro{\LWR@origtextsl}{\textsl} \LetLtxMacro{\LWR@origtextsc}{\textsc} \LetLtxMacro{\LWR@origtextup}{\textup} \LetLtxMacro{\LWR@origemph}{\emph} \LetLtxMacro{\LWR@origrmfamily}{\rmfamily} \LetLtxMacro{\LWR@origsffamily}{\sffamily} \LetLtxMacro{\LWR@origttfamily}{\ttfamily} \LetLtxMacro{\LWR@origbfseries}{\bfseries} \LetLtxMacro{\LWR@origmdseries}{\mdseries} \LetLtxMacro{\LWR@origupshape}{\upshape} \LetLtxMacro{\LWR@origslshape}{\slshape} \LetLtxMacro{\LWR@origscshape}{\scshape} \LetLtxMacro{\LWR@origitshape}{\itshape} \LetLtxMacro{\LWR@origem}{\em} \LetLtxMacro{\LWR@orignormalfont}{\normalfont} \let\LWR@origraggedright\raggedright \let\LWR@origonecolumn\onecolumn \let\LWR@origsp\sp \let\LWR@origsb\sb \let\LWR@origtextsuperscript\textsuperscript \let\LWR@origtextsubscript\textsubscript \let\LWR@origscriptsize\scriptsize \let\LWR@orignewpage\newpage \let\LWR@origpagestyle\pagestyle \let\LWR@origthispagestyle\thispagestyle \let\LWR@origpagenumbering\pagenumbering \LetLtxMacro{\LWR@origminipage}{\minipage} \let\LWR@origendminipage\endminipage \LetLtxMacro{\LWR@origparbox}{\parbox} \let\LWR@orignewline\newline \LetLtxMacro{\LWR@origitem}{\item} \LetLtxMacro{\LWR@origitemize}{\itemize} \LetLtxMacro{\LWR@endorigitemize}{\enditemize} \LetLtxMacro{\LWR@origenumerate}{\enumerate} \LetLtxMacro{\LWR@endorigenumerate}{\endenumerate} \LetLtxMacro{\LWR@origdescription}{\description} \LetLtxMacro{\LWR@endorigdescription}{\enddescription} \let\LWR@origpar\par \LetLtxMacro{\LWR@origfootnote}{\footnote} \let\LWR@orig@mpfootnotetext\@mpfootnotetext \let\LWR@origclearpage\clearpage \let\clearpage\relax \let\cleardoublepage\relax % \end{macrocode} % \begin{macrocode} \end{warpHTML} % \end{macrocode} % \section{Textcomp} % % \limitstextcomp % % \changes{v0.37}{2017/08/18}{\pkg{textcomp}: Improved support.} % % \codehtml % \begin{macrocode} \begin{warpHTML} % \end{macrocode} % % Modifications for \pkg{textcomp} are done \cs{AtBeginDocument} since % \pkg{textcomp} may have been loaded before \pkg{lwarp}. % \begin{macrocode} \AtBeginDocument{% in case textcomp was not loaded \@ifpackageloaded{textcomp} { % \end{macrocode} % The following are restored for print when inside a \env{lateximage}: % \begin{macrocode} \let\LWR@origtextdegree\textdegree \let\LWR@origtextcelsius\textcelsius \let\LWR@origtextohm\textohm \let\LWR@origtextmu\textmu \LetLtxMacro\LWR@origcapitalcedilla\capitalcedilla \LetLtxMacro\LWR@origcapitalogonek\capitalogonek \LetLtxMacro\LWR@origcapitalgrave\capitalgrave \LetLtxMacro\LWR@origcapitalacute\capitalacute \LetLtxMacro\LWR@origcapitalcircumflex\capitalcircumflex \LetLtxMacro\LWR@origcapitaltilde\capitaltilde \LetLtxMacro\LWR@origcapitaldieresis\capitaldieresis \LetLtxMacro\LWR@origcapitalhungarumlaut\capitalhungarumlaut \LetLtxMacro\LWR@origcapitalring\capitalring \LetLtxMacro\LWR@origcapitalcaron\capitalcaron \LetLtxMacro\LWR@origcapitalbreve\capitalbreve \LetLtxMacro\LWR@origcapitalmacron\capitalmacron \LetLtxMacro\LWR@origcapitaldotaccent\capitaldotaccent \LetLtxMacro\LWR@origtextcircled\textcircled % \end{macrocode} % For \HTML, use \HTML\ entities or direct Unicode, depending on the engine: % \begin{macrocode} \ifPDFTeX \renewcommand*{\textdegree}{\HTMLentity{deg}} \renewcommand*{\textcelsius}{\HTMLentity{deg}\,C} \renewcommand*{\textohm}{\HTMLunicode{2126}} \renewcommand*{\textmu}{\HTMLunicode{00B5}} \else \renewcommand*{\textdegree}{°} \renewcommand*{\textcelsius}{°C} \renewcommand*{\textohm}{Ω} \renewcommand*{\textmu}{μ} \fi % \end{macrocode} % For \HTML, Unicode diacritical marks are used: % \begin{macrocode} \renewcommand*{\capitalcedilla}[1]{#1\HTMLunicode{0327}} \renewcommand*{\capitalogonek}[1]{#1\HTMLunicode{0328}} \renewcommand*{\capitalgrave}[1]{#1\HTMLunicode{0300}} \renewcommand*{\capitalacute}[1]{#1\HTMLunicode{0301}} \renewcommand*{\capitalcircumflex}[1]{#1\HTMLunicode{0302}} \renewcommand*{\capitaltilde}[1]{#1\HTMLunicode{0303}} \renewcommand*{\capitaldieresis}[1]{#1\HTMLunicode{0308}} \renewcommand*{\capitalhungarumlaut}[1]{#1\HTMLunicode{30B}} \renewcommand*{\capitalring}[1]{#1\HTMLunicode{30A}} \renewcommand*{\capitalcaron}[1]{#1\HTMLunicode{30C}} \renewcommand*{\capitalbreve}[1]{#1\HTMLunicode{306}} \renewcommand*{\capitalmacron}[1]{#1\HTMLunicode{304}} \renewcommand*{\capitaldotaccent}[1]{#1\HTMLunicode{307}} % \end{macrocode} % \cs{textcircled} becomes a span with a rounded border: % \begin{macrocode} \renewcommand*{\textcircled}[1]{% \InlineClass[border: 1px solid \LWR@currenttextcolor]{textcircled}{#1}% } % \end{macrocode} % % \begin{macro}{\LWR@restoreorigtextcomp} % Called from \cs{restoreoriginalformatting} when a \env{lateximage} is begun. % \begin{macrocode} \newcommand*{\LWR@restoreorigtextcomp}{% \let\textdegree\LWR@origtextdegree% \let\textcelsius\LWR@origtextcelsius% \let\textohm\LWR@origtextohm% \let\textmu\LWR@origtextmu% \LetLtxMacro\capitalcedilla\LWR@origcapitalcedilla% \LetLtxMacro\capitalogonek\LWR@origcapitalogonek% \LetLtxMacro\capitalgrave\LWR@origcapitalgrave% \LetLtxMacro\capitalacute\LWR@origcapitalacute% \LetLtxMacro\capitalcircumflex\LWR@origcapitalcircumflex% \LetLtxMacro\capitaltilde\LWR@origcapitaltilde% \LetLtxMacro\capitaldieresis\LWR@origcapitaldieresis% \LetLtxMacro\capitalhungarumlaut\LWR@origcapitalhungarumlaut% \LetLtxMacro\capitalring\LWR@origcapitalring% \LetLtxMacro\capitalcaron\LWR@origcapitalcaron% \LetLtxMacro\capitalbreve\LWR@origcapitalbreve% \LetLtxMacro\capitalmacron\LWR@origcapitalmacron% \LetLtxMacro\capitaldotaccent\LWR@origcapitaldotaccent% \LetLtxMacro\textcircled\LWR@origtextcircled% } % \end{macrocode} % \end{macro} % % \begin{macrocode} }% textcomp loaded {% textcomp not loaded % \end{macrocode} % A null version for use when \pkg{textcomp} was not loaded: % \begin{macrocode} \newcommand*{\LWR@restoreorigtextcomp}{}% }% textcomp not loaded }% AtBeginDocument % \begin{macrocode} \end{warpHTML} % \end{macrocode} % \section{Accents} % % \limitsaccents % % \changes{v0.37}{2017/08/18}{\protect\LaTeX\ accents: Added.} % % \codehtml % \begin{macrocode} \begin{warpHTML} % \end{macrocode} % % % Without \cs{AtBeginDocument}, \cs{t} was being re-defined somewhere. % \begin{macrocode} \AtBeginDocument{ % \end{macrocode} % The following are restored for print when inside a \env{lateximage}. % % For Unicode engines, only \cs{t} needs to be redefined: % \begin{macrocode} \LetLtxMacro{\LWR@origt}{\t} % \end{macrocode} % For pdf\LaTeX, additional work is required: % \begin{macrocode} \ifPDFTeX \LetLtxMacro{\LWR@origequalaccent}{\=} \LetLtxMacro{\LWR@origdotaccent}{\.} \LetLtxMacro{\LWR@origu}{\u} \LetLtxMacro{\LWR@origv}{\v} \LetLtxMacro{\LWR@origc}{\c} \LetLtxMacro{\LWR@origd}{\d} \LetLtxMacro{\LWR@origb}{\b} % \end{macrocode} % The \HTML\ redefinitions follow. % % For pdf\LaTeX, Unicode diacritical marks are used: % \begin{macrocode} \renewcommand*{\=}[1]{#1\HTMLunicode{0305}} \renewcommand*{\.}[1]{#1\HTMLunicode{0307}} \renewcommand*{\u}[1]{#1\HTMLunicode{0306}} \renewcommand*{\v}[1]{#1\HTMLunicode{030C}} \renewcommand*{\c}[1]{#1\HTMLunicode{0327}} \renewcommand*{\d}[1]{#1\HTMLunicode{0323}} \renewcommand*{\b}[1]{#1\HTMLunicode{0331}} \fi % \end{macrocode} % For all engines, a Unicode diacritical tie is used: % \begin{macrocode} \def\LWR@t#1#2{#1\HTMLunicode{0361}#2} \renewcommand*{\t}[1]{\LWR@t#1} % \end{macrocode} % % \begin{macro}{\LWR@restoreorigaccents} % Called from \cs{restoreoriginalformatting} when a \env{lateximage} is begun. % \begin{macrocode} \ifPDFTeX \newcommand*{\LWR@restoreorigaccents}{% \LetLtxMacro{\=}{\LWR@origequalaccent}% \LetLtxMacro{\.}{\LWR@origdotaccent}% \LetLtxMacro{\u}{\LWR@origu}% \LetLtxMacro{\v}{\LWR@origu}% \LetLtxMacro{\t}{\LWR@origt}% \LetLtxMacro{\c}{\LWR@origc}% \LetLtxMacro{\d}{\LWR@origd}% \LetLtxMacro{\b}{\LWR@origb}% } \else% XeLaTeX, LuaLaTeX: \newcommand*{\LWR@restoreorigaccents}{% \LetLtxMacro{\t}{\LWR@origt}% } \fi }% AtBeginDocument % \end{macrocode} % \end{macro} % % % % \begin{macrocode} \end{warpHTML} % \end{macrocode} % \section{SIunitx} % \changes{v0.36}{2017/08/17}{\pkg{siunitx}: Improved symbol support.} % \changes{v0.37}{2017/08/17}{\pkg{siunitx}: Improved symbol support.} % \codehtml % \begin{macrocode} \begin{warpHTML} % \end{macrocode} % \begin{macrocode} \AtBeginDocument{% in case textcomp was not loaded \@ifpackageloaded{siunitx} { \DeclareSIUnit\bohr{\textit{a}\textsubscript{0}} \DeclareSIUnit\clight{\textit{c}\textsubscript{0}} \DeclareSIUnit\elementarycharge{\textit{e}} \DeclareSIUnit\electronmass{\textit{m}\textsubscript{e}} \DeclareSIUnit\hartree{\textit{E}\textsubscript{h}} }% siunitx loaded {}% siunitx not loaded }% AtBeginDocument % \begin{macrocode} \end{warpHTML} % \end{macrocode} % \section{Configuration Files} % \changes{v0.20}{2016/12/20}{\pkg{lwarp-newproject}: Added.} % \changes{v0.30}{2017/04/27}{\pkg{lwarp-newproject} removed, and combined with \pkg{lwarp}.} % \begin{macrocode} \begin{warpprint} \typeout{lwarp: generating configuration files} \end{warpprint} % \end{macrocode} % \subsection{project\_html.tex} % % \DescribeFile{project_html.tex} Used to allow an \HTML\ version of the % document to exist alongside the print version. % % Only write |\jobname_html.tex| if generating the print version. % \begin{macrocode} \begin{warpprint} \immediate\openout\LWR@quickfile=\jobname_html.tex \immediate\write\LWR@quickfile{% \detokenize{\PassOptionsToPackage}% {warpHTML,BaseJobname=\jobname}{lwarp}% } \immediate\write\LWR@quickfile{% \detokenize{\input}\string{\jobname.tex\string }% } \immediate\closeout\LWR@quickfile \end{warpprint} % \end{macrocode} % \subsection{lwarpmk.conf} % % \DescribeFile{lwarpmk.conf} % |lwarpmk.conf| is automatically (re-)created by the \pkg{lwarp} package when % executing\\ % \hspace*{2ex} |pdflatex |,\\ % or similar for |xelatex| or |lualatex|, in print-document generation mode, % which is the default unless the |warpHTML| option is given. % |lwarpmk.conf| is then used by the utility |lwarpmk|. % % An example |lwarpmk.conf|: % \begin{Verbatim}[gobble=2,frame=lines,obeytabs,tabsize=4,formatcom={\unskip}] % opsystem = "Unix" -- or "Windows" % latexname = "pdflatex" -- or "lualatex" or "xelatex" % sourcename = "projectname" -- your .tex source % homehtmlfilename = "index" -- or "projectname" % htmlfilename = "" -- or "projectname" if numbered HTML files % \end{Verbatim} % % \changes{v0.29}{2017/04/15}{File \protect\texttt{lwarpmk.conf}: Add: \protect\texttt{language} option for config files.} % % \codeprint % \begin{macrocode} \begin{warpprint} \ifcsdef{LWR@quickfile}{}{\newwrite{\LWR@quickfile}} \immediate\openout\LWR@quickfile=lwarpmk.conf \ifbool{usingOSWindows}{ \immediate\write\LWR@quickfile{opsystem = "Windows"} }{ \immediate\write\LWR@quickfile{opsystem = "Unix"} } \ifPDFTeX \immediate\write\LWR@quickfile{latexname = "pdflatex"} \fi \ifXeTeX \immediate\write\LWR@quickfile{latexname = "xelatex"} \fi \ifLuaTeX \immediate\write\LWR@quickfile{latexname = "lualatex"} \fi \immediate\write\LWR@quickfile{sourcename = "\jobname"} \immediate\write\LWR@quickfile{% homehtmlfilename = "\HomeHTMLFilename"% } \immediate\write\LWR@quickfile{htmlfilename = "\HTMLFilename"} \immediate\write\LWR@quickfile{latexmk = "\ifbool{LWR@latexmk}{true}{false}"} \immediate\write\LWR@quickfile{language = "\LWR@IndexLanguage"} \immediate\write\LWR@quickfile{xdyfile = "\LWR@xdyFilename"} \immediate\closeout\LWR@quickfile \end{warpprint} % \end{macrocode} % \subsection{project.lwarpmkconf} % % \DescribeFile{project.lwarpmkconf} A project-specific configuration file for |lwarpmk|. % % \changes{v0.29}{2017/04/15}{File \protect\texttt{*.lwarpmkconf}: Add: \protect\texttt{language} option for config files.} % % \begin{macrocode} \begin{warpprint} \ifcsdef{LWR@quickfile}{}{\newwrite{\LWR@quickfile}} \immediate\openout\LWR@quickfile=\jobname.lwarpmkconf \ifbool{usingOSWindows}{ \immediate\write\LWR@quickfile{opsystem = "Windows"} }{ \immediate\write\LWR@quickfile{opsystem = "Unix"} } \ifPDFTeX \immediate\write\LWR@quickfile{latexname = "pdflatex"} \fi \ifXeTeX \immediate\write\LWR@quickfile{latexname = "xelatex"} \fi \ifLuaTeX \immediate\write\LWR@quickfile{latexname = "lualatex"} \fi \immediate\write\LWR@quickfile{sourcename = "\jobname"} \immediate\write\LWR@quickfile{% homehtmlfilename = "\HomeHTMLFilename"% } \immediate\write\LWR@quickfile{htmlfilename = "\HTMLFilename"} \immediate\write\LWR@quickfile{latexmk = "\ifbool{LWR@latexmk}{true}{false}"} \immediate\write\LWR@quickfile{language = "\LWR@IndexLanguage"} \immediate\write\LWR@quickfile{xdyfile = "\LWR@xdyFilename"} \immediate\closeout\LWR@quickfile \end{warpprint} % \end{macrocode} % \subsection{lwarp.css} % \DescribeFile{lwarp.css} % This is the base \CSS\ layer used by \pkg{lwarp}. % % This must be present both when compiling the project % and also when distributing the \HTML\ files. % % \changes{v0.26}{2017/03/30}{\texttt{lwarp.css}: Improved responsive % \texttt{marginpar} and \texttt{marginblock}.} % \changes{v0.30}{2017/04/26}{Fix: \protect\texttt{*.css} files only written in print mode.} % % \begin{macrocode} \begin{warpprint} \begin{filecontents*}{lwarp.css} /* CSS stylesheet for the LaTeX lwarp package Copyright 2016-2017 Brian Dunn — BD Tech Concepts LLC */ /* a fix for older browsers: */ header, section, footer, aside, nav, main, article, figure { display: block; } A:link {color:#000080 ; text-decoration: none ; } A:visited {color:#800000 ; } A:hover {color:#000080 ; text-decoration: underline ;} A:active {color:#800000 ; } a.tocpart {display: inline-block ; margin-left: 0em ; font-weight: bold ;} a.tocchapter {display: inline-block ; margin-left: 0em ; font-weight: bold ;} a.tocsection {display: inline-block ; margin-left: 1em ; text-indent: -.5em ; font-weight: bold ; } a.tocsubsection {display: inline-block ; margin-left: 2em ; text-indent: -.5em ; } a.tocsubsubsection {display: inline-block ; margin-left: 3em ; text-indent: -.5em ; } a.tocparagraph {display: inline-block ; margin-left: 4em ; text-indent: -.5em ; } a.tocsubparagraph {display: inline-block ; margin-left: 5em ; text-indent: -.5em ; } a.tocfigure {margin-left: 0em} a.tocsubfigure {margin-left: 2em} a.toctable {margin-left: 0em} a.tocsubtable {margin-left: 2em} a.toctheorem {margin-left: 0em} a.toclstlisting {margin-left: 0em} body { font-family: "DejaVu Serif", "Bitstream Vera Serif", "Lucida Bright", Georgia, serif; background: #FAF7F4 ; color: black ; margin:0em ; padding:0em ; font-size: 100% ; line-height: 1.2 ; } p {margin: 1.5ex 0em 1.5ex 0em ;} /* Holds a section number to add space between it and the name */ span.sectionnumber { margin-right: .6em } /* Inserted in front of index lines */ span.indexitem {margin-left: 0em} span.indexsubitem {margin-left: 2em} span.indexsubsubitem {margin-left: 4em} div.hidden, span.hidden { display: none ; } kbd { font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console", "Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono", "Courier New", monospace; font-size: 100% ; } pre { padding: 3pt ; } span.strong { font-weight: bold; } span.textmd { font-weight: normal; } span.textsc { font-variant: small-caps; } span.textsl { font-style: oblique; } span.textup { font-variant: normal; } span.textrm { font-family: "DejaVu Serif", "Bitstream Vera Serif", "Lucida Bright", Georgia, serif; } span.textsf { font-family: "DejaVu Sans", "Bitstream Vera Sans", Geneva, Verdana, sans-serif ; } span.textcircled { border: 1px solid black ; border-radius: 1ex ; } span.attribution { margin-left: 1em ; font-size: 80% ; font-variant: small-caps; } span.citetitle { margin-left: 1em ; font-size: 80% ; font-style: oblique; } span.poemtitle { font-size: 120% ; font-weight: bold; } blockquote { margin-left: 0px ; margin-right: 0px ; } blockquote p { line-height: 1.5; text-align: left ; font-size: .85em ; margin-left: 3em ; margin-right: 3em ; } blockquotation { margin-left: 0px ; margin-right: 0px ; } blockquotation p { line-height: 1.5; text-align: left ; font-size: .85em ; margin-left: 3em ; margin-right: 3em ; } div.epigraph { line-height: 1.2; text-align: left ; padding: 3ex 1em 0ex 1em ; /* margin: 3ex auto 3ex auto ; */ /* Epigraph centered */ margin: 3ex 1em 3ex auto ; /* Epigraph to the right */ /* margin: 3ex 1em 3ex 1em ; */ /* Epigraph to the left */ font-size: .85em ; max-width: 27em ; } div.epigraphsource{ text-align:right ; margin-left:auto ; /* max-width: 50% ; */ border-top: 1px solid #A0A0A0 ; padding-bottom: 3ex ; line-height: 1.2; } div.epigraph p { padding: .5ex ; margin: 0ex ;} div.epigraphsource p { padding: .5ex 0ex 0ex 0ex ; margin: 0ex ;} /* lettrine package: */ span.lettrine { font-size: 3ex ; float: left ; } span.lettrinetext { font-variant: small-caps ; } /* ulem and soul packages: */ span.uline { text-decoration: underline ; text-decoration-skip ; } span.uuline { text-decoration: underline ; text-decoration-skip ; text-decoration-style: double ; } span.uwave { text-decoration: underline ; text-decoration-skip ; text-decoration-style: wavy ; } span.sout { text-decoration: line-through ; } span.xout { text-decoration: line-through ; } span.dashuline { text-decoration: underline ; text-decoration-skip ; text-decoration-style: dashed ; } span.dotuline { text-decoration: underline ; text-decoration-skip ; text-decoration-style: dotted ; } span.letterspacing { letter-spacing: .2ex ; } span.capsspacing { font-variant: small-caps ; letter-spacing: .1ex ; } span.highlight { background: #F8E800 ; } html body { margin: 0 ; line-height: 1.2; } body div { margin: 0ex; } h1, h2, h3, h4, h5, h6, span.paragraph, span.subparagraph { font-family: "Linux Libertine O", "Hoefler Text", "Garamond", "Bembo", "Janson", "TeX Gyre Pagella", "Palatino", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times, "Times New Roman", serif; font-style: normal ; font-weight: bold ; text-align: left ; } h1 { /* title of the entire website, used on each page */ text-align: center ; font-size: 2.5em ; padding: .4ex 0em 0ex 0em ; } h2 { font-size: 2.25em } h3 { font-size: 2em } h4 { font-size: 1.75em } h5 { font-size: 1.5em } h6 { font-size: 1.25em } span.paragraph {font-size: 1em ; font-variant: normal ; margin-right: 1em ; } span.subparagraph {font-size: 1em ; font-variant: normal ; margin-right: 1em ; } /* Title of the file */ h1 { margin: 0ex 0em 0ex 0em ; line-height: 1.3; text-align: center ; } /* Part */ h2 { margin: 1ex 0em 1ex 0em ; line-height: 1.3; text-align: center ; } /* Chapter */ h3 { margin: 3ex 0em 1ex 0em ; line-height: 1.3; } /* Section */ h4 { margin: 3ex 0em 1ex 0em ; line-height: 1.3; } /* Sub-Section */ h5 { margin: 3ex 0em 1ex 0em ; line-height: 1.3; } /* Sub-Sub-Section */ h6 { margin: 3ex 0em 1ex 0em ; line-height: 1.3; } div.titlepage { text-align: center ; } .footnotes { font-size: .85em ; margin: 3ex 1em 0ex 1em ; padding-bottom: 1ex ; border-top: 1px solid silver ; } .marginpar { max-width:50%; float:right; text-align:left; margin: 1ex 0.5em 1ex 1em ; padding: 1ex 0.5em 1ex 0.5em ; font-size: 85% ; border-top: 1px solid silver ; border-bottom: 1px solid silver ; overflow-x: auto; } .marginpar br { margin-bottom: 2ex ; } div.marginblock { max-width:50%; float:right; text-align:left; margin: 1ex 0.5em 1ex 1em ; padding: 1ex 0.5em 1ex 0.5em ; overflow-x: auto; } div.marginblock div.minipage { display: block ; margin: 0pt auto 0pt auto ; } div.marginblock div.minipage p { font-size: 85%} div.marginblock br { margin-bottom: 2ex ; } section.textbody div.footnotes{ margin: 3ex 0em 0ex 0em ; border-bottom: 2px solid silver ; } .footnoteheader { border-top: 2px solid silver ; margin-top: 3ex ; padding-top: 1ex ; font-weight: bold ; } .mpfootnotes { text-align: left ; font-size: .85em ; margin-left: 1em ; border-top: 1px solid silver ; } /* Remove footnote top border in the title page. */ div.titlepage div.mpfootnotes { border-top: none ; } ol { margin: 1ex 1em 1ex 0em; line-height: 1.2; } ul, body dir, body menu { margin: 1ex 1em 1ex 0em; line-height: 1.2; } li { margin: 0ex 0em 1ex 0em; } html { margin: 0; padding: 0; } .programlisting { font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console", "Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono", "Courier New", monospace; margin: 1ex 0ex 1ex 0ex ; padding: .5ex 0pt .5ex 0pt ; overflow-x: auto; } section.textbody>pre.programlisting { border-top: 1px solid silver ; border-bottom: 1px solid silver ; } .inlineprogramlisting { font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console", "Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono", "Courier New", monospace; overflow-x: auto; } span.listinglabel { display: inline-block ; font-size: 70% ; width: 4em ; text-align: right ; margin-right: 2em ; } div.abstract { margin: 2em 5% 2em 5% ; padding: 1ex 1em 1ex 1em ; /* font-weight: bold ; */ font-size: 90% ; } div.abstract dl {line-height:1.5;} div.abstract dt {color:#304070;} div.abstracttitle{ font-family: "URW Classico", Optima, "Linux Biolinum O", "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif; font-weight:bold; font-size:1.25em; text-align: center ; } span.abstractrunintitle{ font-family: "URW Classico", Optima, "Linux Biolinum O", "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif; font-weight:bold; } .verbatim { overflow-x: auto ; } .alltt { overflow-x: auto ; } .bverbatim { margin: 1ex 0pt 1ex 0pt ; padding: .5ex 0pt .5ex 0pt ; overflow-x: auto ; } .lverbatim { margin: 1ex 0pt 1ex 0pt ; padding: .5ex 0pt .5ex 0pt ; overflow-x: auto ; } .fancyvrb { font-size:.85em ; margin: 3ex 0pt 3ex 0pt } .fancyvrblabel { font-weight:bold; text-align: center ; } .verse { font-family: "Linux Libertine Mono O", "Lucida Console", "Droid Sans Mono", "DejaVu Mono", "Bitstream Vera Mono", "Liberation Mono", "FreeMono", "Andale Mono", "Nimbus Mono L", "Courier New", monospace; margin-left: 1em ; } div.singlespace { line-height: 1.2 ; } div.onehalfspace { line-height: 1.5 ; } div.doublespace { line-height: 2 ; } /* Minipage environments, vertically aligned to top, center, bottom: */ .minipage, .fminipage, .fcolorminipage { /* display: inline-block ; */ /* Mini pages which follow each other will be tiled. */ margin: .25em .25em .25em .25em; padding: .25em .25em .25em .25em; display: inline-flex; flex-direction: column ; overflow: auto; } /* Paragraphs in the flexbox did not collapse their margins. */ /* Have not yet researched this. */ .minipage p {margin: .75ex 0em .75ex 0em ;} .fboxBlock .minipage, .colorbox .minipage, .colorboxBlock .minipage, .fcolorbox .minipage, .fcolorboxBlock .minipage {border: none ; background: none;} .fbox, .fboxBlock { border: 1px solid black ; } .fbox, .fboxBlock, .fcolorbox, .fcolorboxBlock, .colorbox, .colorboxBlock, .fminipage, .fcolorminipage {display: inline-block} .shadowbox, .shabox { border: 1px solid black; box-shadow: 3px 3px 3px #808080 ; border-radius: 0px ; padding: .4ex .3em .4ex .3em ; margin: 0pt .3ex 0pt .3ex ; display: inline-block ; } .doublebox { border: 3px double black; border-radius: 0px ; padding: .4ex .3em .4ex .3em ; margin: 0pt .3ex 0pt .3ex ; display: inline-block ; } .ovalbox, .Ovalbox { border: 1px solid black; border-radius: 1ex ; padding: .4ex .3em .4ex .3em ; margin: 0pt .3ex 0pt .3ex ; display: inline-block ; } .Ovalbox { border-width: 2px ; } .framebox { border: 1px solid black; border-radius: 0px ; padding: .3ex .2em 0ex .2em ; margin: 0pt .1ex 0pt .1ex ; display: inline-block ; } .mdframed { /* padding: 0ex ; */ /* border: 1px solid blafck; */ /* border-radius: 0px ; */ padding: 0ex ; margin: 3ex 5% 3ex 5% ; /* display: inline-block ; */ } .mdframed p { padding: 0ex .5em 0ex .5em ; } .mdframed dl { padding: 0ex .5em 0ex .5em ; } .mdframedtitle { padding: .5em ; display: block ; font-size: 130% } .mdframedsubtitle { padding: 0ex .5em 0ex .5em ; display: block ; font-size: 115% ; } .mdframedsubsubtitle { padding: 0ex .5em 0ex .5em ; display: block ; } .mdtheorem { padding: 0ex .5em 0ex .5em ; margin: 3ex 5% 3ex 5% ; /* display: inline-block ; */ } /* framed package */ .framed, pre.boxedverbatim, fcolorbox { margin: 3ex 0em 3ex 0em ; border: 1px solid black; border-radius: 0px ; padding: .3ex 1em 0ex 1em ; display: block ; } .snugframed { margin: 3ex 0em 3ex 0em ; border: 1px solid black; border-radius: 0px ; display: block ; } .framedleftbar { margin: 3ex 0em 3ex 0em ; border-left: 3pt solid black; border-radius: 0px ; padding: .3ex .2em .3ex 1em ; display: block ; } .framedtitle { margin: 0em ; padding: 0em ; font-size: 130% } .framedtitle p { padding: .3em } dl { margin: 1ex 2em 1ex 0em; line-height: 1.3; } dl dt { margin-top: 1ex; margin-left: 1em ; font-weight: bold; } dl dd p { margin-top: 0em; } nav.toc, nav.lof, nav.lot, nav.lol, nav.lothm { font-family: "URW Classico", Optima, "Linux Biolinum O", "DejaVu Sans", "Bitstream Vera Sans", Geneva, Verdana, sans-serif ; margin-bottom: 4ex ; } nav.toc p, nav.lof p, nav.lot p, nav.lol p, nav.lothm p { line-height: 1.2 ; margin-top:.5ex ; margin-bottom:.5ex; font-size: .9em ; } img, img.hyperimage, img.borderimage { max-width: 600px; border: 1px solid silver; box-shadow: 3px 3px 3px #808080 ; padding: .5% ; margin: .5% ; background: none ; } img.inlineimage{ padding: 0px ; box-shadow: none ; border: none ; background: none ; margin: 0px ; display: inline-block ; border-radius: 0px ; } img.logoimage{ max-width: 300px ; box-shadow: 3px 3px 3px #808080 ; border: 1px solid black ; background:none ; padding:0 ; margin:.5ex ; border-radius: 10px ; } .section { /* To have each section float relative to each other: */ /* display: block ; float: left ; position: relative ; background: white ; border: 1px solid silver ; padding: .5em ; */ margin: 0ex .5em 0ex .5em ; padding: 0 ; } figure { margin: 3ex auto 3ex auto ; padding: 1ex 1em 1ex 1em ; overflow-x: auto ; } /* To automatically center images in figures: */ /* figure img.inlineimage { margin: 0ex auto 0ex auto ; display: block ; } */ /* To automatically center minipages in figures: */ /* figure div.minipage, figure div.minipage div.minipage { margin: 1ex auto 1ex auto ; display: block ; } */ figure div.minipage p { font-size: 85% ; } figure.subfigure, figure.subtable { display: inline-block ; margin: 3ex 1em 3ex 1em ; } figcaption .minipage { margin:0 ; padding: 0 } div.floatrow { text-align: center; } div.floatrow figure { display: inline-block ; margin: 1ex 2% ; } div.floatfoot { font-size: .85em ; border-top: 1px solid silver ; line-height: 1.2 ; } figcaption , .lstlistingtitle { font-size: .85em ; text-align: center ; font-weight: bold ; margin-top: 1ex ; margin-bottom: 1ex ; } figure.subfigure figcaption, figure.subtable figcaption { border-bottom: none ; background: none ; } div.nonfloatcaption { margin: 1ex auto 1ex auto ; font-size: .85em ; text-align: center ; font-weight: bold ; } /* For a \RawCaption inside a minipage inside a figure's floatrow: */ figure div.floatrow div.minipage figcaption { border: none ; background: none ; } table { margin: 1ex auto 1ex auto ; border-collapse: collapse ; border-spacing: 0px ; line-height: 1.3 ; } tr.hline {border-top: 1px solid silver ; margin-top: 0ex ; margin-bottom: 0ex ; } /* for \hline */ tr.tbrule {border-top: 1px solid black ; margin-top: 0ex ; margin-bottom: 0ex ; } /* for \toprule, \bottomrule */ td {padding: 1ex .5em 1ex .5em ;} table td.tdl { text-align: left ; vertical-align: middle ; } table td.tdc { text-align: center ; vertical-align: middle ; } table td.tdat { text-align: center ; vertical-align: middle ; padding: 0px ; margin: 0px ; } table td.tdbang { text-align: center ; vertical-align: middle ; } table td.tdr { text-align: right ; vertical-align: middle ; } table td.tdp { text-align: left ; vertical-align: bottom ; } table td.tdm { text-align: left ; vertical-align: middle ; } table td.tdb { text-align: left ; vertical-align: top ; } table td.tdP { text-align: center ; vertical-align: bottom ; } table td.tdM { text-align: center ; vertical-align: middle ; } table td.tdB { text-align: center ; vertical-align: top ; } table td.tdlrule { text-align: left ; border-top: 1px solid silver ; vertical-align: middle ; } /* for cmidrule */ table td.tdcrule { text-align: center ; border-top: 1px solid silver ; vertical-align: middle ; } table td.tdatrule { text-align: center ; border-top: 1px solid silver ; vertical-align: middle ; padding: 0px ; margin: 0px ; } table td.tdbangrule { text-align: center ; border-top: 1px solid silver ; vertical-align: middle ; } /* for cmidrule */ table td.tdrrule { text-align: right ; border-top: 1px solid silver ; vertical-align: middle ; } table td.tdprule { text-align: left ; border-top: 1px solid silver ; vertical-align: bottom ; } table td.tdmrule { text-align: left ; border-top: 1px solid silver ; vertical-align: middle ; } table td.tdbrule { text-align: left ; border-top: 1px solid silver ; vertical-align: top ; } table td.tdPrule { text-align: center ; border-top: 1px solid silver ; vertical-align: bottom ; } table td.tdMrule { text-align: center ; border-top: 1px solid silver ; vertical-align: middle ; } table td.tdBrule { text-align: center ; border-top: 1px solid silver ; vertical-align: top ; } /* Margins of paragraphs inside table cells: */ td.tdp p , td.tdprule p , td.tdP p , td.tdPrule p { padding-top: 1ex ; padding-bottom: 1ex ; margin: 0ex ; } td.tdm p , td.tmbrule p , td.tdM p , td.tdMrule p { padding-top: 1ex ; padding-bottom: 1ex ; margin: 0ex ; } td.tdb p , td.tdbrule p , td.tdB p , td.tdBrule p { padding-top: 1ex ; padding-bottom: 1ex ; margin: 0ex ; } td.tdp , td.tdprule , td.tdP , td.tdPrule { padding: 0ex .5em 0ex .5em ; } td.tdm , td.tdmrule , td.tdM , td.tdMrule { padding: 0ex .5em 0ex .5em ; } td.tdb , td.tdbrule , td.tdB , td.tdBrule { padding: 0ex .5em 0ex .5em ; } /* table notes: */ .tnotes { margin: 0ex 5% 1ex 5% ; padding: 0.5ex 1em 0.5ex 1em; font-size:.85em; text-align: left ; } .tnotes dl dt p {margin-bottom:0px;} .tnoteitemheader {margin-right: 1em;} /* center, flushleft, flushright environments */ div.center{text-align:center;} div.center table {margin-left:auto;margin-right:auto;} div.flushleft{text-align:left;} div.flushleft table {margin-left:0em ; margin-right:auto;} div.flushright{text-align:right;} div.flushright table {margin-left:auto ; margin-right: 0em ;} /* Fancybox */ div.Btrivlist table tr td { padding: .2ex 0em ; } /* program listing callouts: */ span.callout { font-family: "DejaVu Sans", "Bitstream Vera Sans", Geneva, Verdana, sans-serif ; border-radius: .5em; background-color:black; color:white; padding:0px .25em 0px .25em; margin: 0 ; font-weight: bold; font-size:.72em ; } div.programlisting pre.verbatim span.callout{ font-size: .85em ; } div.published { text-align: center ; font-variant: normal ; font-style: italic ; font-size: 1em ; margin: 3ex 0em 3ex 0em ; } div.subtitle { text-align: center ; font-variant: normal ; font-style: italic ; font-size: 1.25em ; margin: 3ex 0em 3ex 0em ; } div.subtitle p { margin: 1ex ; } div.author { font-variant: normal ; font-style: normal ; font-size: 1em ; margin: 3ex 0em 3ex 0em ; } div.author table { margin: 3ex auto 0ex auto ; background: none ; } div.author table tbody tr td { padding: .25ex ; } span.affiliation {font-size: .85em ; font-variant: small-caps; } div.titledate { text-align: center ; font-size: .85em ; font-style: italic; margin: 6ex 0em 6ex 0em ; } nav.topnavigation{ text-align: left ; padding: 0.5ex 1em 0.5ex 1em ; /* margin: 2ex 0em 3ex 0em ; */ margin: 0 ; border-bottom: 1px solid silver ; border-top: 1px solid silver ; clear:right ; } nav.botnavigation{ text-align: left ; padding: 0.5ex 1em 0.5ex 1em ; /* margin: 3ex 0em 2ex 0em ; */ margin: 0 ; border-top: 1px solid silver ; border-bottom: 1px solid silver ; clear:right ; } header{ line-height: 1.2 ; font-size: 1em ; /* border-bottom: 2px solid silver ; */ margin: 0px ; padding: 0ex 1em 0ex 1em ; text-align:center ; } header p {margin:0ex;padding:4ex 0em 2ex 0em ;text-align:center;} footer{ font-size: .85em ; line-height: 1.2 ; margin-top: 1ex ; border-top: 2px solid silver ; padding: 2ex 1em 2ex 1em ; clear:right ; text-align:left ; } a.linkhome { font-weight:bold ; font-size: 1em ;} div.lateximagesource { padding: 0px ; margin: 0px ; display: none; } img.lateximage{ padding: 0px 0px 0px 0px ; box-shadow: none ; border: none ; background: none ; margin: 0px 0px -.15ex 0px ; /* pdfcrop leaves a slight margin, adjust to baseline */ max-width: 100% ; border-radius: 0ex ; border: none ; } nav.sidetoc { font-family: "DejaVu Serif", "Bitstream Vera Serif", "Lucida Bright", Georgia, serif; float:right ; width: 20%; border-left: 1px solid silver; border-top: 1px solid silver; border-bottom: 1px solid silver; /* border-top: 2px solid #808080 ; */ background: #FAF7F4 ; padding: 2ex 0em 2ex 1em ; margin: 0ex 0em 2ex 1em ; font-size:.9em ; border-radius: 20px 0px 0px 20px ; } div.sidetoccontents { /* border-top: 1px solid silver ; */ overflow-y: auto ; width: 100% ; text-align: left ; } nav.sidetoc p {line-height:1.2 ; margin: 1ex .5em 1ex .5em ; text-indent: 0 ; } nav.sidetoc p a {color:black ; font-size: .7em ;} div.sidetoctitle {font-size: 1.2em; font-weight:bold; text-align:center; border-bottom: 1px solid silver ; } nav.sidetoc a:hover {text-decoration: underline ; } section.textbody { margin: 0ex 1em 0ex 1em ;} div.multicolsheading { -webkit-column-span: all; -moz-column-span: all; column-span: all; } div.multicols { -webkit-columns: 3 380px ; -moz-columns: 3 380px ; columns: 3 380px ; } div.multicols p {margin-top: 0ex} /* Used to support algorithmicx: */ span.floatright { float: right ; } /* Native LaTeX theorems: */ .theoremcontents { font-style: italic; margin-top: 3ex ; margin-bottom: 3ex ; } .theoremlabel { font-style: normal; font-weight: bold ; margin-right: .5em ; } /* theorem, amsthm, and ntheorem packages */ span.theoremheader, span.theoremheaderplain, span.theoremheaderdefinition, span.theoremheaderbreak, span.theoremheadermarginbreak, span.theoremheaderchangebreak, span.theoremheaderchange, span.theoremheadermargin { font-style:normal ; font-weight: bold ; margin-right: 1em ; } span.amsthmnameplain, span.amsthmnamedefinition, span.amsthmnumberplain, span.amsthmnumberdefinition { font-style:normal ; font-weight: bold ; } span.amsthmnameremark, span.amsthmnumberremark {font-style:italic ; font-weight: normal ; } span.amsthmnoteplain, span.amsthmnotedefinition {font-style:normal ;} span.theoremheaderremark, span.theoremheaderproof, span.amsthmproofname {font-style:italic ; font-weight: normal ; margin-right: 1em ; } span.theoremheadersc { font-style:normal ; font-variant: small-caps ; font-weight: normal ; margin-right: 1em ; } .theoremendmark {float:right} div.amsthmbodyplain, div.theorembodyplain, div.theorembodynonumberplain, div.theorembodybreak, div.theorembodynonumberbreak, div.theorembodymarginbreak, div.theorembodychangebreak, div.theorembodychange, div.theorembodymargin { font-style:italic; margin-top: 3ex ; margin-bottom: 3ex ; } div.theorembodydefinition, div.theorembodyremark, div.theorembodyproof, div.theorembodyplainupright, nonumberplainuprightsc, div.amsthmbodydefinition, div.amsthmbodyremark, div.amsthmproof { font-style: normal ; margin-top: 3ex ; margin-bottom: 3ex ; } span.amsthmnoteremark {} /* For CSS LaTeX and related logos: Based on: http://edward.oconnor.cx/2007/08/tex-poshlet http://nitens.org/taraborelli/texlogo */ .latexlogofont { font-family: "Linux Libertine O", "Nimbus Roman No 9 L", "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif; font-variant: normal ; } .latexlogo { font-family: "Linux Libertine O", "Nimbus Roman No 9 L", "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif; letter-spacing: .03em ; font-size: 1.1em; } .latexlogo sup { text-transform: uppercase; letter-spacing: .03em ; font-size: 0.85em; vertical-align: 0.15em; margin-left: -0.36em; margin-right: -0.15em; } .latexlogo sub { text-transform: uppercase; vertical-align: -0.5ex; margin-left: -0.1667em; margin-right: -0.125em; font-size: 1em; } .xetexlogo { font-family: "Linux Libertine O", "Nimbus Roman No 9 L", "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif; letter-spacing: .03em ; font-size: 1.1em; } /* A smaller gap between Xe and Tex v.s. LaTeX: */ .xetexlogo sub { text-transform: uppercase; vertical-align: -0.5ex; margin-left: -0.0667em; margin-right: -0.2em; font-size: 1em; letter-spacing: .03em ; } /* A large gap between Xe and LaTeX v.s. TeX: */ .xelatexlogo sub { text-transform: uppercase; vertical-align: -0.5ex; margin-left: -0.0667em; margin-right: -.05em; font-size: 1em; letter-spacing: .03em ; } .amslogo { font-family: "TeXGyreChorus","URW Chancery L", "Apple Chancery","ITC Zapf Chancery","Monotype Corsiva", "Linux Libertine O", "Nimbus Roman No 9 L", "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif; font-style: italic; } .lyxlogo { font-family: "URW Classico", Optima, "Linux Biolinum O", "DejaVu Sans", "Bitstream Vera Sans", Geneva, Verdana, sans-serif ; } /* Only display top and bottom navigation if a small screen: */ /* Hide the sidetoc if a small screen: */ nav.topnavigation { display:none; } nav.botnavigation { display:none; } @media screen and (max-width: 45em) { /* nav.sidetoc {display:none;} */ nav.sidetoc { float: none ; width: 100% ; margin: 5ex 0px 5ex 0px ; padding: 0 ; border-radius: 0 ; border-bottom: 1px solid black ; border-top: 1px solid black ; box-shadow: none ; } /* nav.topnavigation { display:block } */ nav.botnavigation { display:block } .marginpar { max-width: 100%; float: none; display:block ; margin: 1ex 1em 1ex 1em ; } } @media print { body { font-family: "Linux Libertine O", "DejaVu Serif", "Bitstream Vera Serif", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif; } nav.sidetoc { display:none; } nav.topnavigation { display: none; } nav.botnavigation { display: none; } } @media handheld { nav.sidetoc { display:none; } nav.topnavigation { display:block } nav.botnavigation { display:block } } @media projection { nav.sidetoc { display:none; } nav.topnavigation { display:block } nav.botnavigation { display:block } } \end{filecontents*} % \end{Verbatim}% for syntax highlighting \end{warpprint} % \end{macrocode} % \subsection{lwarp\_sagebrush.css} % \DescribeFile{lwarp_sagebrush.css} % An optional \CSS\ which may be used for % a semi-modern appearance. % % If used, this must be present both when compiling the project % and also when distributing the \HTML\ files. % % \begin{macrocode} \begin{warpprint} \begin{filecontents*}{lwarp_sagebrush.css} @import url("lwarp.css") ; A:link {color:#105030 ; text-decoration: none ; } A:visited {color:#705030 ; text-shadow:1px 1px 2px #a0a0a0;} A:hover {color:#006000 ; text-decoration: underline ; text-shadow:0px 0px 2px #a0a0a0;} A:active {color:#00C000 ; text-shadow:1px 1px 2px #a0a0a0;} h1, h2, h3, h4, h5, h6, span.paragraph, span.subparagraph { font-family: "URW Classico", Optima, "Linux Biolinum O", "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif; font-variant: small-caps ; font-weight: normal ; color: #304070 ; text-shadow: 2px 2px 3px #808080; } h1 { /* title of the entire website, used on each page */ font-variant: small-caps ; color: #304070 ; text-shadow: 2px 2px 3px #808080; background-color: #F7F7F0 ; background-image: linear-gradient(to bottom, #F7F7F0, #C0C0C4); } h1 { border-bottom: 1px solid #304070; border-top: 2px solid #304070; } h2 { border-bottom: 1px solid #304070; border-top: 2px solid #304070; background-color: #F7F7F0 ; background-image: linear-gradient(to bottom, #F7F7F0, #DAD0C0); } div.abstract { background: #f5f5eb ; background-image: linear-gradient(to bottom, #f5f5eb, #C8C8B8); border: 1px solid silver; border-radius: 1em ; } div.abstract dl {line-height:1.5;} div.abstract dt {color:#304070;} div.abstracttitle{ font-family: "URW Classico", Optima, "Linux Biolinum O", "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif; font-weight:bold; font-variant: small-caps ; font-size:1.5em; border-bottom: 1px solid silver ; color: #304070 ; text-align: center ; text-shadow: 1px 1px 2px #808080; } span.abstractrunintitle{ font-family: "URW Classico", Optima, "Linux Biolinum O", "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif; font-weight:bold; } div.epigraph { background: #f5f5eb ; background-image: linear-gradient(to bottom, #f5f5eb, #C8C8B8); border: 1px solid silver ; border-radius: 1ex ; box-shadow: 3px 3px 3px #808080 ; } .example { background-color: #f5f5eb ; background-image: linear-gradient(to bottom, #f5f5eb, #C8C8B8); } div.exampletitle{ font-family: "URW Classico", Optima, "Linux Biolinum O", "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif; font-weight:bold; font-variant: small-caps ; border-bottom: 1px solid silver ; color: #304070 ; text-align: center ; text-shadow: 1px 1px 2px #808080; } .sidebar { background-color: #f5f5eb ; background-image: linear-gradient(to bottom, #f5f5eb, #C8C8B8); } div.sidebartitle{ font-family: "URW Classico", Optima, "Linux Biolinum O", "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif; font-weight:bold; font-variant: small-caps ; border-bottom: 1px solid silver ; color: #304070 ; text-align: center ; text-shadow: 1px 1px 2px #808080; } .fancyvrblabel { font-family: "URW Classico", Optima, "Linux Biolinum O", "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif; font-weight:bold; font-variant: small-caps ; font-size: 1.5em ; color: #304070 ; text-align: center ; text-shadow: 1px 1px 2px #808080; } .minipage { background-color: #eeeee7 ; border: 1px solid silver ; border-radius: 1ex ; } .framed .minipage , .framedleftbar .minipage { border: none ; background: none ; padding: 0ex ; margin: 0ex ; } figure.figure .minipage, figcaption .minipage { border: none; } div.marginblock div.minipage { border: none; } figure , div.marginblock { background-color: #eeeee7 ; border: 1px solid silver ; border-radius: 1ex ; box-shadow: 3px 3px 3px #808080 ; } figure figure { border: 1px solid silver ; margin: 0em ; box-shadow: none ; } /* figcaption { border-top: 1px solid silver ; border-bottom: 1px solid silver ; background-color: #e8e8e8 ; } */ div.table { box-shadow: 3px 3px 3px #808080 ; } /* .tnotes { background: #e8e8e8; border: 1px solid silver; } */ nav.topnavigation{ background-color: #b0b8b0 ; background-image: linear-gradient(to bottom,#e0e0e0,#b0b8b0) ; } nav.botnavigation{ background-color: #b0b8b0 ; background-image: linear-gradient(to top,#e0e0e0,#b0b8b0) ; } header{ background-color: #F7F7F0 ; background-image: linear-gradient(to top, #F7F7F0, #b0b8b0); } footer{ background-color: #F7F7F0 ; background-image: linear-gradient(to bottom, #F7F7F0, #b0b8b0); } nav.sidetoc { background-color: #F7F7F0 ; background-image: linear-gradient(to bottom, #F7F7F0, #C0C0C0); box-shadow: 3px 3px 3px #808080 ; border-radius: 0px 0px 0px 20px ; } div.sidetoctitle {color: #304070 ; } nav.sidetoc a:hover { color:#006000 ; text-decoration: none ; text-shadow:0px 0px 2px #a0a0a0; } @media screen and (max-width: 45em) { nav.sidetoc { border-radius: 0 ; } } \end{filecontents*} % \end{Verbatim}% for syntax highlighting \end{warpprint} % \end{macrocode} % \subsection{lwarp\_formal.css} % \DescribeFile{lwarp_formal.css} % An optional \CSS\ which may be used for % a more formal appearance. % % If used, this must be present both when compiling the project % and also when distributing the \HTML\ files. % % \begin{macrocode} \begin{warpprint} \begin{filecontents*}{lwarp_formal.css} @import url("lwarp.css") ; A:link {color:#802020 ; text-decoration:none; } A:visited {color:#802020 ; text-shadow:none ;} A:hover {color:#400000 ; text-shadow:none ;} A:active {color:#C00000 ; text-shadow:none ;} body { font-family: "Linux Libertine O", "Hoefler Text", "Garamond", "Bembo", "Janson", "TeX Gyre Pagella", "Palatino", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times, "Times New Roman", serif; background: #fffcf5; } span.textrm { font-family: "Linux Libertine O", "Hoefler Text", "Garamond", "Bembo", "Janson", "TeX Gyre Pagella", "Palatino", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times, "Times New Roman", serif; } span.textsf { font-family: "DejaVu Sans", "Bitstream Vera Sans", Geneva, Verdana, sans-serif ; } h1, h2, h3, h4, h5, h6, span.paragraph, span.subparagraph { font-family: "Linux Libertine O", "Hoefler Text", "Garamond", "Bembo", "Janson", "TeX Gyre Pagella", "Palatino", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times, "Times New Roman", serif; color: #800000 ; text-shadow: none ; } h1, h2 { background-color: #fffcf5 ; background-image: none ; border-bottom: 1px solid #808080; border-top: 2px solid #808080; } div.abstracttitle { font-family: "Linux Libertine O", "Hoefler Text", "Garamond", "Bembo", "Janson", "TeX Gyre Pagella", "Palatino", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times, "Times New Roman", serif; color: black ; text-shadow: none ; } span.abstractrunintitle { font-family: "Linux Libertine O", "Hoefler Text", "Garamond", "Bembo", "Janson", "TeX Gyre Pagella", "Palatino", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times, "Times New Roman", serif; color: black ; text-shadow: none ; } div.abstract { font-size: 100% } .sidebar { background: #fffcf5; background-image: none ; margin: 2em 5% 2em 5%; padding: 0.5em 1em; border: none ; border-top : 1px solid silver; border-bottom : 1px solid silver; font-size: 90% ; } div.sidebartitle{ font-family: "Linux Libertine O", "Hoefler Text", "Garamond", "Bembo", "Janson", "TeX Gyre Pagella", "Palatino", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times, "Times New Roman", serif; color: #800000 ; text-shadow: none ; border: none ; } .example { background: #fffcf5; background-image: none ; margin: 2em 5% 2em 5%; padding: 0.5em 1em; border: none ; border-top : 1px solid silver; border-bottom : 1px solid silver; } div.exampletitle{ font-family: "Linux Libertine O", "Hoefler Text", "Garamond", "Bembo", "Janson", "TeX Gyre Pagella", "Palatino", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times, "Times New Roman", serif; color: #800000 ; text-shadow: none ; border: none ; } div.fancyvrblabel{ font-family: "Linux Libertine O", "Hoefler Text", "Garamond", "Bembo", "Janson", "TeX Gyre Pagella", "Palatino", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times, "Times New Roman", serif; color: #800000 ; text-shadow: none ; border: none ; } .verse { font-family: "Linux Libertine O", "Hoefler Text", "Garamond", "Bembo", "Janson", "TeX Gyre Pagella", "Palatino", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times, "Times New Roman", serif; } figure { margin: 3ex 5% 3ex 5% ; padding: 1ex 1em 1ex 1em ; background-color: #fffcf5 ; overflow-x: auto ; border: none ; /* border-top: 1px solid silver; */ /* border-bottom: 1px solid silver; */ } figcaption , .lstlisting { border: none ; /* border-top: 1px solid silver ; */ /* border-bottom: 1px solid silver ; */ background-color: #fffcf5 ; } .tnotes { background: #fffcf5 ; } .theorem { background: none ; } .minipage { background-color: #fffcf5 ; border: none ; } div.floatrow figure { border: none ; } figure figure { border: none ; } nav.toc, nav.lof, nav.lot, nav.lol { font-family: "Linux Libertine O", "Hoefler Text", "Garamond", "Bembo", "Janson", "TeX Gyre Pagella", "Palatino", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times, "Times New Roman", serif; } nav.sidetoc { font-family: "Linux Libertine O", "Hoefler Text", "Garamond", "Bembo", "Janson", "TeX Gyre Pagella", "Palatino", "Liberation Serif", "Nimbus Roman No 9 L", "FreeSerif", Times, "Times New Roman", serif; background-image: linear-gradient(to bottom, #fffcf5, #C0C0C0); border-radius: 0px 0px 0px 20px ; } div.sidetoctitle{ color: #800000 ; } header{ background-color: #e0e0e0 ; background-image: linear-gradient(to top, #fffcf5, #b0b0b0); text-align:center ; } footer{ background-color: #e0e0e0 ; background-image: linear-gradient(to bottom, #fffcf5, #b0b0b0); padding: 2ex 1em 2ex 1em ; clear:right ; text-align:left ; } nav.botnavigation { background: #dedcd5 ; border-top: 1px solid black ; } \end{filecontents*} % \end{Verbatim}% for syntax highlighting \end{warpprint} % \end{macrocode} % \subsection{sample\_project.css} % \DescribeFile{sample_project.css} % The project-specific \CSS\ file. Use with \cs{CSSFilename}. % % If used, this must be present both when compiling the project % and also when distributing the \HTML\ files. % % \begin{macrocode} \begin{warpprint} \begin{filecontents*}{sample_project.css} /* ( --- Start of project.css --- ) */ /* A sample project-specific CSS file for lwarp --- ) */ /* Load default lwarp settings: */ @import url("lwarp.css") ; /* or lwarp_formal.css, lwarp_sagebrush.css */ /* Project-specific CSS setting follow here. */ /* . . . */ /* ( --- End of project.css --- ) */ \end{filecontents*} % \end{Verbatim}% for syntax highlighting \end{warpprint} % \end{macrocode} % \subsection{lwarp.xdy} % \DescribeFile{lwarp.xdy} % Used to modify the index for \pkg{lwarp}. % % This must be present when compiling the project, % but does not need to be present when distributing % the resulting \HTML\ files. % % \changes{v0.30}{2017/04/28}{File: \protect\texttt{lwarp\_html.xdy} renamed to \protect\texttt{lwarp.xdy}.} % \changes{v0.30}{2017/04/26}{Fix: \protect\texttt{lwarp.xdy} only written in print mode.} % % \begin{macrocode} \begin{warpprint} \begin{filecontents*}{lwarp.xdy} (require "tex/inputenc/latin.xdy") (merge-rule "\\PS *" "Postscript") (require "texindy.xdy") (require "page-ranges.xdy") (require "book-order.xdy") (markup-locref :open "\hyperindexref{" :close "}") \end{filecontents*} % \end{Verbatim}% for syntax highlighting \end{warpprint} % \end{macrocode} % \subsection{lwarp\_mathjax.txt} % \DescribeFile{lwarp_mathjax.txt} % Used by \pkg{lwarp} when using MathJax. % % This must be present when compiling the project, % but does not need to be present when distributing % the resulting \HTML\ files. % % \changes{v0.28}{2017/04/11}{File \protect\texttt{lwarp\_mathjax.txt}: Updated \protect\acro{CDN} repository.} % \changes{v0.30}{2017/04/26}{Fix: \protect\texttt{lwarp\_mathjax.txt} only written in print mode.} % \changes{v0.34}{2017/07/27}{File: \protect\texttt{lwarp\_mathjax.txt} version change.} % % % \begin{macrocode} \begin{warpprint} \begin{filecontents*}{lwarp_mathjax.txt} \end{filecontents*} % \end{Verbatim}% for syntax highlighting \end{warpprint} % \end{macrocode} % \subsection{lwarpmk option} % The following is only generated if the |lwarpmk| option % was given to \pkg{lwarp}. % \begin{macrocode} \begin{LWR@createlwarpmk} % \end{macrocode} % \DescribeProgram{lwarpmk} Creates a local copy of |lwarpmk|: % % \changes{v0.21}{2017/02/11}{\protect\texttt{lwarpmk}: Fix: \protect\texttt{lwarpmk again} for Windows.} % \changes{v0.21}{2017/02/22}{\protect\texttt{lwarpmk}: Fix: \protect\texttt{lwarpmk limages} for Windows.} % \changes{v0.21}{2017/02/22}{\protect\texttt{lwarpmk}: Fix: \protect\texttt{lwarpmk} uses \texttt{lateximages} text file instead of shell script.} % \changes{v0.28}{2017/04/14}{\protect\texttt{lwarpmk}: Add: \protect\texttt{printglossary} and \protect\texttt{htmlglossary} commands.} % \changes{v0.29}{2017/04/15}{\protect\texttt{lwarpmk}: Add: \protect\texttt{language} option for config files.} % \changes{v0.30}{2017/04/22}{\protect\texttt{lwarpmk}: \protect\texttt{language} now used for both index and glossary generation.} % \changes{v0.30}{2017/04/22}{\protect\texttt{lwarpmk}: Fix: \protect\texttt{xindy} now used for print index generation with \protect\texttt{latexmk}.} % \changes{v0.30}{2017/04/28}{\protect\texttt{lwarpmk}: Fix: \protect\texttt{xindy} and \protect\texttt{texindy} % adjusted for \protect\texttt{pdflatex}, \protect\texttt{xelatex} and \protect\texttt{lualatex}.} % \changes{v0.30}{2017/04/28}{\protect\texttt{lwarpmk}: Add: \protect\texttt{xdyfile} configuration option.} % \changes{v0.32}{2017/06/08}{\protect\texttt{lwarpmk}: Fix: \protect\texttt{io.lines()} changed to \protect\texttt{file:lines()} % due to \protect\texttt{luatex} changes.} % \changes{v0.37}{2017/08/19}{\protect\texttt{lwarpmk}: Removes additional \HTML\ \protect\texttt{aux} files.} % % \begin{macrocode} \begin{filecontents*}{lwarpmk.lua} #!/usr/bin/env texlua -- Copyright 2016-2017 Brian Dunn -- Print the usage of the lwarpmk command: printversion = "v0.37" function printhelp () print ("lwarpmk: Use lwarpmk -h or lwarpmk --help for help.") ; end function printusage () print ( [[ lwarpmk print [project]: Compile a print version. lwarpmk printindex [project]: Process the index for the print version. lwarpmk printglossary [project]: Process the glossary for the print version. lwarpmk html [project]: Compile an HTML version. lwarpmk htmlindex [project]: Process the index for the html version. lwarpmk htmlglossary [project]: Process the glossary for the html version. lwarpmk again [project]: Touch the source code to trigger recompiles. lwarpmk limages [project]: Process the "lateximages" created by lwarp.sty. lwarpmk pdftohtml [project]: For use with latexmk or a Makefile: Convert project_html.pdf to project_html.html and individual HTML files. lwarpmk clean [project]: Remove project.aux, .toc, .lof/t, .idx, .ind, .log, *_html_inc.*, .gl* lwarpmk cleanall [project]: Remove auxiliary files and also project.pdf, *.html lwarpmk -h: Print this help message. lwarpmk --help: Print this help message. ]] ) printconf () end -- Print the format of the configuration file lwarpmk.conf: function printconf () print ( [[ An example lwarpmk.conf or .lwarpmkconf project file: -- opsystem = "Unix" (or "Windows") latexname = "pdflatex" (or "lualatex", or "xelatex") sourcename = "projectname" (the source-code filename w/o .tex) homehtmlfilename = "index" (or perhaps the project name) htmlfilename = "" (or "projectname" - filename prefix) latexmk = "false" (or "true" to use latexmk to build PDFs) languge = "english" (use a language supported by xindy) xdyfile = "lwarp.xdy" (or a custom file based on lwarp.xdy) -- Filenames must contain only letters, numbers, underscore, or dash. Values must be in "quotes". ]] ) ; end -- Split one large sourcefile into a number of files, -- starting with destfile. -- The file is split at each occurance of