% Copyright 2009,2010 The LaTeX Project \documentclass{ltnews} \PassOptionsToPackage{colorlinks}{hyperref} \usepackage{metalogo,ragged2e} \AtBeginDocument{ \renewcommand{\LaTeXNews}{\LaTeX3~News} \RaggedRight } \usepackage{url} \publicationmonth{January} \publicationyear{2010} \publicationissue{3} \begin{document} \maketitle \raisefirstsection \section{Happy New Year} Welcome to the holiday season edition of `news of our activities' for the \LaTeX3 team. \section{Recent developments} The last six months has seen two significant releases in the \LaTeX3 code. In the \textsc{ctan} repository for the \pkg{xpackages},\footnote{\url{http://mirror.ctan.org/tex-archive/macros/latex/contrib/xpackages/}} you'll find two items of interest: \begin{itemize} \item A revised version of \textsf{xparse}; and \item The new package \textsf{xtemplate}, a re-implementation of \textsf{template} with a new syntax. \end{itemize} Special thanks to Joseph Wright who handled the implementations above almost single-handedly (with lots of input and feedback from other members of the team and members of the \textsc{latex-l} mailing list). These two packages are designed for the \LaTeX\ package author who wishes to define document commands and designer interfaces in a high-level manner. \paragraph{\textsf{xparse}} This package allows complex document commands to be constructed with all sorts of optional arguments and flags. Think of how \verb|\newcommand| allows you to create a command with a single optional argument and \textsf{xparse} is a generalisation of that idea. \paragraph{\textsf{xtemplate}} This package requires more explanation. \textsf{Xtemplate} is designed to separate the logical information in a document from its visual representation. `Templates' are constructed to fulfil individual typesetting requirements for each set of arguments; to change the look of a certain part of a document, instantiations of templates can be swapped out for another without (a) having to change the markup of the source document, or (b) having to edit some internal \LaTeX\ macro. \LaTeXe{} packages, such as \textsf{geometry} or \textsf{titlesec}, already provide parameterized interfaces to specific document elements. For example, one may use \textsf{titlesec} to change the layout of a \verb|\section|: one modifies its layout parameters via \verb|\titleformat| and \verb|\titlespacing|. In a way, such packages define a template for a specific document element and some manipulation commands to instantiate it. \pagebreak However, the moment the intended layout is not achievable with one package you are on your own: either you have to resort to low-level programming or find some other high-level package which, of course, comes with its own set of conventions and manipulation commands. The \textsf{xtemplate} package can be thought of a generalization of such ideas. It provides a uniform interface for defining and managing templates for any kind of document element and most importantly provides a uniform interface for instantiating the layout. Thus the designer activity of defining or modifying a document class is limited to selecting the document elements that should be provided by the class (e.g., \verb|\chapter|, \verb|\section| \verb|\footnote|, lists, \ldots), selecting appropriate ``named'' templates for each of them, and instantiating these templates by specifying values for their layout parameters. If a desired layout can't be achieved with a given template a different template for the same document element can be selected. Programming is only necessary if no suitable template for the intended layout is available. It is then that a \LaTeX{} programmer has to build a new template that supports the layout requirements. Once this task is complete, the template may be added to the selection of templates that designers and users may choose from to define or adjust document layouts seamlessly. This is a slight gloss over the complexities of the package itself, which you can read about in the documentation. We've tried to document \textsf{xtemplate} clearly but we'd love feedback on whether the ideas make sense to you. As an addendum to the introduction of \textsf{xtemplate}, the older \textsf{template} package will be retired in the near future. To our knowledge there is only a single package on \textsc{ctan} that uses \textsf{template}, namely \textsf{xfrac}, and members of the \LaTeX\ team are in the process of switching this package over to \textsf{xtemplate}. If you have any private code that uses \textsf{template}, please let us know! \section{Upcoming plans} Having announced the updated \textsf{xparse} and the new \textsf{xtemplate}, the next stage of development will revolve around using these two systems in the other components of the \textsf{xpackages}, feeding back our experience in practise with the original ideas behind the designs and evaluating if the packages are meeting our expectations. \subsection{Packages to tackle} \paragraph{\textsf{xhead}} The first work will be to create a new \textsf{xpackage} (probably called \textsf{xhead}), for typesetting section headings and other document divisions. Section headings are one of the more complex areas to work with, so the work should stress \textsf{xtemplate} enough to know if its current design is sufficient for most needs. Nothing has been released yet, but we'll announce further developments on the \textsc{latex-l} mailing list\footnote{For details, see \url{http://www.latex-project.org/code.html}} in the mean time. \paragraph{\textsf{galley}} We also need to give \textsf{galley} the same treatment as \textsf{xparse} and \textsf{xtemplate} have already had. That is, we have an older implementation (in fact two) that needs some work before we're ready to release it to \textsc{ctan}. The \textsf{galley} package is used to place material into the vertical list while typesetting but before page breaks occur. Since it works at such a low level, it is important to solidify this package before writing higher level design templates. An issue we have to face is that to achieve best results, \textsf{galley} cannot be used in concert with \LaTeXe\ code. This could limit its usefulness, and we may decide that it's better to scale back the features we're attempting, to allow better interoperability for existing packages and documents. More work remains before we can decide between these options. \end{document}