summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/babel/babel.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/babel/babel.dtx')
-rw-r--r--Master/texmf-dist/source/latex/babel/babel.dtx629
1 files changed, 444 insertions, 185 deletions
diff --git a/Master/texmf-dist/source/latex/babel/babel.dtx b/Master/texmf-dist/source/latex/babel/babel.dtx
index 10f0d5fa509..fe92b27336b 100644
--- a/Master/texmf-dist/source/latex/babel/babel.dtx
+++ b/Master/texmf-dist/source/latex/babel/babel.dtx
@@ -36,7 +36,7 @@
%\iffalse
%% File 'babel.dtx'
%\fi
-%%\ProvidesFile{babel.dtx}[2017/06/29 v3.12 The Babel package]
+%%\ProvidesFile{babel.dtx}[2017/09/18 v3.13 The Babel package]
%\iffalse
%
% Babel DOCUMENT-STYLE option for LaTeX version 2.09 or plain TeX;
@@ -52,9 +52,10 @@
%
%<*filedriver>
\documentclass{ltxdoc}
-\usepackage[T1]{fontenc}
-\usepackage[utf8]{inputenc}
-\usepackage{bera}
+\usepackage{fontspec}
+\setmainfont[Scale=.89]{DejaVu Serif}
+\setsansfont[Scale=.87]{DejaVu Sans}
+\setmonofont[Scale=.87]{DejaVu Sans Mono}
\raggedright
\addtolength{\textwidth}{25pt}
\addtolength{\textheight}{3.5cm}
@@ -80,6 +81,7 @@
\newcommand*\cls[1]{\texttt{#1}}
\newcommand*\pkg[1]{\texttt{#1}}
\addtolength{\oddsidemargin}{1em}
+\setlength{\leftmargini}{1.5em}
% Stolen and adapted from microtype:
\usepackage{color,colortbl}
\newcommand\New[1]{%
@@ -95,7 +97,8 @@
\def\@begintheorem#1#2{%
\list{}{}%
\global\advance\@listdepth\m@ne
- \item[{\sffamily\bfseries\color{messages}\MakeUppercase{#1}}]}%
+ \item[{\sffamily\bfseries\color{messages}\hspace*{1.3em}%
+ \MakeUppercase{#1}}]}%
\makeatother
\newtheorem{warning}{Warning}
\newtheorem{note}{Note}
@@ -127,7 +130,6 @@
backgroundcolor=\color{theshade},
rulecolor=\color{theframe},
framerule=\fboxrule,
- inputencoding=utf8
}
\let\verbatim\relax
\lstnewenvironment{verbatim}[1][]{\lstset{style=verbatim,##1}}{}
@@ -177,6 +179,7 @@
\renewcommand*\l@subsubsection{\@dottedtocline{3}{5em}{4em}}
\renewcommand*\l@paragraph{\@dottedtocline{4}{9em}{4.5em}}
\renewcommand\partname{Part}
+\def\@pnumwidth{3em}
\makeatother
\begin{document}
\title{Babel, a multilingual package for use with \LaTeX's standard
@@ -208,8 +211,8 @@
\vspace{2cm}\hspace{1.5cm}
\begin{minipage}{5cm}
\Large
-Version 3.12\newline
-2017/06/29
+Version 3.13\newline
+2017/09/18
\vspace{1cm}
\textit{Original author}\newline
@@ -240,7 +243,14 @@ Javier Bezos
Current development is focused on Unicode engines (Xe\TeX{} and
Lua\TeX). New features related to font selection, bidi writing and
- the like will be added incrementally. \vspace{20cm}
+ the like will be added incrementally, but you may use \babel{} for
+ many languages.
+
+ Currently \babel{} provides support (total or partial) for about 200
+ languages, either as a package option or as an |ini|
+ file. Furthermore, new languages can be created from scratch easily.
+
+ \vspace{20cm}
\end{minipage}
\end{tabular}
\end{minipage}
@@ -251,6 +261,9 @@ Javier Bezos
\part{User guide}
+This user guide focuses on \LaTeX. There are also some notes on its
+use with Plain \TeX.
+
\section{The user interface}\label{U-I}
\subsection{Monolingual documents}
@@ -264,7 +277,7 @@ addition, you may want to set the font and input encodings.
Here is a simple full example. The packages |fontenc| and |inputenc|
do not belong to \babel, but they are included in the example
because typically you will need them:
-\begin{verbatim}[escapechar=\&]
+\begin{verbatim}
\documentclass{article}
\usepackage[T1]{fontenc}
@@ -274,7 +287,7 @@ addition, you may want to set the font and input encodings.
\begin{document}
-Plus &\c c&a change, plus c'est la m&\^e&me chose!
+Plus ça change, plus c'est la même chose!
\end{document}
\end{verbatim}
@@ -284,8 +297,8 @@ A common source of trouble is a wrong setting of the input
encoding. Make sure you set the encoding actually used by your editor.
\end{warning}
-Another approach is making \Lopt{french} a global
-option in order to let other packages detect and use it:
+Another approach is making the language (\Lopt{french} in the example)
+a global option in order to let other packages detect and use it:
\begin{verbatim}
\documentclass[french]{article}
@@ -312,7 +325,7 @@ the option and will be able to use it.
In multilingual documents, just use several options. The last one is
considered the main language, activated by default. Sometimes, the
-main language changes the document layout (eg., |spanish| and |french|).
+main language changes the document layout (eg, |spanish| and |french|).
\begin{example}
In \LaTeX, the preamble of the document:
@@ -349,6 +362,34 @@ You can also set the main language explicitly:
want to use some of the language selectors described below.
\end{warning}
+To switch the language there are two basic macros, decribed below in
+detail: |\selectlanguage| is used for blocks of text, while
+|\foreignlanguage| is for chunks of text inside paragraphs.
+
+\begin{example}
+A full bilingual document follows. The main language is |french|,
+which is activated when the document begins.
+\begin{verbatim}
+\documentclass{article}
+
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+
+\usepackage[english,french]{babel}
+
+\begin{document}
+
+Plus ça change, plus c'est la même chose!
+
+\selectlanguage{english}
+
+And an English paragraph, with a short text in
+\foreignlanguage{french}{français}.
+
+\end{document}
+\end{verbatim}
+\end{example}
+
\subsection{Modifiers}
\New{3.9c} The basic behaviour of some languages can be modified when
@@ -367,33 +408,108 @@ Attributes (described below) are considered modifiers, ie, you can
set an attribute by including it in the list of modifiers. However,
modifiers is a more general mechanism.
-\subsection{Notes}
+\subsection{\textsf{xelatex} and \textsf{lualatex}}
+
+Many languages are compatible with \textsf{xetex} and \textsf{luatex}.
+With them you can use \babel{} to localize the documents, but an
+advanced interface to handle fonts is still under development (among
+other things, language and script will be set by \babel).
-Loading directly |sty| files in \LaTeX{} (ie,
-|\usepackage|\marg{language}) is deprecated and you will get the
-error:\footnote{In old versions the error read ``You have used an
-old interface to call babel'', not very helpful.}
+The Latin script is covered by default in current \LaTeX{} (provided
+the document encoding is UTF-8), because the font loader is preloaded
+and the font is switched to |lmroman|. Other scripts require loading
+\textsf{fontspec}.
+
+\begin{example}
+ The following bilingual, single script document in UTF-8 encoding
+ just prints a couple of ‘captions’ and |\today| in Danish and
+ Vietnamese. No additional packages are required.
+\begin{verbatim}
+\documentclass{article}
+
+\usepackage[vietnamese,danish]{babel}
+
+\begin{document}
+
+\prefacename{} -- \alsoname{} -- \today
+
+\selectlanguage{vietnamese}
+
+\prefacename{} -- \alsoname{} -- \today
+
+\end{document}
+\end{verbatim}
+\end{example}
+
+\begin{example}
+Here is a simple monolingual document in Russian (text from the
+Wikipedia). Note neither \textsf{fontenc} nor \textsf{inputenc} are
+necessary, but the document should be encoded in UTF-8 and a
+so-called Unicode font must be loaded with \textsf{fontspec}.
+\begin{verbatim}[escapechar=\&]
+\documentclass{article}
+
+\usepackage[russian]{babel}
+
+\usepackage{fontspec}
+\setmainfont[Language=Russian,Script=Cyrillic]{DejaVu Serif}
+
+\begin{document}
+
+&Россия, находящаяся на пересечении множества культур, а также&
+&с учётом многонационального характера её населения, — отличается&
+&высокой степенью этнокультурного многообразия и способностью к&
+&межкультурному диалогу.&
+
+\end{document}
+\end{verbatim}
+
+\end{example}
+
+\subsection{Troubleshooting}
+
+\begin{itemize}
+\item Loading directly |sty| files in \LaTeX{} (ie,
+ |\usepackage|\marg{language}) is deprecated and you will get the
+ error:\footnote{In old versions the error read ``You have used an
+ old interface to call babel'', not very helpful.}
\begin{verbatim}
! Package babel Error: You are loading directly a language style.
(babel) This syntax is deprecated and you must use
(babel) \usepackage[language]{babel}.
\end{verbatim}
-Another typical error when using \babel{} is the
-following:\footnote{In old versions the error read ``You haven't
-loaded the language LANG yet''.}
+\item Another typical error when using \babel{} is the
+ following:\footnote{In old versions the error read ``You haven't
+ loaded the language LANG yet''.}
\begin{verbatim}
! Package babel Error: Unknown language `LANG'. Either you have misspelled
(babel) its name, it has not been installed, or you requested
(babel) it in a previous run. Fix its name, install it or just
(babel) rerun the file, respectively
\end{verbatim}
-The most frequent reason is, by far, the latest (for example, you
-included |spanish|, but you realized this language is not used after
-all, and therefore you removed it from the option list). In most cases,
-the error vanishes when the document is typeset again, but in more
-severe ones you will need to remove the |aux| file.
-
+ The most frequent reason is, by far, the latest (for example, you
+ included |spanish|, but you realized this language is not used after
+ all, and therefore you removed it from the option list). In most
+ cases, the error vanishes when the document is typeset again, but in
+ more severe ones you will need to remove the |aux| file.
+
+\item The following warning is about hyphenation patterns and it is not
+ under the direct control of \babel:
+\begin{verbatim}
+Package babel Warning: No hyphenation patterns were preloaded for
+(babel) the language `LANG' into the format.
+(babel) Please, configure your TeX system to add them and
+(babel) rebuild the format. Now I will use the patterns
+(babel) preloaded for \language=0 instead on input line 57.
+\end{verbatim}
+ The document will be typeset, but very likely the text will not be
+ correctly hyphenated. Some languages may be raising this warning
+ wrongly (because they are not hyphenated); it is a bug to be fixed
+ -- just ignore it. See the manual of your distribution (Mac\TeX,
+ Mik\TeX, \TeX Live, etc.) for further info about how to configure
+ it.
+\end{itemize}
\subsection{Plain}
In Plain, load languages styles with |\input| and then use
@@ -491,7 +607,7 @@ environment are \textit{not} ignored.
This environment was originally intended for intermixing left-to-right
typesetting with right-to-left typesetting in engines not supporting a
change in the writing direction inside a line. However, by default it never
-complied with the documented behaviour and it was just a version as
+complied with the documented behaviour and it is just a version as
environment of |\foreignlanguage|.
\Describe{\begin\menv{hyphenrules}}{\marg{language}\Eenv{hyphenrules}}
@@ -524,11 +640,13 @@ It defines |\text|\m{tag1}\marg{text} to be
|\foreignlanguage|\marg{language1}\marg{text}, and |\begin|\marg{tag1}
to be |\begin{otherlanguage*}|\marg{language1}, and so on. Note
|\|\m{tag1} is also allowed, but remember to set it locally inside a
-group. So, with
+group.
+\begin{example}
+With
\begin{verbatim}
\babeltags{de = german}
\end{verbatim}
-yo can write
+you can write
\begin{verbatim}
text \textde{German text} text
\end{verbatim}
@@ -536,13 +654,18 @@ and
\begin{verbatim}
text
\begin{de}
-German text
+ German text
\end{de}
text
\end{verbatim}
+\end{example}
+
+\begin{note}
+ Something like \verb|\babeltags{finnish = finnish}| is legitimate --
+ it defines |\textfinnish| and |\finnish| (and, of course,
+ |\begin{finnish}|).
+\end{note}
-Something like \verb|\babeltag{finnish = finnish}| is legitimate -- it
-defines |\textfinnish| and |\finnish|.
\Describe\babelensure{|[include=|\m{commands}|,exclude=|\m{commands}%
|,fontenc=|\m{encoding}|]|\marg{language}}
@@ -556,12 +679,16 @@ you should set it explicitly if you want to use them, or hyphenation
Of course, \TeX{} can do it for you. To avoid switching the language
all the while, |\babelensure| redefines the captions for a given
-language to wrap them with a selector. By default only the basic
-captions and |\today| are redefined, but you can add further macros
-with the key |include| in the optional argument (without
-commas). Macros not to be modified are listed in |exclude|. You can
-also enforce a font encoding with |fontenc|.\footnote{With it encoded
-string may not work as expected.} A couple of examples:
+language to wrap them with a selector:
+\begin{verbatim}
+\babelensure{polish}
+\end{verbatim}
+By default only the basic captions and |\today| are redefined, but you
+can add further macros with the key |include| in the optional argument
+(without commas). Macros not to be modified are listed in
+|exclude|. You can also enforce a font encoding with
+|fontenc|.\footnote{With it encoded string may not work as expected.}
+A couple of examples:
\begin{verbatim}
\babelensure[include=\Today]{spanish}
\babelensure[fontenc=T5]{vietnamese}
@@ -615,9 +742,6 @@ contains glyphs for Modern Greek does not mean it includes them for
Classic Greek. As to directionality, it poses special challenges
because it also affects individual characters and layout elements.}
-The same applies for bidi texts -- writing direction is intrinsic to
-each writing system and therefore it is best set by the language
-(which could be a dummy one).
Some languages sharing the same script define macros to switch it (eg,
|\textcyrillic|), but be aware they may also set the language to a
@@ -627,6 +751,13 @@ fonts (for example, if the main latin encoding was |LY1|), and
therefore it has been deprecated.\footnote{But still defined for
backwards compatibility.}
+No macros to select the writing direction are provided, either --
+writing direction is intrinsic to each script and therefore it is best
+set by the language (which could be a dummy one). Furthermore, there
+are in fact two right-to-left modes, depending on the language, which
+differ in the way `weak' numeric characters are ordered (Arabic \%123
+\textit{vs} Hebrew 123\%).
+
\Describe{\ensureascii}{\marg{text}}
\New{3.9i} This macro makes sure \m{text} is typeset with a
@@ -665,11 +796,11 @@ easily with |"-|, |"=|, etc.
The package \textsf{inputenc} as well as \xetex{} an \luatex{} have
alleviated entering non-ASCII characters, but minority languages and
-some kinds of text can still require characters not directly
-available in the keyboards (and sometimes not even as separated or
-precomposed Unicode characters). As to the point 2, now
-\textsf{pdfTeX} provides |\knbccode|. Tools of point 3 can be still
-very useful in general.
+some kinds of text can still require characters not directly available
+on the keyboards (and sometimes not even as separated or precomposed
+Unicode characters). As to the point 2, now \textsf{pdfTeX} provides
+|\knbccode|, and \luatex{} can manipulate the glyph list. Tools for
+point 3 can be still very useful in general.
There are three levels of shorthands: \textit{user},
\textit{language}, and \textit{system} (by order of
@@ -1027,9 +1158,10 @@ too, but in such a case the code is executed only if
\meta{option-name} is the same as |\CurrentOption| (which could not
be the same as the option name as set in |\usepackage|!).
-For example, consider two languages \textsf{foo} and \textsf{bar}
-defining the same |\macro| with |\newcommand|. An error is raised if
-you attempt to load both. Here is a way to overcome this problem:
+\begin{example}
+ Consider two languages \textsf{foo} and \textsf{bar} defining the
+ same |\macro| with |\newcommand|. An error is raised if you attempt
+ to load both. Here is a way to overcome this problem:
\begin{verbatim}
\usepackage[base]{babel}
\AfterBabelLanguage{foo}{%
@@ -1037,6 +1169,7 @@ you attempt to load both. Here is a way to overcome this problem:
\let\macro\relax}
\usepackage[foo,bar]{babel}
\end{verbatim}
+\end{example}
\subsection{Creating a language}
@@ -1060,7 +1193,8 @@ Package babel Warning: \mylangchaptername not set. Please, define
In most cases, you will only need to define a few macros.
-For example, if you need a language named |arhinish|:
+\begin{example}
+ If you need a language named |arhinish|:
\begin{verbatim}
\usepackage[danish]{babel}
\babelprovide{arhinish}
@@ -1068,22 +1202,48 @@ For example, if you need a language named |arhinish|:
\renewcommand\arhinishrefname{Refirenke}
\renewcommand\arhinishhyphenmins{22}
\end{verbatim}
+\end{example}
The main language is not changed (\texttt{danish} in this example).
-So, you must add |\selectlanguage{arhinish}| or other selectors when
+So, you must add |\selectlanguage{arhinish}| or other selectors where
necessary.
+If the language has been loaded as an argument in |\documentclass| or
+|\usepackage|, then |\babelprovide| redefines the requested data.
+
+\Describe{import=}{\meta{language-tag}}
+\New{3.13} Imports data from an |ini| file, including captions, date,
+and hyphenmins. For example:
+\begin{verbatim}
+\babelprovide[import=hu]{hungarian}
+\end{verbatim}
+Unicode engines load the UTF-8 variants, while
+8-bit engines load the LICR (ie, with macros like |\'| or |\ss|) ones.
+
+There are about 200 |ini| files, with data taken from the |ldf| files
+and the CLDR provided by Unicode. Not all languages in the latter are
+complete, and therefore neither are the |ini| files. A few languages
+will show a warning about the current lack of suitability of the date
+format (\textsf{hindi}, \textsf{french}, \textsf{breton}, and
+\textsf{occitan}).
+
+Besides |\today|, there is a |\<language>date| macro with three
+arguments: year, month and day numbers. In fact, |\today| calls
+|\<language>today| which in turn calls
+|\<language>date{\year}{\month}{\day}|.
+
+Encoding, font, \textsf{fontspec} language and script, writing
+direction, etc., are not touched at all. They will be loaded in the
+future and used in a forthcoming set of tools to set the language
+fonts.
+
\Describe{captions=}{\meta{language-tag}}
-Currently, the \oarg{options} may be used to load captions from an
-|ini| file, but note these files are still tentative and might change.
-For example:
+Loads only the strings. For example:
\begin{verbatim}
\babelprovide[captions=hu]{hungarian}
\end{verbatim}
-It just loads the strings, no more. Encoding, font,
-\textsf{fontspec} language and script, writing direction, etc., are
-not touched at all. Unicode engines load the UTF-8 variants, while
-8-bit engines load the LICR (ie, with macros like |\'| or |\ss|) ones.
+Encoding, font, \textsf{fontspec} language and script, writing
+direction, etc., are not touched at all.
\Describe{hyphenrules=}{\meta{language-list}} With this option, with a
space-separated list of hyphenation rules, \babel{} assigns to the
@@ -1111,11 +1271,10 @@ list is empty).
one. Only in newly defined languages.
\begin{note}
- (1) Setting \verb|\today| is not so easy, and requires more work
- (some tools are on the way). (2) If you need shorthands, you can use
- |\useshorthands| and |\defineshorthand| as described above. (3)
- Captions and |\today| are ``ensured'' with |\babelensure| (because
- this will be the default in |ini|-based languages).
+ (1) If you need shorthands, you can use |\useshorthands| and
+ |\defineshorthand| as described above. (2) Captions and |\today| are
+ ``ensured'' with |\babelensure| (because this will be the default in
+ |ini|-based languages).
\end{note}
\subsection{Hooks}
@@ -1685,7 +1844,7 @@ The following assumptions are made:
selected, \babel{} will attempt setting it after lowercasing its
name.
\item The semantics of modifiers is not defined (on purpose). In
- most cases, they will just be simple separated options (eg.,
+ most cases, they will just be simple separated options (eg,
\texttt{spanish}), but a language might require, say, a set of
options organized as a tree with suboptions (in such a case, the
recommended separator is \verb|/|).
@@ -2086,7 +2245,7 @@ added.\nb{like `monetary', `time', `address', `name', `case' or
\begin{verbatim}
\StartBabelCommands{language}{captions}
- [unicode, fontenc=EU1 EU2, charset=utf8]
+ [unicode, fontenc=TU EU1 EU2, charset=utf8]
\SetString{\chaptername}{utf8-string}
\StartBabelCommands{language}{captions}
@@ -2096,14 +2255,14 @@ added.\nb{like `monetary', `time', `address', `name', `case' or
\end{verbatim}
A real example is:
-\begin{verbatim}[escapechar=\&]
+\begin{verbatim}
\StartBabelCommands{austrian}{date}
- [unicode, fontenc=EU1 EU2, charset=utf8]
- \SetString\monthiname{J&\"a&nner}
+ [unicode, fontenc=TU EU1 EU2, charset=utf8]
+ \SetString\monthiname{Jänner}
\StartBabelCommands{german,austrian}{date}
- [unicode, fontenc=EU1 EU2, charset=utf8]
- \SetString\monthiiiname{M&\"a&rz}
+ [unicode, fontenc=TU EU1 EU2, charset=utf8]
+ \SetString\monthiiiname{März}
\StartBabelCommands{austrian}{date}
\SetString\monthiname{J\"{a}nner}
@@ -2191,19 +2350,19 @@ optional one. This command, unlike |\SetString|, is executed always
only.
For example, as |T1| is the default case mapping in \LaTeX, we could
-set for Turkish:
+set for Turkish: % :-( Seem to be a bug in listings. Fixed with &&.
\begin{verbatim}[escapechar=\&]
\StartBabelCommands{turkish}{}[ot1enc, fontenc=OT1]
\SetCase
{\uccode"10=`I\relax}
{\lccode`I="10\relax}
-\StartBabelCommands{turkish}{}[unicode, fontenc=EU1 EU2, charset=utf8]
+\StartBabelCommands{turkish}{}[unicode, fontenc=TU EU1 EU2, charset=utf8]
\SetCase
- {\uccode`i=`&\rmfamily\.{\ttfamily I}&\relax
- \uccode`&\i&=`I\relax}
- {\lccode`&\rmfamily\.{\ttfamily I}&=`i\relax
- \lccode`I=`&\i&\relax}
+ {\uccode`i=`&İ&\relax
+ \uccode`&ı&=`I\relax}
+ {\lccode`&İ&=`i\relax
+ \lccode`I=`&ı&\relax}
\StartBabelCommands{turkish}{}
\SetCase
@@ -2335,14 +2494,12 @@ have occurred:
lowercase codes, uppercase codes, and category codes are kept
local to that group. If they are needed for the language, these
changes will need to be repeated and stored in |\extras...|
-\item The concept of language attributes is introduced. It is
- intended to give the user some control over the
- features a language-definition file provides. Its
- first use is for the Greek language, where the user can choose
- the $\pi o\lambda\upsilon\tau o\nu\kappa\acute{o}$
- (``Polutoniko'' or multi-accented) Greek way of typesetting
- texts. These attributes will possibly find wider use in future
- releases.
+\item The concept of language attributes is introduced. It is intended
+ to give the user some control over the features a
+ language-definition file provides. Its first use is for the Greek
+ language, where the user can choose the πολυτονικό (``polytonikó'' or
+ multi-accented) Greek way of typesetting texts. These attributes
+ will possibly find wider use in future releases.
\item The environment \Lenv{hyphenrules} is introduced.
\item The syntax of the file \file{language.dat} has been
extended to allow (optionally) specifying the font
@@ -2433,28 +2590,15 @@ with the previous release. Here is a list of the most important ones:
\item the language definition files now have a new extension,
\file{ldf};
\item the syntax of the file \file{language.dat} is extended to
- be compatible with the \pkg{french} package by Bernard Gaulle;
+ be compatible with the \pkg{french} package by Bernard Gaulle [this
+ package is now named \textsf{frenchle}];
\item each language definition file looks for a configuration
file which has the same name, but the extension \file{.cfg}. It
-can contain any valid \LaTeX\ code.
+can contain any valid \LaTeX\ code.
\end{itemize}
\DocInput{babel.dtx}
-\section{Conclusion}
-
-A system of document options has been presented that enable the user
-of \LaTeX\ to adapt the standard document classes of \LaTeX\ to the
-language he or she prefers to use. These options offer the possibility
-of switching between languages in one document. The basic interface
-consists of using one option, which is the same for \emph{all}
-standard document classes.
-
-In some cases the language definition files provide macros that can be
-useful to plain \TeX\ users as well as to \LaTeX\ users. The \babel{}
-system has been implemented so that it can be used by both groups of
-users.
-
\section{Acknowledgements}
I would like to thank all who volunteered as $\beta$-testers for their
@@ -2539,7 +2683,7 @@ help from Bernd Raichle, for which I am grateful.
%
% \part{The code}
%
-% \babel{} is being developed incrementtally, which means parts of the
+% \babel{} is being developed incrementally, which means parts of the
% code are under development and therefore incomplete. Only documented
% features are considered complete. In other words, use \babel{} only
% as documented (except, of course, if you want to explore and test
@@ -2573,8 +2717,8 @@ help from Bernd Raichle, for which I am grateful.
% little bit of literate programming.
%
% \begin{macrocode}
-%<<version=3.12>>
-%<<date=2017/06/29>>
+%<<version=3.13>>
+%<<date=2017/09/18>>
% \end{macrocode}
%
% \section{Tools}
@@ -2660,7 +2804,7 @@ help from Bernd Raichle, for which I am grateful.
%
% The following piece of code is stolen (with some changes) from
% \textsf{keyval}, by David Carlisle. It defines two macros:
-% |\bbl@trim| and |bbl@trim@def|. The first one strips the leading
+% |\bbl@trim| and |\bbl@trim@def|. The first one strips the leading
% and trailing spaces from the second argument and then applies the
% first argument (a macro, |\toks@| and the like). The second one, as
% its name suggests, defines the first argument as the stripped second
@@ -2708,7 +2852,7 @@ help from Bernd Raichle, for which I am grateful.
% \end{macrocode}
%
% A tool from \textsf{url}, by Donald
-% Arseneau, which test if a string is empty or space.
+% Arseneau, which tests if a string is empty or space.
%
% \begin{macrocode}
\def\bbl@ifblank#1{%
@@ -3291,28 +3435,29 @@ help from Bernd Raichle, for which I am grateful.
%
% \changes{babel~3.9t}{2017/04/23}{Removed options for English, Indonesian and
% Malay, now handled with proxy files}
+% \changes{babel~3.13}{2017/08/24}{Removed options for French,
+% too. ldf files now takes priority if exist, except Hebrew (to do)}
%
% \begin{macrocode}
-\DeclareOption{acadian}{\bbl@load@language{frenchb}}
-\DeclareOption{afrikaans}{\bbl@load@language{dutch}}
-\DeclareOption{brazil}{\bbl@load@language{portuges}}
-\DeclareOption{brazilian}{\bbl@load@language{portuges}}
-\DeclareOption{canadien}{\bbl@load@language{frenchb}}
-\DeclareOption{francais}{\bbl@load@language{frenchb}}
-\DeclareOption{french}{\bbl@load@language{frenchb}}%
+\def\bbl@try@load@lang#1#2#3{%
+ \IfFileExists{\CurrentOption.ldf}%
+ {\bbl@load@language{\CurrentOption}}%
+ {#1\bbl@load@language{#2}#3}}
+\DeclareOption{afrikaans}{\bbl@try@load@lang{}{dutch}{}}
+\DeclareOption{brazil}{\bbl@try@load@lang{}{portuges}{}}
+\DeclareOption{brazilian}{\bbl@try@load@lang{}{portuges}{}}
\DeclareOption{hebrew}{%
\input{rlbabel.def}%
\bbl@load@language{hebrew}}
-\DeclareOption{hungarian}{\bbl@load@language{magyar}}
-\DeclareOption{lowersorbian}{\bbl@load@language{lsorbian}}
-\DeclareOption{nynorsk}{\bbl@load@language{norsk}}
+\DeclareOption{hungarian}{\bbl@try@load@lang{}{magyar}{}}
+\DeclareOption{lowersorbian}{\bbl@try@load@lang{}{lsorbian}{}}
+\DeclareOption{nynorsk}{\bbl@try@load@lang{}{norsk}{}}
\DeclareOption{polutonikogreek}{%
- \bbl@load@language{greek}%
- \languageattribute{greek}{polutoniko}}
-\DeclareOption{portuguese}{\bbl@load@language{portuges}}
-\DeclareOption{russian}{\bbl@load@language{russianb}}
-\DeclareOption{ukrainian}{\bbl@load@language{ukraineb}}
-\DeclareOption{uppersorbian}{\bbl@load@language{usorbian}}
+ \bbl@try@load@lang{}{greek}{\languageattribute{greek}{polutoniko}}}
+\DeclareOption{portuguese}{\bbl@try@load@lang{}{portuges}{}}
+\DeclareOption{russian}{\bbl@try@load@lang{}{russianb}{}}
+\DeclareOption{ukrainian}{\bbl@try@load@lang{}{ukraineb}{}}
+\DeclareOption{uppersorbian}{\bbl@try@load@lang{}{usorbian}{}}
% \end{macrocode}
%
% Another way to extend the list of `known' options for \babel\ was
@@ -6294,15 +6439,21 @@ help from Bernd Raichle, for which I am grateful.
% provide the real string.
%
% \changes{3.10}{2017/05/19}{Added \cs{babelprovide}}
+% \changes{3.13}{2017/08/30}{Added \cs{import}, which also reads
+% dates. Some refactoring in the ini reader.}
%
% \begin{macrocode}
\newcommand\babelprovide[2][]{%
\let\bbl@savelangname\languagename
\def\languagename{#2}%
\let\bbl@KVP@captions\@nil
+ \let\bbl@KVP@import\@nil
\let\bbl@KVP@main\@nil
\let\bbl@KVP@hyphenrules\@nil
\bbl@forkv{#1}{\bbl@csarg\def{KVP@##1}{##2}}% TODO - error handling
+ \ifx\bbl@KVP@captions\@nil
+ \let\bbl@KVP@captions\bbl@KVP@import
+ \fi
\bbl@ifunset{date#2}%
{\bbl@provide@new{#2}}%
{\bbl@ifblank{#1}%
@@ -6312,7 +6463,7 @@ help from Bernd Raichle, for which I am grateful.
options: captions=lang-tag, hyphenrules=lang-list}%
{Use this macro as documented}}%
{\bbl@provide@renew{#2}}}%
- \babelensure{#2}%
+ \bbl@exp{\\\babelensure[exclude=\\\today]{#2}}%
\let\languagename\bbl@savelangname}
% \end{macrocode}
%
@@ -6325,8 +6476,8 @@ help from Bernd Raichle, for which I am grateful.
\@namedef{extras#1}{}%
\@namedef{noextras#1}{}%
\StartBabelCommands*{#1}{captions}%
- \ifx\bbl@KVP@captions\@nil
- \def\bbl@tempb##1{% elt for \bbl@captionslist
+ \ifx\bbl@KVP@captions\@nil % and also if import, implicit
+ \def\bbl@tempb##1{% elt for \bbl@captionslist
\ifx##1\@empty\else
\bbl@exp{%
\\\SetString\\##1{%
@@ -6340,10 +6491,18 @@ help from Bernd Raichle, for which I am grateful.
\bbl@savestrings
\fi
\StartBabelCommands*{#1}{date}%
- \bbl@exp{%
- \\\SetString\\\today{\\\bbl@nocaption{today}{\<#1today>}}}%
+ \ifx\bbl@KVP@import\@nil
+ \bbl@exp{%
+ \\\SetString\\\today{\\\bbl@nocaption{today}{\<#1today>}}}%
+ \else
+ \bbl@savetoday
+ \bbl@savedate
+ \fi
\EndBabelCommands
- \expandafter\gdef\csname#1hyphenmins\endcsname{23}%
+ \bbl@exp{%
+ \def\<#1hyphenmins>{%
+ {\bbl@ifunset{bbl@lfthm@#1}{2}{\@nameuse{bbl@lfthm@#1}}}%
+ {\bbl@ifunset{bbl@rgthm@#1}{3}{\@nameuse{bbl@rgthm@#1}}}}}%
\ifx\bbl@KVP@main\@nil\else
\expandafter\main@language\expandafter{#1}%
\fi}
@@ -6355,7 +6514,13 @@ help from Bernd Raichle, for which I am grateful.
\bbl@after@ini
\bbl@savestrings
\EndBabelCommands
- \fi}
+ \fi
+ \ifx\bbl@KVP@import\@nil\else
+ \StartBabelCommands*{#1}{date}%
+ \bbl@savetoday
+ \bbl@savedate
+ \EndBabelCommands
+ \fi}
% \end{macrocode}
%
% The |hyphenrules| option is handled with an auxiliary macro.
@@ -6400,6 +6565,10 @@ help from Bernd Raichle, for which I am grateful.
\else
\let\bbl@section\@empty
\let\bbl@savestrings\@empty
+ \let\bbl@savetoday\@empty
+ \let\bbl@savedate\@empty
+ \let\bbl@inireader\bbl@iniskip
+ \bbl@info{Importing data from babel-#1.ini for \languagename}%
\loop
\endlinechar\m@ne
\read1 to \bbl@line
@@ -6411,67 +6580,142 @@ help from Bernd Raichle, for which I am grateful.
\repeat
\fi}
\def\bbl@iniline#1\bbl@iniline{%
- \@ifnextchar[\bbl@inisec{\@ifnextchar;\bbl@iniskip\bbl@inikv}#1\@@} %]
+ \@ifnextchar[\bbl@inisec{\@ifnextchar;\bbl@iniskip\bbl@inireader}#1\@@}% ]
+% \end{macrocode}
+%
+% The special cases for comment lines and sections are handled by the
+% two following commands. In sections, we provide the posibility to
+% take extra actions at the end or at the start (TODO - but note the last
+% section is not ended). By default, key=val pairs are ignored.
+%
+% \begin{macrocode}
\def\bbl@iniskip#1\@@{}% if starts with ;
\def\bbl@inisec[#1]#2\@@{% if starts with opening bracket
+ \@nameuse{bbl@secpost@\bbl@section}% ends previous section
\def\bbl@section{#1}%
- \bbl@debug{\message{[[ #1 ]]^^J}}}
-\def\bbl@inikv#1=#2\@@{% otherwise, key=value
+ \@nameuse{bbl@secpre@\bbl@section}% starts current section
+ \bbl@ifunset{bbl@secline@#1}%
+ {\let\bbl@inireader\bbl@iniskip}%
+ {\bbl@exp{\let\\\bbl@inireader\<bbl@secline@#1>}}}
+% \end{macrocode}
+%
+% Reads a key=val line and stores the trimmed val in
+% |\bbl@@kv@<section>.<key>|.
+%
+% \begin{macrocode}
+\def\bbl@inikv#1=#2\@@{% key=value
\bbl@trim@def\bbl@tempa{#1}%
\bbl@trim\toks@{#2}%
- \bbl@ifunset{bbl@ini@\bbl@section}%
- {}%
- {\bbl@exp{%
- \<bbl@ini@\bbl@section>\bbl@tempa=\the\toks@\\\@nil}}}
-\def\bbl@after@ini{%
- % make sure Script and Language takes some value
- \bbl@exp{\\\bbl@ifblank{\@nameuse{bbl@lotf@\languagename}}}%
- {\bbl@csarg\gdef{lotf@\languagename}{dflt}}{}%
- \bbl@exp{\\\bbl@ifblank{\@nameuse{bbl@sotf@\languagename}}}%
- {\bbl@csarg\gdef{sotf@\languagename}{DFLT}}{}}
+ \bbl@csarg\edef{@kv@\bbl@section.\bbl@tempa}{\the\toks@}}
+% \end{macrocode}
+%
+% The previous assignments are local, so we need to export them. If
+% the value is empty, we can provide a default value.
+%
+% \begin{macrocode}
+\def\bbl@exportkey#1#2#3{%
+ \bbl@ifunset{bbl@@kv@#2}%
+ {\bbl@csarg\gdef{#1@\languagename}{#3}}%
+ {\expandafter\ifx\csname bbl@@kv@#2\endcsname\@empty
+ \bbl@csarg\gdef{#1@\languagename}{#3}%
+ \else
+ \bbl@exp{\global\let\<bbl@#1@\languagename>\<bbl@@kv@#2>}%
+ \fi}}
% \end{macrocode}
%
% Key-value pairs are treated differently depending on the section in
% the |ini| file. The following macros are the readers for
-% |captions| (with Unicode) or |captions.licr| (for 8-bit) and for
-% |identification|. But first, an auxiliary macro.
+% |identification| and |typography|.
+%
+% \begin{macrocode}
+\let\bbl@secline@identification\bbl@inikv
+\def\bbl@secpost@identification{%
+ \bbl@exportkey{lname}{identification.name.english}{}%
+ \bbl@exportkey{lbcp}{identification.tag.bcp47}{}%
+ \bbl@exportkey{lotf}{identification.tag.opentype}{dflt}%
+ \bbl@exportkey{sname}{identification.script.name}{}%
+ \bbl@exportkey{sbcp}{identification.script.tag.bcp47}{}%
+ \bbl@exportkey{sotf}{identification.script.tag.opentype}{DFLT}}
+\let\bbl@secline@typography\bbl@inikv
+\def\bbl@after@ini{%
+ \bbl@exportkey{lfthm}{typography.lefthyphenmin}{2}%
+ \bbl@exportkey{rgthm}{typography.righthyphenmin}{3}%
+ \def\bbl@tempa{0.9}%
+ \bbl@csarg\ifx{@kv@identification.version}\bbl@tempa
+ \bbl@warning{%
+ The `\languagename' date format may not be suitable\\%
+ for proper typesetting, and therefore it very likely will\\%
+ change in a future release. Reported}%
+ \fi
+ \bbl@toglobal\bbl@savetoday
+ \bbl@toglobal\bbl@savedate}
+% \end{macrocode}
+%
+% Now |captions| and |captions.licr|, depending on the engine. And
+% also for dates. They rely on a few auxilary macros.
%
% \begin{macrocode}
-\def\bbl@exportkey#1#2#3#4{% 1:bbl id,2:ini name,3:ini key,4:ini val
- \bbl@ifsamestring{#2}{#3}%
- {\bbl@csarg\gdef{#1@\languagename}{#4}}%
- {}}
\ifcase\bbl@engine
- \bbl@csarg\def{ini@captions.licr}#1=#2\@nil{% TODO - copypaste pattern
- \bbl@ifblank{#2}%
- {\bbl@exp{%
- \toks@{\\\bbl@nocaption{#1}\<\languagename#1name>}}}%
- {\toks@{#2}}%
- \bbl@exp{%
- \\\bbl@add\\\bbl@savestrings{% NOTE - with date will be global
- \\\SetString\<#1name>{\the\toks@}}}}
+ \bbl@csarg\def{secline@captions.licr}#1=#2\@@{%
+ \bbl@ini@captions@aux{#1}{#2}}
+ \bbl@csarg\def{secline@date.gregorian}#1=#2\@@{% for defaults
+ \bbl@ini@dategreg#1...\relax{#2}}
+ \bbl@csarg\def{secline@date.gregorian.licr}#1=#2\@@{% override
+ \bbl@ini@dategreg#1...\relax{#2}}
\else
- \def\bbl@ini@captions#1=#2\@nil{%
- \bbl@ifblank{#2}%
- {\bbl@exp{%
- \toks@{\\\bbl@nocaption{#1}\<\languagename#1name>}}}%
- {\toks@{#2}}%
- \bbl@exp{%
- \\\bbl@add\\\bbl@savestrings{%
- \\\SetString\<#1name>{\the\toks@}}}}
+ \def\bbl@secline@captions#1=#2\@@{%
+ \bbl@ini@captions@aux{#1}{#2}}
+ \bbl@csarg\def{secline@date.gregorian}#1=#2\@@{%
+ \bbl@ini@dategreg#1...\relax{#2}}
\fi
-\def\bbl@ini@identification#1=#2\@nil{% TODO - not only with captions
- \bbl@exportkey{lname}{name.english}{#1}{#2}%
- \bbl@exportkey{lbcp}{tag.bcp47}{#1}{#2}%
- \bbl@exportkey{lotf}{tag.opentype}{#1}{#2}%
- \bbl@exportkey{sname}{script.name}{#1}{#2}%
- \bbl@exportkey{sbcp}{script.tag.bcp47}{#1}{#2}%
- \bbl@exportkey{sotf}{script.tag.opentype}{#1}{#2}}
+% \end{macrocode}
+%
+% The auxiliary macro for captions define |\<caption>name|.
+%
+% \begin{macrocode}
+\def\bbl@ini@captions@aux#1#2{%
+ \bbl@trim@def\bbl@tempa{#1}%
+ \bbl@ifblank{#2}%
+ {\bbl@exp{%
+ \toks@{\\\bbl@nocaption{\bbl@tempa}\<\languagename\bbl@tempa name>}}}%
+ {\bbl@trim\toks@{#2}}%
+ \bbl@exp{%
+ \\\bbl@add\\\bbl@savestrings{%
+ \\\SetString\<\bbl@tempa name>{\the\toks@}}}}
+% \end{macrocode}
+%
+% But dates are more complex. The full date format is stores in
+% |date.gregorian|, so we must read it in non-Unicode engines, too.
+%
+% \begin{macrocode}
+\bbl@csarg\def{secpre@date.gregorian.licr}{%
+ \ifcase\bbl@engine\let\bbl@savedate\@empty\fi}
+\def\bbl@ini@dategreg#1.#2.#3.#4\relax#5{% TODO - ignore with 'captions'
+ \bbl@trim@def\bbl@tempa{#1.#2}%
+ \bbl@ifsamestring{\bbl@tempa}{months.wide}%
+ {\bbl@trim@def\bbl@tempa{#3}%
+ \bbl@trim\toks@{#5}%
+ \bbl@exp{%
+ \\\bbl@add\\\bbl@savedate{%
+ \\\SetString\<month\romannumeral\bbl@tempa name>{\the\toks@}}}}%
+ {\bbl@ifsamestring{\bbl@tempa}{date.long}%
+ {\bbl@trim@def\bbl@toreplace{#5}%
+ \bbl@TG@@date
+ \global\bbl@csarg\let{date@\languagename}\bbl@toreplace
+ \bbl@exp{%
+ \gdef\<\languagename date>####1####2####3{%
+ \<bbl@ensure@\languagename>{%
+ \<bbl@date@\languagename>{####1}{####2}{####3}}}%
+ \\\bbl@add\\\bbl@savetoday{%
+ \\\SetString\\\today{%
+ \<\languagename date>{\year}{\month}{\day}}}}}}%
+ {}}
% \end{macrocode}
%
% Dates will require some macros for the basic formatting. They may be
% redefined by language, so ``semi-public'' names (camel case) are
-% used.
+% used. Oddly enough, the CLDR places particles like “de”
+% inconsistenly in either in the date or in the month name.
%
% \begin{macrocode}
\newcommand\BabelDateSpace{\nobreakspace{}}
@@ -6488,9 +6732,15 @@ help from Bernd Raichle, for which I am grateful.
\else\ifnum#1<100 \number#1 %
\else\ifnum#1<1000 \expandafter\@gobble\number#1 %
\else\ifnum#1<10000 \expandafter\@gobbletwo\number#1 %
- \else\ERRORd % TODO - real error
+ \else
+ \bbl@error
+ {Currently two-digit years are restricted to the\\
+ range 0-9999.}%
+ {There is little you can do. Sorry.}%
\fi\fi\fi\fi}}
\newcommand\BabelDateyyyy[1]{{\number#1}}
+\def\bbl@replace@finish@iii#1{%
+ \bbl@exp{\def\\#1####1####2####3{\the\toks@}}}
\def\bbl@TG@@date{%
\bbl@replace\bbl@toreplace{[ ]}{\BabelDateSpace{}}%
\bbl@replace\bbl@toreplace{[.]}{\BabelDateDot{}}%
@@ -6501,7 +6751,10 @@ help from Bernd Raichle, for which I am grateful.
\bbl@replace\bbl@toreplace{[MMMM]}{\BabelDateMMMM{####2}}%
\bbl@replace\bbl@toreplace{[y]}{\BabelDatey{####1}}%
\bbl@replace\bbl@toreplace{[yy]}{\BabelDateyy{####1}}%
- \bbl@replace\bbl@toreplace{[yyyy]}{\BabelDateyyyy{####1}}}
+ \bbl@replace\bbl@toreplace{[yyyy]}{\BabelDateyyyy{####1}}%
+% Note after \bbl@replace \toks@ contains the resulting string.
+% TODO - Using this implicit behavior doesn't seem a good idea.
+ \bbl@replace@finish@iii\bbl@toreplace}
% \end{macrocode}
%
% \subsection{Cross referencing macros}
@@ -7310,14 +7563,15 @@ help from Bernd Raichle, for which I am grateful.
% \begin{itemize}
% \item pdftex provides a minimal support for bidi text, and it
% must be done by hand. Vertical typesetting is not possible.
-% \item XeTeX is somewhat better, thanks to the font
-% engine. However, very little is done at the paragraph level.
+% \item XeTeX fares somewhat better, thanks to the font engine and
+% a few additional tools. However, very little is done at the
+% paragraph level.
% \item LuaTeX could provide the most complete solution, as we can
% manipulate almost freely the node list, the generated lines,
-% and so on, but unlike XeTeX bidi text does not work out of the
-% box and some development is necessary. It also provides tools
-% to properly set left-to-right and right-to-left page
-% layouts. As LuaTeX-ja shows, vertical typesetting is posible.
+% and so on, but bidi text does not work out of the box and some
+% development is necessary. It also provides tools to properly
+% set left-to-right and right-to-left page layouts. As LuaTeX-ja
+% shows, vertical typesetting is posible.
% \end{itemize}
%
% \begin{macrocode}
@@ -7810,8 +8064,8 @@ help from Bernd Raichle, for which I am grateful.
% constructing the names of three macros by concatenating three
% words with the argument of |\selectlanguage|, and calling these
% macros. \nb{What if \cs{hyphenation} was used in |extras|? Patch
-% temply set@hyphenmins and hyphenation. It can be done in hooks if
-% necessary.}
+% temporarily |\set@hyphenmins| and hyphenation. It can be done in
+% hooks if necessary.}
%
%
% The switching of the values of |\lefthyphenmin| and
@@ -8135,7 +8389,9 @@ help from Bernd Raichle, for which I am grateful.
% |\righthyphenmin|. It expects two values as its argument.
%
% \begin{macrocode}
-\def\set@hyphenmins#1#2{\lefthyphenmin#1\relax\righthyphenmin#2\relax}
+\def\set@hyphenmins#1#2{%
+ \lefthyphenmin#1\relax
+ \righthyphenmin#2\relax}
% \end{macrocode}
%
% \end{macro}
@@ -9950,4 +10206,7 @@ help from Bernd Raichle, for which I am grateful.
%
% Local Variables:
% mode: doctex
-% End: \ No newline at end of file
+% coding: utf-8
+% TeX-engine: luatex
+% End:
+