As promised this is the first installment of templates and code for galley formatting, the rest will hopefully follow in couple of days. The complete document can be found at http://www.latex-project.org/code/experimental/galley/xhj.dtx as an introduction I've added the first part to this mail below. I think that this document already serves as a good introduction to the high-level aspects of the new galley mechanism and though one can't make use of the code without the low-level interfaces I hope that the documentation will spawn a lively discussion. A lot of issues and requests for comments are already added into the documentation. Enjoy (and please don't just denote agreement with polite silence :-) Frank % \begin{abstract} % This module contains basic templates for interfacing with the % galley mechanism as set up by the module % \texttt{galley2}. These templates are intended for class % designers and are mostly usable out of the box (i.e., this is one % of the modules where providing a suitable number of default % instances is probably sensible since they would cover 98\% of all % usage. In contrast the \texttt{galley2} module contains only % low-level interfaces for % direct manipulation of the galley mechanism which are geared % towards package writers having special needs which are not % fulfilled by the templates in this module. % \end{abstract} % % % % % \section{Introduction} % % In \LaTeXplus{} terminology a galley is a rectangular area which % receives text and other material filling it from % top.\footnote{The predominant direction depends on the writing % system and with extensions to \TeX{} such as Omega there are % possibilities to define galleys with a different filling direction.} % The vertically extend of a galley is normally not restricted % (there are exceptions); instead certain chunks are taken off the top % of an % already partially filled galley to form columns or similar areas % on a page. This process is typically asynchronous but there are ways % to control or change its behavior. % % Examples for galleys are `the main galley', where the continuous % document data gets formatted into and from which columns and pages are % constructed, and `vbox galley's, such as the body of a minipage % environment or the body of a float (in \LaTeXe only---the new float % mechanism for \LaTeXplus{} will employ horizontally oriented float % bodies). The latter galleys are typically not being split after % formatting though there can be exceptions. % % Low-level interfaces for setting up such galleys and the way objects % are formatted into them are provided by the module % \texttt{galley2}. % % \subsection{Formatting layers} % % The present module is mainly concerned with the % formatting of text in such galleys. % The galley mechanism provides interfaces at four different layers % some of which can be manipulated through the templates provided by % this module. % % \subsubsection{Outer galley dimensions} % % In the bottom layer the external dimensions of a galley are % fixed. In most cases only the horizontal dimension is defined while % the vertical dimension (i.e., the filling direction) remains % unspecified. These dimensions are fixed when initiating a new galley, % using low-level functions, and are not modifiable. The horizontal % overall width of the current galley is available for inspection in % the register |\hsize|.\footnote{This is going to change once there % is a final concept for handling this part of the interface, e.g., % the relation of \texttt{\textbackslash hsize}, % \texttt{\textbackslash columnwidth}, and \texttt{\textbackslash % textwidth}. The latter are actually parameters of the text-page and % should probably not be handled as it is done in \LaTeXe{}, i.e., by % also using \texttt{\textbackslash columnwidth} as a measure for the % current galley width. Perhaps one should introduce a % \texttt{\textbackslash galleywidth} parameter instead of using % \texttt{\textbackslash hsize}.} % There are no templates that only set variable of this layer, though % higher level % templates (e.g., a template for providing minipage functionality) % will of course address this part of the galley mechanism. % % % \subsubsection{Inner galley dimensions} % % The second layer defines the inner horizontal galley dimensions of % the galley, i.e., the measure used for paragraph text and its % positioning within the galley. The current measure of the galley is % available for inspection in the register |\linewidth| and the % indentation from the left outer margin is available in the register % |\@totalleftmargin|.\footnote{The two registers are already % available in \LaTeXe{} and their names have been retained to make % it easier to use a mixture of old and new code. However at some % point the interface should be made more uniform by either providing % two user accessible or two user inaccessible names.} % % This layer can (and should) be manipulated by higher-level templates % through template instances of the type `measure'. These templates % make long-term changes. % % % % % \subsubsection{Paragraph shapes} % % The third layer defines the paragraph shape within the measure as % provided by the second layer. In the absence of any specification % for that layer the paragraph shape used will be that of a % rectangular area of the width of the current measure. % % For this layer we are restricted by the mechanisms offered by % \TeX{}. This means that it is possible to define particular % paragraph shapes such as cutouts only from the top of a paragraph % but not relative to its bottom. % % This layer can (and should) be manipulated by higher-level templates % through template instances of the type `pshape'. Templates in this % layer typically make short-term changes only (i.e. applicable only % to the upcoming paragraph), however templates for long-term changes % are also permissable though none are provided right now. % % A future implementation of the \texttt{galley2} module is probably % going to support pshapes spanning several paragraphs, however at the % moment pshapes apply per paragraph only. % % % \subsubsection{Text formatting within the paragraph shape} % % The forth (and currently final) layer deals with the paragraph % formatting aspects such as hyphenation and justification (h\&j which % gave the current module its name). % % There are several template types in this layer: `hj' is a type that % sets all aspects of h\&j in a single template whereas the types % `justification', `linebreak', and `hyphenation' deal with individual % aspects. %