diff options
author | Karl Berry <karl@freefriends.org> | 2006-08-27 18:22:43 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-08-27 18:22:43 +0000 |
commit | b992fc9dd36aa32f8933d16f557398beb47b4067 (patch) | |
tree | 7afc3e67afc57e08957d8b61321f517fb7eea784 /Master/texmf-dist/source/generic/babel/tb1202.tex | |
parent | 3875fb4f1f03dec9875f95e5ebebc7dfab4a5f2a (diff) |
latex required package babel update from latex-tds (27aug06)
git-svn-id: svn://tug.org/texlive/trunk@2046 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/generic/babel/tb1202.tex')
-rw-r--r-- | Master/texmf-dist/source/generic/babel/tb1202.tex | 961 |
1 files changed, 961 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/generic/babel/tb1202.tex b/Master/texmf-dist/source/generic/babel/tb1202.tex new file mode 100644 index 00000000000..0cedd222ba2 --- /dev/null +++ b/Master/texmf-dist/source/generic/babel/tb1202.tex @@ -0,0 +1,961 @@ +% \iffalse meta-comment +% +% Copyright 1989-2005 Johannes L. Braams and any individual authors +% listed elsewhere in this file. All rights reserved. +% +% This file is part of the Babel system. +% -------------------------------------- +% +% It 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 2003/12/01 or later. +% +% This work has the LPPL maintenance status "maintained". +% +% The Current Maintainer of this work is Johannes Braams. +% +% The list of all files belonging to the Babel system is +% given in the file `manifest.bbl. See also `legal.bbl' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% \fi +%%% ==================================================================== +%%% @TeX-file{ +%%% author = "Johannes L. Braams", +%%% version = "1.04", +%%% date = "06 January 1997", +%%% time = "23:15:14 MET", +%%% filename = "tb1202.tex", +%%% address = "TeXniek, +%%% Kersengaarde 33 +%%% 2723 BP Zoetermeer +%%% The Netherlands", +%%% telephone = "+31 79 352 28 19", +%%% FAX = "+31 70 343 23 95", +%%% checksum = "19810 933 5016 39417", +%%% email = "babel@braams.cistron.nl (Internet)", +%%% codetable = "ISO/ASCII", +%%% keywords = "", +%%% supported = "yes", +%%% abstract = "", +%%% docstring = "The article on babel that apeared in +%%% TuGboat Volume 12, No. 2. +%%% +%%% The checksum field above contains a CRC-16 +%%% checksum as the first value, followed by the +%%% equivalent of the standard UNIX wc (word +%%% count) utility output of lines, words, and +%%% characters. This is produced by Robert +%%% Solovay's checksum utility.", +%%% } +%%% ==================================================================== +% tb32braa.ltx + +\NeedsTeXFormat{LaTeX2e} +\IfFileExists{ltugboat.cls}{% + \documentclass{ltugboat} + \def\rtitlex{TUGboat, Volume 12 (1991), No. 2} + \def\midrtitle{} + \def\PrelimDraftfooter{} + \let\TBmaketitle\maketitle + \SelfDocumenting + \setcounter{page}{291} + }{% + \documentclass{article} + \newcommand\address[1]{} + \newcommand\netaddress[1]{} + \newcommand\TUB{\textsl{TUGboat\/}} + \newcommand\TeXhax{\TeX hax}} +\usepackage{shortvrb} +\MakeShortVerb{\|} +\newcommand{\file}[1]{\texttt{#1}} +\newcommand{\Lopt}[1]{\textsf{#1}} +\newcommand{\babel}{\textsf{babel}} +\makeatletter +% ------------------------------------------------- +% Definitions copied from doc.sty by FMi +% ------------------------------------------------- +{\obeyspaces% +\gdef\meta{\begingroup\obeyspaces% +\def {\egroup\space\hbox\bgroup\it}\m@ta}} +\def\m@ta#1{\hbox\bgroup$\langle$\it#1\/$\rangle$\egroup\endgroup} + +% ------------------------------------------------- +% define \dlqq so that we can give an example of "' +% ------------------------------------------------- +\gdef\dlqq{{\setbox\tw@=\hbox{,}\setbox\z@=\hbox{''}% + \dimen\z@=\ht\z@ \advance\dimen\z@-\ht\tw@ + \setbox\z@=\hbox{\lower\dimen\z@\box\z@}\ht\z@=\ht\tw@ + \dp\z@=\dp\tw@ \box\z@\kern-.04em}} +% +% ------------------------------------------------- +% To demonstrate german double quotes (from german.tex) +% ------------------------------------------------- +\def\allowhyphens{\penalty\@M \hskip\z@skip} +\def\set@low@box#1{\setbox\tw@\hbox{,}\setbox\z@\hbox{#1}\dimen\z@\ht\z@ + \advance\dimen\z@ -\ht\tw@ + \setbox\z@\hbox{\lower\dimen\z@ \box\z@}\ht\z@\ht\tw@ \dp\z@\dp\tw@ } +% (this lowers the german left quotes to the same level as the comma.) + +\def\@glqq{{\ifhmode \edef\@SF{\spacefactor\the\spacefactor}\else + \let\@SF\empty \fi \leavevmode + \set@low@box{''}\box\z@\kern-.04em\allowhyphens\@SF\relax}} +\def\glqq{\protect\@glqq} +\def\@grqq{\ifhmode \edef\@SF{\spacefactor\the\spacefactor}\else + \let\@SF\empty \fi \kern-.07em``\kern.07em\@SF\relax}%'' +\def\grqq{\protect\@grqq} +% +% ------------------------------------------------- +% To demonstrate french double quotes (from german.tex) +% ------------------------------------------------- +\def\@flqq{\ifhmode \edef\@SF{\spacefactor\the\spacefactor}\else + \let\@SF\empty \fi + \ifmmode \ll \else \leavevmode + \raise .2ex \hbox{$\scriptscriptstyle \ll $}\fi \@SF\relax} +\def\flqq{\protect\@flqq} +\def\@frqq{\ifhmode \edef\@SF{\spacefactor\the\spacefactor}\else + \let\@SF\empty \fi + \ifmmode \gg \else \leavevmode + \raise .2ex \hbox{$\scriptscriptstyle \gg $}\fi \@SF\relax} +\def\frqq{\protect\@frqq} +%+ +% Some extra definitions needed in the article +%- +\def\bsl{\char'134} +\makeatother + +\begin{document} +\title {Babel, a multilingual style-option system for use + with \LaTeX's standard document styles% + \thanks{During the development ideas from Nico Poppelier, + Piet van Oostrum and many others have been used.} + } + +\author{Johannes Braams} +\address{% + \TeX niek\\ + Kersengaarde 33\\ + 2723 BP Zoetermeer\\ + The Netherlands} +\netaddress{babel@braams.cistron.nl} +\date{06 January 1997 \\ + Version 1.04} + +\maketitle + +\begin{abstract} + The standard distribution of \LaTeX\ contains a number of document + styles that are meant to be used, but also serve as examples for + other users to create their own document styles. These styles have + become very popular among \LaTeX\ users. But it should be kept in + mind that they were designed for American tastes and contain a + number of hard-wired texts. This article describes a set of + document-style options that can be used in combination with the + standard styles, which makes the latter adaptable to other + languages. +\end{abstract} + +\section{Introduction} + +Although Leslie Lamport has stated~\cite{LLth} that one should not try +and write \emph{one} document-style option to be used with \emph{all} +the standard document styles of \LaTeX, that is exactly what I~have +done with this system of style options. The reasons for this approach +will be explained in section~\ref{why}. + +A lot of the ideas incorporated in this set of files come from the +work of Hubert Partl~\cite{HP}, \file{german.tex}. Some parts in the +implementation are different, others are the same. It will be shown +that \file{german.tex} can be modified to fit into this scheme of +style options. + +\section{Why \babel?}\label{why} + +When I~first started using \LaTeX\ I~was very happy with just the +style files that are distributed with the standard distributions of +\TeX\ and \LaTeX. That means, as long as I~made texts in English I~was +happy. Then as other users found out about \LaTeX\ and its advantages, +they started using it for texts in languages other than English. As +I~was the most experienced \LaTeX\ user at the time, they came to me +and asked me `When I'm writing a report in Dutch I~don't want chapters +to be named ``Chapter'', I~want them to be named ``Hoofdstuk'', how do +you change that?'. At that time I~didn't know, but I soon found out. +The first thing I~found was that Leslie Lamport states~\cite[pages +85--86]{LLbook} that you have to redefine the command |\@chapapp| +to get the desired result. This looked rather promising to me, so +I~had a look at the style files to find out how other such strings as +``Figure'' might be redefined. It was then that I~found out that +|\@chapapp| is the \emph{only} string defined this way, whereas +all others are hard-wired into the style. + +My first solution to this problem was to create a new document style +file called \file{artikel.sty} as a ``Dutch'' counterpart to +\file{article.sty}. The same was done for \file{report.sty}. This is +exactly what Leslie Lamport suggests~\cite{LLth}. This approach has +one major drawback however: you get two copies of basically the same +file to maintain. This was discovered when newer releases of the +styles reached our site. The standard styles had to be replaced +\emph{and} edited all over again to get the ``Dutch'' versions back. +About the same time, in early 1988, a discussion on this subject +appeared in \TeXhax. One of the persons commenting was Hubert Partl. +The method he suggested was to modify the standard document styles by +replacing the hard-wired texts by macros such as |\@chapapp|. This +led me to my second attempt at a solution. I~modified the standard +styles (all four of them) as suggested, but while doing that added an +option, implemented like the option \texttt{draft}, by defining a +command |\ds@dutch|. This command would set a variable to indicate +which language was requested. This variable I~used later on in a +|\case| statement. In this |\case| statement a choice is made between +English, Dutch and possibly other languages for texts such as +``Figure'' and ``Contents''. Unfortunately, some of this implied +changing the secondary style files \file{xxx10.sty}, \file{xxx11.sty} +and \file{xxx12.sty}. This was unfortunate because one of the +research groups in our laboratories complained their document style +didn't work properly. It turned out that their style was a modified +\file{article.sty} that had been given a different name, but it still +loaded \file{art10.sty} etc. I~found a temporary solution, but I +still wasn't exactly happy with the situation. Besides this, the +drawback of replacing the document styles with newer versions still +existed. + +When after a while a new version of the \LaTeX\ distribution arrived +at our site, I~began to think about a different way to solve the +problem. In the meantime Hubert Partl had his \file{german.sty} +published in \TUB~\cite{HP}. His article pointed the way to a +different solution. Triggered by the discussion in \TeXhax\ in early +1989 about how to detect which is the main (primary) style when +processing a document, I~started work on what is now available as +\file{dutch.sty} version~1.0, dated may 1989\footnote{This file is + available from \texttt{listserv@hearn.bitnet} as file + \file{dutch.old}.}. While working on this style option I~discovered +that some parts could be borrowed from \file{german.sty}. This +`discovery' and some discussions I had with others at Euro\TeX89, the +fourth European \TeX\ Conference, held in september 1989 in Karlsruhe, +led me towards a more universal approach. The basic idea behind it +was, starting from the algorithm to detect the main style, to design +an approach with one common file that contained macro definitions +needed by a number of language-specific style options. Users specify +the name of any of these language-specific options as an option to the +|\documentstyle| command, and internally the common file is read. + +%This is the situation as it stands now. The rest of this article is +%devoted to a description of how the system of style options described +%above is implemented and what the possibilities are. I~realize that +%with the new \TeX\ 3.0 around and work being done on a new version of +%\LaTeX\ as well some of this work may become obsolete in the near +%future. But, taking into consideration the widespread use of the +%current versions of \TeX\ and \LaTeX\, I~think it may take some time +%before {\em everybody} is working with the new releases. + +%------------------------------------------------------------ +% All text above here was copied from babel.doc, the following +% section is new for this version of the article +%------------------------------------------------------------ +\section{\LaTeX\ and document-style files}\label{lat-docstyle} + +Before the I discuss some of the code in the \babel{} system I would +like to discuss the document-style mechanism used by \LaTeX. Every +\LaTeX\ document should start with a line like: +\begin{verbatim} +\documentstyle[opt1,opt2,...]{docstyle} +\end{verbatim} +This line of code instructs \LaTeX\ to first load the file +\file{docstyle.sty}. When that is done the `options' are processed +\emph{in the order specified}, by reading the files +\file{opt1.sty}\footnote{Except when the documentstyle defines the + control sequence {\tt\bsl ds@\meta{opt1}}; in that case this control + sequence will be executed.}, \file{opt2.sty}, etc. This implies that +definitions, made in the file \file{docstyle.sty} can be overridden in +one of the option files. It is even possible to redefine code from the +very kernel of \LaTeX, but you have to know what you are doing. + +Some care has to be taken in writing document-style options, because a +number of problems can occur. First of all, if a document-style option +should be modest in size; if it tries to redefine most of the code in +\file{docstyle.sty} I think you should write (and maintain) your own, +complete, document style. Next, as it was possible to override +definitions from the main file in an option file, it is of course also +possible to override definitions made in another option file. When +this happens, your document might depend on the order in which you +have specified your document-style options. + +This mechanism of overriding definitions from the main document style +is exploited in the \babel{} system. The macros that contain the +hard-wired texts are redefined in the common part of \babel{}, +replacing each of these texts with a unique macro. These macros have +to be defined in the language-specific files. + +\section{\LaTeX\ and multilingual documents}\label{lat-lingual} + +In a european environment it sometimes happens that one wants to write +a document that contains more than \emph{one} language. I have an +example of a document, published by the {\sc eec}, that contains 9 +(nine) different languages. Also in linguistics one can find documents +written in more than one language, i.e. to compare two languages. + +If you have to write such a multilingual document you should try to +conform to the typographical conventions in use for each language. A +well known example is the type of quotation marks used. \TeX\ supplies +the user with ``quoted text'', but a Dutch user might want to have +\dlqq quoted text'', whereas a German text should contain \glqq quoted +text\grqq\ and a frenchman would perhaps like to see something like +\flqq quoted text\frqq. These language specific conventions should be +implemented in a document-style option file for each language. These +files should then be useable with \emph{all} document styles. + +In such a multilingual document a user would specify the languages +used as options to the |\documentstyle| command. He would also want a +mechanism to be able to switch between these languages in a simple +way. When he would use \TeX\ version 3.0 for the processing of his +document, he would also want the hyphenation to come out right for the +different languages. + +\section{Overview of the \babel{} solution} + +\subsection{The core of the system} + +The problems described in sections~\ref{lat-docstyle} +and~\ref{lat-lingual} can be solved using the \babel{} system of +document-style options. + +The core of this system currently performs three functions. +\begin{enumerate} + +\item\label{switch} It defines a user interface for switching between + languages; + +\item\label{hyphs} It contains code to dynamically load several sets + of hyphenation patterns; + +\item\label{repair} It `repairs' the document styles provided in the + standard distribution of \LaTeX. + +\end{enumerate} + +Obviously part~\ref{hyphs} can only be used while running ini\TeX\ to +create a new format, whereas part~\ref{repair} should \emph{not} be +read by ini\TeX. Part~\ref{repair} should even disappear when \LaTeX\ +version 3.0 arrives, as the style files supplied with the new \LaTeX\ +will no longer be language specific. Part~\ref{switch} can either be +loaded into the format with multiple hyphenation patterns, or it can +be read while processing a document. + +For this reason the core of the \babel{} system is stored in two +separate files, \file{babel.switch}, containing parts~\ref{switch} +and~\ref{hyphs}, and \file{babel.sty} which contains +part~\ref{repair}. The file \file{babel.sty} will instruct \LaTeX\ to +load \file{babel.switch} if necessary, the file \file{babel.switch} +checks the format to see if hyphenation patterns \emph{can} be loaded. + +\subsection{Language specifics} + +The language switching mechanism contains a couple of hooks for the +developers of language-specific document-style options. + +First of all the macro |\originalTeX| should be defined. Its function +is to disable special definitions made for a language to bring \TeX\ +into a `defined' state. A language-specific document-style option +might, for example, introduce an extra active character. It would then +also modify the definitions of |\dospecials| and |\@sanitize|. Such an +option would then define a macro to restore the original definitions +of these macros and restore the extra active character to its normal +category code. It would then |\let \originalTeX| to this `restoration' +macro. + +To enable the language-specific definitions three macros are provided +in the switching mechanism, |\captions|\meta{language}, +|\date|\meta{language} and |\extras|\meta{language}. + +The macro |\captions|\meta{language} should provide definitions for +the macros that replaced the hard-wired texts in the document style +and the macro |\date|\meta{language} should provide a definition for +|\today|. The real fun starts with the macro +|\extras|\meta{language}. This macro should activate all definitions +needed for \meta{language}. + +\section{The user interface} + +The user interface to the \babel{} system is quite simple. He should +specify the languages he wants to use in his document in the list of +document-style options. For instance, for a document in which both the +English and the Dutch language are used, the first line could read: +\begin{verbatim} +\documentstyle[a4,dutch,english]{artikel1} +\end{verbatim} +Please note that in this case the Dutch-specific definitions are +inactive when \LaTeX\ has finished processing document-style option +files. + +If the user then wants to switch from English to Dutch he would +include the command +\begin{verbatim} +\selectlanguage{dutch} +\end{verbatim} +before starting to write Dutch. + +If a user wants to write a document-style option of his own he might +like to define a macro that checks which language is in use at the +time the macro is executed. For this purpose the macro +|\iflanguage{|\meta{language}|}{|\meta{then-clause}|}{|% +\meta{else-clause}|}| is available. + +\section{Implementation of the core of the system} + +In this section I would like to discuss some parts of the +implementation of the \babel{} system. Not all code will be shown, +because some parts of it are just series of slightly modified code +from the standard document styles. The files are fully documented and +interested readers can print them if they have access to the +\texttt{doc} option, described by Frank Mittelbach. + +The description of the macros that follows is based on an environment +using \TeX~3.x, together with a version of \file{lplain.tex} based on +\file{plain.tex} version~3.x. The actual implementation allows for +other situations as well, i.e a version of \file{babel.sty} for +\TeX~2.x will be available. + +\subsection{Switching languages}\label{lang-switch} + +For each language to be used in a document a control sequence of the +form |\l@|\meta{language} has to be defined. This will either be done +while loading hyphenation patterns or while loading the +language-specific file. The implementation of +\hbox{|\selectlanguage{|\meta{language}|}|} and\\ +\hbox{|\iflanguage{|\meta{language}|}{|\meta{then case}|}{|\meta{else + case}|}|} is based on the existence of +\hbox{|\l@|\meta{language}}. + +\begin{figure*}[htb] +\begin{verbatim} +\def\selectlanguage#1{% + \@ifundefined{l@#1} + {\@nolanerr{#1}} + {\originalTeX + \language=\expandafter\csname l@#1\endcsname\relax + \expandafter\csname captions#1\endcsname + \expandafter\csname date#1\endcsname + \expandafter\csname extras#1\endcsname + \gdef\originalTeX{\expandafter\csname noextras#1\endcsname} + } +} +\end{verbatim} +\caption{The definition of {\tt\bsl selectlanguage}.} +\label{select} +\end{figure*} + +To switch from one language to another the macro |\selectlanguage| is +available. Its definition can be seen in figure~\ref{select}. The +first action it takes is to check whether the \meta{language} is +known, if it is not an error is signalled. If the language is known +|\originalTeX| is called upon to reset any previously set +language-specific definitions. Next the register |\language| is +updated and the three macros that should activate all +language-specific definitions are executed. Finally the macro +|\originalTeX| receives a new replacement text in order to be able to +deactivate the definitions just activated. + +\begin{figure*}[htb] +\begin{verbatim} +\def\iflanguage#1#2#3{% + \@ifundefined{l@#1} + {\@nolanerr{#1}} + {\ifnum\language=\expandafter\csname l@#1\endcsname\relax + #2 \else #3 + \fi} +} +\end{verbatim} +\caption{The definition of {\tt\bsl iflanguage}} +\label{if} +\end{figure*} + +The macro |\iflanguage| (see figure~\ref{if}) will issue a warning +when its argument is an `unkown' language. It then goes on to compare +the value of |\language| and |\l@|\meta{language} and executes either +its secon or third argument. + +\subsection{Dynamically loading patterns} + +With the advent of \TeX~3.0 it has become possible to build a format +with more than one hyphenation pattern preloaded. The core of the +\babel\ system provides code, to be executed by ini\TeX\ \emph{only}, +to dynamically load hyphenation patterns. The only restriction is that +the implementation of \TeX\ that you use has to have rather high +settings of \texttt{trie\_size} and \texttt{trie\_op\_size} to +actually load several hyphenation patterns. + +For the purpose of dynamically loading hyphenation patterns a +`configuration file' has to be introduced. This file will be read by +ini\TeX. Each line should contain either a comment, nothing or the +name of a language and the name of the file that contains the +hyphenation patterns for that language. In figure~\ref{config} an +example of such a file, instructing ini\TeX\ to load patterns for +three languages, English, Dutch and German. + +\begin{figure*}[htb] +\begin{verbatim} +% File : language.dat +% Purpose : tell iniTeX what files with patterns to load. +english english.hyphenations + +dutch hyphen.dutch % Nederlands +german hyphen.ger +\end{verbatim} +\caption{An example configuration file}\label{config} +\end{figure*} + +The configuration file will be read line by line using \TeX's |\read| +primitive. Because the name of a file might be followed by a +space-token and comment (as in the example) a macro to process each +line is needed. The definition of this macro, |\process@language|, can +be found in figure~\ref{process}. As can be seen in the definition of +this macro, its second argument \emph{always} has to be followed by a +space-token. The effect of this is that any trailing spaces are +removed. +\begin{figure*}[htb] +\begin{verbatim} +\def\process@language#1 #2 {% + \expandafter\addlanguage\csname l@#1\endcsname + \expandafter\language\csname l@#1\endcsname + \input #2} +\end{verbatim} +\caption{The definition of {\tt\bsl process@language}.} +\label{process} +\end{figure*} +The macro strips all spaces following its arguments. It's first +argument is used to define |\l@|\meta{language}. The macro +|\addlanguage| is basically a non-outer version of the plain \TeX\ +macro |\newlanguage|. The second argument of |\process@language| is +the name of the file containing the hyphenation patterns. Before the +file can be read, the register |\language| has to updated. + +The configuration file is read in a |\loop| (see figure~\ref{loop}). +When a record is read from the input file a check is done whether the +record was empty. If it was not, a space token is added to the end of +the string of tokens read. The reason for this is that we have to be +sure there always is at least \emph{one} space token present. When +that has been taken care of the data just read can be processed. The +last thing to do is to check the status of the input file, in order to +decide whether \TeX\ has to continue processing the |\loop|. When all +patterns have been processed the value of |\language| is restored. + +\begin{figure*}[htb] +\begin{verbatim} +\loop + \read1 to \@config@line + \ifx\@config@line\empty + \else + \edef\@config@line{\@config@line\space} + \expandafter\process@language\@config@line + \fi + \ifeof1 \@morefalse \fi + \if@more\repeat +\language=0 +\end{verbatim} +\caption{Reading the configuration file line by line} +\label{loop} +\end{figure*} + +\subsection{`Repairing' \LaTeX's standard document styles} + +A large part of the core of the \babel{} system is dedicated to +`repair' the standard document styles. This means redefining the +macros in table~\ref{macros}. + +\begin{table*}[htb] +\DeleteShortVerb{\|} +\begin{center} +\begin{tabular}{l | c c c c} +macro & article & report & book & letter \\ +\hline +\tt\bsl fnum@figure & $\times$ & $\times$ & $\times$ & $\times$ \\ +\tt\bsl fnum@table & $\times$ & $\times$ & $\times$ & $\times$ \\ +\tt\bsl tableofcontents & $\times$ & $\times$ & $\times$ & \\ +\tt\bsl listoffigures & $\times$ & $\times$ & $\times$ & \\ +\tt\bsl listoftables & $\times$ & $\times$ & $\times$ & \\ +\tt\bsl thebibliography & $\times$ & $\times$ & $\times$ & \\ +\tt\bsl theindex & $\times$ & $\times$ & $\times$ & \\ +\tt\bsl abstract & $\times$ & $\times$ & $\times$ & \\ +\tt\bsl part & $\times$ & $\times$ & $\times$ & \\ +\tt\bsl chapter & & $\times$ & $\times$ & \\ +\tt\bsl appendix & & $\times$ & $\times$ & \\ +\tt\bsl cc & & & & $\times$ \\ +\tt\bsl encl & & & & $\times$ \\ +\tt\bsl ps@headings & & & & $\times$ \\ +\end{tabular} +\caption{macros that need to be redefined for the four standard document + styles.} +\label{macros} +\end{center} +\MakeShortVerb{\|} +\end{table*} + +As an example of the way the macros have to be redefined, the +redefinition of |\tableofcontents| is shown in figure~\ref{content}. +\begin{figure*}[htb] +\begin{verbatim} +\@ifundefined{contentsname} + {\def\tableofcontents + {\section*{\contentsname + \@mkboth{\uppercase\expandafter{\contentsname}} + {\uppercase\expandafter{\contentsname}} + } + \@starttoc{toc} + } + } + {} +\end{verbatim} +\caption{An example of redefining a command}\label{content} +\end{figure*} + +The standard styles can be distinguished by checking the existence of +the macros |\chapter| (not in \file{article} and \texttt{letter}) and +|\opening| (only in \texttt{letter}). The result of these checks is +stored in the macro |\doc@style|. When |\doc@style| already exists +(which is the case when for instance \file{artikel1.sty} is +used~\cite{BEP}) it is not superseded (see figure~\ref{maindoc}). + +\begin{figure*}[htb] +\begin{verbatim} +\@ifundefined{doc@style} + {\def\doc@style{0} + \@ifundefined{opening} + {\@ifundefined{chapter} + {\def\doc@style{1}} + {\def\doc@style{2}} + }{\def\doc@style{3}} + }{\relax} +\end{verbatim} +\caption{Determining the main document style} +\label{maindoc} +\end{figure*} + +\section{Implementing a language specific document-style option file} + +To illustrate the way a language specific file can be implemented the +file \file{dutch.sty} is discussed here. Note that not all of the code +containde in the file \file{dutch.sty} is shown here, only those parts +that are of interest for the scope of this article are included. If +the reader would like to see the complete code, he can print all files +in the \babel{} system, using the file \file{doc.sty}, described by +Frank Mittelbach in~\cite{docsty}. + +\subsection{Compatibilty with plain \TeX} +The file \file{german.tex}~\cite{HP} was written in such a way that it +can be used by both plain \TeX\ users and \LaTeX\ users. This seemed a +good idea, so all files in the \babel{} system can be processed by +both plain \TeX\ and \LaTeX. But some of the ``useful hacks'' from +\LaTeX\ are used, so for a plain \TeX\ user they have to be defined. +For this purpose the format is checked at the start of a language +specific file. If the format is \texttt{plain} an extra file, called +\file{latexhax.sty} is read. +\begin{figure*}[htb] +\begin{verbatim} +{\def\format{plain} +\ifx\fmtname\format + \expandafter\ifx\csname @ifundefined\endcsname\relax + \gdef\next{latexhax.sty} + \aftergroup\input\aftergroup\next + \fi +\fi} +\end{verbatim} +\caption{Conditonal loading of \file{latexhax.sty}} +\end{figure*} + +This file should be read only once, so another check is done on the +existence of one of the commands defined there. + +A new group is started to keep the definition of the macro +|\format|, which is used in the following if statement, local. +When the current format turns out to be plain \TeX\ the file +\file{latexhax.sty} has to be read. But the definitions in that file +should remain valid after the group is closed. This could be +accomplished by making all definitions \texttt{global}, but another +solution is to tell \TeX\ to process the file \file{latexhax.sty} +\emph{after} the current group has been closed. The command +|\aftergroup| puts the next token on a list to be processed after +the group. + +\subsection{Switching to the Dutch language} +In section~\ref{lang-switch} the names of macros needed to switch to a +language have been described. In figure~\ref{switchdutch} these macros +and their definition are shown for the Dutch language. +\begin{figure*}[htb] +\begin{verbatim} +\def\captionsdutch{\gdef\refname{Referenties}% + \gdef\abstractname{Samenvatting}% + \gdef\bibname{Bibliografie}% + ... + \gdef\pagename{Pagina}} + +\def\datedutch{% + \gdef\today{\number\day~\ifcase\month\or + januari\or februari\or maart\or april\or + mei\or juni\or juli\or augustus\or + september\or oktober\or november\or december\fi + \space \number\year}} +\begingroup \catcode`\"\active + +\gdef\extrasdutch{% + \global\let\dospecials\dutch@dospecials + \global\let\@sanitize\dutch@sanitize + \catcode`\"\active + \gdef"{\protect\dutch@active@dq} + \gdef\"{\protect\@umlaut} +}\endgroup + +\def\noextrasdutch{% + \catcode`\"12 + \global\let\dospecials\original@dospecials + \global\let\@sanitize\original@sanitize + \global\let\"\dieresis +} +\end{verbatim} +\caption{The macros needed to switch to the Dutch language} +\label{switchdutch} +\end{figure*} + +The definitions of |\captionsdutch| and |\datedutch| are pretty +straightforward and need not be discussed. The macro |\extrasdutch| +will be discussed in some more detail. + +First, because for Dutch (as well as for German) the \texttt{"} +character is made active, the \LaTeX\ macros |\dospecials| and +|\@sanitize| have to be redefined to include this character as well. +The new definitions are implemented as two special commands, so we +globally |\let| the originals to their new versions. Then the +\texttt{"} character is made active and is defined. Then, to prevent +an error when |\"| appears in a moving argument, the macro |\"| is +redefined and made robust. All this is done inside a group to keep the +category code change for the \texttt{"} character local. + +The macro |\extrasdutch| has a counterpart, |\noextrasdutch|, that +cancels the extra definitions made by |\extrasdutch|. It changes the +|\catcode| of the \texttt{"} character back to `other' and globally +|\let|s the macros |\dospecials| and |\@sanitize| to their original +definitions. The original definition of |\"| is restored as well. + +In figure~\ref{specials} the code needed to redefine |\dospecials| and +|\@makeother| is shown. +\begin{figure*}[htb] +\begin{verbatim} +\begingroup + \def\do{\noexpand\do\noexpand}% + \xdef\dutch@dospecials{\dospecials\do\"}% + \expandafter\ifx\csname @sanitize\endcsname\relax +% do nothing if \@sanitize is undefined... + \else + \def\@makeother{\noexpand\@makeother\noexpand}% + \xdef\dutch@sanitize{\@sanitize\@makeother\"}% + \fi +\endgroup + +\global\let\original@dospecials\dospecials +\global\let\original@sanitize\@sanitize +\end{verbatim} +\caption{Code needed for the redefinition of {\tt\bsl dospecials} and + {\tt\bsl @makeother}.} +\label{specials} +\end{figure*} + +\subsection{An extra active character} + +All the code disccussed sofar is necessary because we need an extra +active character. This character is then used as indicated in +table~\ref{dutch-quote}. One of the reasons for this is that in the +Dutch language a word with an umlaut can be hyphenated just before the +letter with the umlaut, but the umlaut has to disappear if the word is +broken between the previous letter and the accented letter. + +\begin{table*}[htb] +\centering +\begin{tabular}{lp{8cm}} +\verb="a= & \verb=\"a= which hyphenates as \verb=-a=; + also implemented for the other letters. \\ +\verb="|= & disable ligature at this position. \\ +\verb="-= & an explicit hyphen sign, allowing hyphenation + in the rest of the word. \\ +\verb="`= & lowered double left quotes (see example below).\\ +\verb="'= & normal double right quotes. \\ +\verb=\-= & like the old \verb=\-=, but allowing hyphenation + in the rest of the word. +\end{tabular} +\caption{The extra definitions made by \file{dutch.sty}} +\label{dutch-quote} +\end{table*} + +In~\cite{treebus} the quoting conventions for the Dutch language are +discussed. The preferred convention is the single-quote Anglo-American +convention, i.e. `This is a quote'. An alternative is the slightly +old-fashioned Dutch method with initial double quotes lowered to the +baseline, \dlqq This is a quote'', which should be typed as +\texttt{"`This is a quote"'}. + +\subsubsection{Supporting macro definitions} + +The definition of the active \texttt{"} character needs a couple of +support macros. The macro |\allowhyphens| is used make hyphenation of +word possible where it otherwise would be inhibited by \TeX. Basically +its definition is nothing more than |\nobreak \hskip 0pt plus 0pt|. +\begin{verbatim} +\gdef\allowhyphens{\penalty\@M \hskip\z@skip} +\end{verbatim} + +Then a macro is defined to lower the Dutch left double quote to the +same level as the comma. It prepares a low double opening quote in box +register~0. This macro was copied form \file{german.tex}. +\begin{verbatim} +\gdef\set@low@box#1{% + \setbox\tw@\hbox{,} \setbox\z@\hbox{#1} + \dimen\z@\ht\z@ \advance\dimen\z@ -\ht\tw@ + \setbox\z@\hbox{\lower\dimen\z@ \box\z@} + \ht\z@\ht\tw@ \dp\z@\dp\tw@} +\end{verbatim} +The macro |\set@low@box| is used to define low opening quotes. Since +it may be used in arguments to other macros it needs to be protected. +\begin{verbatim} +\gdef\dlqq{\protect\@dlqq} +\gdef\@dlqq{{% + \ifhmode + \edef\@SF{\spacefactor\the\spacefactor} + \else + \let\@SF\empty + \fi + \leavevmode\set@low@box{''} + \box\z@\kern-.04em\allowhyphens\@SF\relax}} +\end{verbatim} +For reasons of symmetry we also define |"'|. This command is defined +similar to |\dlqq|, except that the quotes aren't lowered to the +baseline. +\begin{verbatim} +\gdef\@drqq{{% + \ifhmode + \edef\@SF{\spacefactor\the\spacefactor} + \else + \let\@SF\empty + \fi + ''\@SF\relax}} +\end{verbatim} +The original double quote character is saved in the macro |\dq| to +keep it available. +\begin{verbatim} +\begingroup \catcode`\"12 + \gdef\dq{"} +\endgroup +\end{verbatim} +The original definition of |\"| is stored as |\dieresis|. The resason +for this is that if a font with a different encoding scheme is used +the definition of |\"| might not be the plain \TeX\ one. +\begin{verbatim} +\global\let\dieresis\" +\end{verbatim} + +In the Dutch language vowels with a dieresis or umlaut accent are +treated specially. If a hyphenation occurs before a vowel-plus-umlaut, +the umlaut should disappear. To be able to do this, the hyphenation +break behaviour for the five vowels, both lowercase and uppercase, +could be defined first in terms of |\discretionary|. But this results +in a large |\if|-construct in the definition of the active |"|. + +As both Knuth and Lamport have pointed out, a user should not use |"| +when he really means something like |''|. For this reason no +distinction is made between vowels and consonants. Therefore one +macro, |\@umlaut|, specifies the hyphenation break behaviour for all +letters. +\begin{verbatim} +\def\@umlaut#1{% + \allowhyphens% + \discretionary{-}{#1}{\dieresis #1}% + \allowhyphens} +\end{verbatim} + +The last support macro to be defined is |\dutch@active@dq|. +\begin{verbatim} +\gdef\dutch@active@dq#1{% + \if\string#1`\dlqq{}% +\else\if\string#1'\drqq{}% +\else\if\string#1-\allowhyphens-\allowhyphens% +\else\if\string#1|\discretionary{-}{}{\kern.03em}% +\else\if\string#1i\allowhyphens\discretionary{-}{i}{\dieresis\i}% + \allowhyphens% +\else\if\string#1j\allowhyphens\discretionary{-}{j}{\dieresis\j}% + \allowhyphens% +\else \@umlaut{#1}\fi\fi\fi\fi\fi\fi} +\end{verbatim} +The macro reads the next token and performs some appropriate action. +If no special action is defined, it will produce an umlaut accent on +top of argument~1. + +The last definition needed is a replacement for |\-|. The new version +of |\-| should indicate an extra hyphenation position, while allowing +other hyphenation positions to be generated automatically. The +standard behaviour of \TeX\ in this respect is very unfortunate for +languages such as Dutch and German, where long compound words are +quite normal and all one needs is a means to indicate an extra +hyphenation position on top of the ones that \TeX\ can generate from +the hyphenation patterns. +\begin{verbatim} +\def\-{\allowhyphens\discretionary{-}{}{}\allowhyphens} +\end{verbatim} + +\subsection{Activating the definitions} + +The last action that should be performed by a language specific file, +is activating it's definitions. Before doing that the macro +|\originalTeX| should be definined. +\begin{verbatim} +\@ifundefined{originalTeX}{\let\originalTeX\relax}{} +\end{verbatim} + +Also, the macro |\l@|\meta{language} should be defined. If it hasn't +already been defined, this means that no hyphenation patterns were +loaded for this language. +% This means that \emph{no} hyphenation will take place +\begin{verbatim} +\@ifundefined{l@dutch}{\addlanguage{dutch}}{} +\selectlanguage{dutch} +\end{verbatim} + +\section{Conclusion} + +In this article a system of document-style option files has been +presented that supports the multilingual use of \LaTeX. Some of the +code involved has been discussed. The actual files will me made +available through the international networks. They will be stored in +the fileserver in the Netherlands (address: +\texttt{LISTSERV@HEARN.BITNET}), the file \file{babel readme} will +explain what you need to get to be able to use the system. The system +was developed using the \Lopt{doc} option, so the files available are +fully documented. + +\begin{thebibliography}{9} + \bibitem{DEK} Donald E. Knuth, + \emph{The \TeX book}, Addison-Wesley, 1986. + \bibitem{LLbook} Leslie Lamport, + \emph{\LaTeX, A document preparation System}, Addison-Wesley, 1986. + \bibitem{treebus} K.F. Treebus. + \emph{Tekstwijzer, een gids voor het grafisch verwerken van tekst.} + SDU Uitgeverij ('s-Gravenhage, 1988). A Dutch book on layout + design and typography. + \bibitem{HP} Hubert Partl, + \emph{German \TeX}, \emph{TUGboat} 9 (1988) \#1, p.~70--72. + \bibitem{LLth} Leslie Lamport, + in: \TeXhax\ Digest, Volume 89, \#13, 17 februari 1989. + \bibitem{docsty}Frank Mittelbach, + \emph{The \Lopt{doc}-option}, + \emph{TUGboat} 10 (1989) \#2, p.~245--273. + \bibitem{BEP}Johannes Braams, Victor Eijkhout and Nico Poppelier, + \emph{The development of national \LaTeX\ styles}, + \emph{TUGboat} 10 (1989) \#3, p.~401--406. + \bibitem{ilatex}Joachim Schrod, + \emph{International \LaTeX\ is ready to use}, + \emph{TUGboat} 11 (1990) \#1, p.~87--90. +\end{thebibliography} + +\end{document} |