summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/ibycus-babel/ibycus-babel.dtx
blob: f9049e351981a931fc3f90de8784b577fe40b469 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
% \CheckSum{180}
% \iffalse
%
% file `ibycus.dtx'.
% Copyright (c) 2004  Peter Heslin, Walter Schmidt
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2003/12/01 or later.
%
% This work has the LPPL maintenance status "maintained".
%
% This Current Maintainers of this work are P.~Heslin and W.~Schmidt
%
% This work consists of the files 
% ibycus-babel.dtx, ibycus-babel.ins, ibyhyph.pl, 
% and the derived files 
% ibycus.ldf and ufib.fd
%
%<*driver>
\ProvidesFile{ibycus-babel.dtx}
%</driver>
%
%<ibycus>\ProvidesLanguage{ibycus}
%<ufib>\ProvidesFile{ufib.fd}%
           [2004/11/19 v2.4 (PH/WaS)]
%
%<*driver>
\documentclass{ltxdoc}    
\usepackage{url}
\OnlyDescription
\begin{document}
   \DocInput{ibycus-babel.dtx}
\end{document}
%</driver>
%
% \fi
%
% \GetFileInfo{ibycus-babel.dtx}
% \title{Typesetting ancient Greek\\ using the Ibycus fonts with the Babel system}
% \author{Peter Heslin\thanks{\texttt{p.j.heslin@dur.ac.uk}} \and Walter Schmidt\thanks{\texttt{w-a-schmidt@gmx.net}}}
% \date{\fileversion{} -- \filedate}
% \makeatletter
% \def\eTeX{$\m@th\varepsilon$-\TeX}
% \makeatother
%
% \maketitle
%
% \sloppy
%
% \section{Overview}
% The present document describes a new interface for the Ibycus fonts
% to use them in conjunction with the Babel system for multilanguage typesetting.
% It constitutes an alternative to the well-known macro packages 
% |ibycus4.sty| and |psibycus.sty|, which are distributed together with the
% fonts.  The main advantage over these packages is that automatic
% hyphenation is provided for the Greek language.  Notice, however, that 
% a \TeX\ program with the so-called \eTeX\ extensions is required.
%
% The implementation is available for \LaTeXe\ only; there are no
% corresponding macro files for plain~\TeX\ or \LaTeX~2.09.
%
%
% \section{{\boldmath Why \eTeX?}}
% With `ordinary' \TeX, 
% hyphenation of Greek words will not work properly, if the end of a mixed Greek
% and Latin-alphabet paragraph does not coincide with the end of the
% Greek.  This is due to a misfeature in \TeX: Only one set of
% so-called lccodes is used throughout the length of a paragraph -- only
% those which are valid at its end.  These codes must be adjusted for
% the Ibycus notation in order to tell \TeX\ that accents and breathings 
% a part of the words, rather than punctuation.  So if you have reverted back 
% to a Latin-written language  at the end of the paragraph, the wrong 
% codes for Greek hyphenation are in effect, and the diacritics in Greek words 
% are wrongly considered as punctuation.  
% The problem does, however, \emph{not} occur with an \eTeX\ program; i.e., a 
% \TeX\ program with certain extended capabilites.  In fact, you are
% probably already using \eTeX, even if you did not realize it.
% All up-to-date \LaTeX\ systems are now built upon an \eTeX\ typesetting
% engine, rather than on the classical \TeX\ program.
%
% \section{Usage}
% The Ibycus fonts are assigned a (pseudo-)language named |ibycus|,
% which can be used (almost) like any other language supported by
% Babel.  To enable the use of this language in your document, specify
% it as an option to the Babel package just as you would do for any
% other language.  For instance, to write a document in German with
% some Greek passages:
% \begin{verse}
%   |\usepackage[ibycus,ngerman]{babel}|
% \end{verse}
% 
% A few caveats:  Do  not declare |ibycus| as the default
% language of the document; it is not suitable for this purpose!
% In other words, |ibycus| must never be the last option for Babel.
% And, of course, do not use it together with the packages |ibycus4| 
% or |psibycus|.
%
% The language |ibycus| should be selected only locally.  Either use
% the |ibycus| environment
% to typeset larger passages of Greek text:
% \begin{verse}
%   |\begin{ibycus}                                     | \\
%   |  (Hrodo'tou Qouri'ou i(stori'hs a)po'decis h('de, | \\
%   |  ...                                              | \\
%   |  h(`n ai)ti'hn e)pole'mhsan a)llh'loisi.          | \\
%   |\end{ibycus}                                       |
% \end{verse}
% or use the command |\ibygr|, which is more appropriate for
% short pieces of Greek within Latin-written text:
% \begin{verse}
%      |blah blah \ibygr{a)rxai=a gra'mmata} blah...|
% \end{verse}
% In fact, the environment |ibycus| is nothing but an abbreviation for 
% Babel's |otherlanguage| environment with the option |ibycus|, and 
% |\ibygr{...}| is the same as |\foreignlanguage{ibycus}{...}|.
%
% Within the environment |ibycus| or the argument of |\ibygr|,
% the Ibycus-specific input notation is to be used to enter Greek.  This
% notation is described in the documentation that comes with the Ibycus
% fonts.
% 
% The typeface Ibycus and the related input notation can also be
% selected without changing the hyphenation tables; to do so, use the
% declaration |\ibycustext| or the text-generating command
% |\textibycus{...}|.  These macros exist more or less only as a
% side-effect of the implementation; they should normally not be
% needed.
%
% To switch temporarily back to the Latin alphabet within a piece of
% Greek text (without, however, changing the hyphenation table), use
% the declaration |\latintext| or the text-generating macro
% |\textlatin{...}|.  When Babel is loaded with the option |ibycus|,
% these commands not only switch back to the default latin text font
% encoding as usual; they also select the default roman font family
% (just like |\rmfamily| or |\textrm|).
%
% Notice a particular difference between |ibycus| and other languages
% of the Babel system:  Switching to the language |ibycus|  selects
% both a particular font encoding (|U|) and a particular font family (|fib|), 
% regardless of the font family that was active before. 
%
% The Ibycus typeface provides a few traditional text-editor symbols 
% for critical editions:
% 
% \begin{center}
% \begin{tabular}{ll}
% \verb+\braceleft     + & left curly brace \\
% \verb+\braceright    + & right curly brace\\
% \verb+\bracketleftbt + & left half square bracket\\
% \verb+\bracketrightbt+ & right half square bracket\\
% \verb+\sdagger       + & single dagger\\
% \verb+\dbldagger     + & double dagger\\
% \end{tabular}
% \end{center}
% Use of these symbols is not restricted to Greek
% passages.  \textbf{Caution:} 
% In the Ibycus4 package the single dagger carries the name |\dagger|.
% However, this macro belongs to the \LaTeX\ kernel and should not be redefined,
% so the name |\sdagger| is now used for the Ibycus-specific symbol.
%
% \section{Scaling the Ibycus fonts}
% The Ibycus typeface was primarily designed to go with Computer Modern;
% yet it can be used with other Latin typefaces, too.  In this case it
% may sometimes be useful to typeset the Ibycus fonts a little bit larger
% or smaller, to make them blend better with the Latin typeface.
% This can be accomplished through the macro |\setgreekfontsize|.  For instance,
% |\setgreekfontsize{1.05}| will enlarge the Ibycus fonts by 5\%, as compared
% with their nominal size.  The command can be issued in the preamble only.
%
%
% \section{The hyphenation patterns}
% The hyphenation patterns for the Ibycus encoding were
% generated by running the Perl script \path{ibyhyph.pl} on
% Dimitrios Filippou's \path{GRAhyph4.tex}, which can be found in the
% CTAN directory \path{language/hyphenation/elhyphen}.  This is an
% improved set of hyphenation patterns for ancient Greek with LGR encoding;
% Babel does not currently use it by default.  
% 
% Dimitrios Filippou's improved hyphenation patterns discover far more
% hyphenation points than the default Babel patterns, and are more
% accurate, especially for compound words.  
% You will notice that there are more hyphenation
% points right after the first letter of words beginning
% with a vowel + consonant + vowel.  Some may find such hyphenations
% surprising, but they are legal, according to the rules for hyphenation
% of Greek, ancient and modern; see the account by Yannis Haralambous:
% `From Unicode to Typography, a Case Study: the Greek Script'
% \path{<http://omega.enstb.org/yannis/pdf/boston99.pdf>}, pp~18f.
% If you find these hyphenation points ugly, issue the command
% \begin{verse}
%   |\def\ibycushyphenmins{2 2}|
% \end{verse}
% after loading of Babel in order to suppress them.
%
% Filippou's patterns also include legal hyphenation points
% immediately before the last letter of a word.  However, the
% Ibycus-Babel interface suppreses them, since they are not only ugly
% but also of little practical use.
%
% Please contact Peter Heslin if you come across any words that
% Ibycus hyphenates differently from the corresponding LGR-encoded
% patterns (except for the suppressed hyphenation before the last
% letter of a word).
%
%
% \section{Problems and deficiencies}
% \begin{itemize}
% \item  After a sequence such as
%   \begin{verse}
%   |\selectlanguage{ibycus}| \\
%   \textit{Greek text\dots}  \\
%   |\selectlanguage{|\textit{anything}|}| \\
%   \end{verse}
%   the font family is changed to the default roman typeface,
%   just as after |\rmfamily|.  This can be avoided by selecting
%   the language |ibycus| only within a group or environment,
%   or by using the commands |\ibygr| or |\foreignlanguage|.
% \item  The command |\setgreekfontscale| has no effect
%   when the Ibycus fonts are already in use;
%   this situation is, however, rather unlikely in the preamble.
% \end{itemize}
%
%
% \section{Changes since version 1.5}
% The names of several commands and environments have been changed:
%
% \begin{center}
% \begin{tabular}{ll}
% Version 1.5:                  & Version 2.4      \\ \hline
% \cmd{\gk}                     & \cmd{\ibygr}     \\
% \texttt{greek} (environment)  & \texttt{ibycus}  \\
% \cmd{\ibylatintext}           & \cmd{\latintext} \\
% \cmd{\dagger}                 & \cmd{\sdagger}
% \end{tabular}
% \end{center} 
% Furthermore, hyphenation before the last letter of a word is now
% suppressed by default.
%
% \StopEventually{}
%
%
% \section{The Implementation}
% \subsection{The \texttt{.ldf} file for use with babel}
%
% When the \TeX\ engine used is not an \eTeX, we issue an appropriate warning:
%    \begin{macrocode}
%<*ibycus>
\ifx\eTeXversion\@undefined
  \PackageError{ibycus-babel}{%
    The TeX engine used by LaTeX \MessageBreak
    does not provide the the eTeX extensions.\MessageBreak
    This may cause wrong hyphenation\MessageBreak
    in mixed Latin/Greek paragraphs}
    {Proceed, with fingers crossed...}
\fi    
%    \end{macrocode}
%
%  The macro |\LdfInit| takes care of preventing that this file is
%  loaded more than once:
%    \begin{macrocode}
\LdfInit{ibycus}{captionsibycus}
%    \end{macrocode}
%  When this file is read as an option, i.e., by the |\usepackage|
%  command, \texttt{ibycus} could be an `unknown' language in
%  which case we have to make it known.  So we check for the
%  existence of |\l@ibycus| to see whether we have to do
%  something here:
%    \begin{macrocode}
\ifx\undefined\l@ibycus
  \@nopatterns{Ibycus}
  \adddialect\l@ibycus0\fi
%    \end{macrocode}
%
% We declare a command |\ibygr| and an environment |ibycus| to make
% entering of Greek text easier, as compared with Babel's macros:
%    \begin{macrocode}
\DeclareRobustCommand{\ibygr}[1]{\foreignlanguage{ibycus}{#1}}
\newenvironment{ibycus}%
  {\begin{otherlanguage}{ibycus}}{\end{otherlanguage}}%
%    \end{macrocode}
%
% A command is provided to set a scaling factor for the Ibycus fonts.
% When the fonts are already in use, the command has no effect.
% We make sure that it can be used only in the preamble, even though this
% does not really make sure that the fonts have not yet been loaded.
%    \begin{macrocode}
\newcommand*{\setgreekfontscale}[1]{%
  \def\fib@scale{#1}}
\@onlypreamble\setgreekfontscale
%    \end{macrocode}
% The macro |\fib@scale|, which is defined here, will be evaluated
% in the file \texttt{ufib.fd}, see below.
%
% All text-editor symbols of the old package |ibycus4| are provided.
% However, |\dagger| is named |\sdagger| now.
%    \begin{macrocode}
\newcommand{\braceleft}{%
  {\fontencoding{U}\fontfamily{fib}\selectfont\char'333}}
\newcommand{\braceright}{%
  {\fontencoding{U}\fontfamily{fib}\selectfont\char'337}}
\newcommand{\bracketleftbt}{%
  {\fontencoding{U}\fontfamily{fib}\selectfont\char'363}}
\newcommand{\bracketrightbt}{%
  {\fontencoding{U}\fontfamily{fib}\selectfont\char'367}}
\newcommand{\sdagger}{%
  {\fontencoding{U}\fontfamily{fib}\selectfont\char'375}}
\newcommand{\dbldagger}{%
  {\fontencoding{U}\fontfamily{fib}\selectfont\char'376}}
%    \end{macrocode}
%
% Finally, the code to integrate the pseudo-language Ibycus into Babel.
% We start with the default values of |\lefthyphenmin| and |\righthyphenmin|.
%    \begin{macrocode}
\providehyphenmins{ibycus}{\@ne\tw@}
\def\captionsibycus{}
\def\dateibycus{}
%    \end{macrocode}
% |\latintext| needs to be changed slightly, as compared with the
% default definition from the Babel kernel.   The macro 
% must not only switch back to the default Latin font encoding;
% it must also switch back to an appropriate font \emph{family}, since the family
% is always changed to |fib| within the Greek passages.  
%    \begin{macrocode}
\DeclareRobustCommand{\latintext}{%
  \fontencoding{\latinencoding}\fontfamily{\rmdefault}\selectfont
  \def\encodingdefault{\latinencoding}}
%    \end{macrocode}
% Should we save and  restore the actual family name, 
% instead of simply forcing |\rmdefault|?
%    \begin{macrocode}
\DeclareRobustCommand{\ibycustext}{%
  \fontencoding{U}\fontfamily{fib}\selectfont
  \def\encodingdefault{U}}
\DeclareRobustCommand{\textibycus}[1]{\leavevmode{\ibycustext #1}}
\addto\extrasibycus{\ibycustext}
\addto\noextrasibycus{\latintext}
\addto\extrasibycus{%
  \babel@savevariable{\lccode`\(}\lccode`\(=`\(%
  \babel@savevariable{\lccode`\)}\lccode`\)=`\)%
  \babel@savevariable{\lccode`\=}\lccode`\==`\=%
  \babel@savevariable{\lccode`\|}\lccode`\|=`\|%
  \babel@savevariable{\lccode`\`}\lccode`\`=`\`%
  \babel@savevariable{\lccode`\'}\lccode`\'=`\'%
  \babel@savevariable{\lccode`\+}\lccode`\+=`\+}
\ldf@finish{ibycus}
%</ibycus>
%    \end{macrocode}
%
% \subsection{The \texttt{.fd} file}
% We provide a correct \texttt{fd} file of our own for the Ibycus font family,
% instead of relying on the weird file from the Ibycus4 collection,
% and we use only those fonts, that exist also in Postscript format.
%    \begin{macrocode}
%<*ufib>
\ifx\aliasfont\@undefined\else\ifx\aliasfont\relax\else
%    \end{macrocode}
% This piece of code is executed with V\TeX\ only.
% It enables the use of the artificially slanted font.
%    \begin{macrocode}
  \begingroup
    \catcode32=10 %
    \aliasfont fibo84 = fibr84 slant 167 %
  \endgroup
\fi\fi
%    \end{macrocode}
%    \begin{macrocode}
\expandafter\ifx\csname fib@scale\endcsname\relax
 \let\fib@@scale\@empty
\else
 \edef\fib@@scale{s*[\csname fib@scale\endcsname]}%
\fi
\DeclareFontFamily{U}{fib}{}
\DeclareFontShape{U}{fib}{m}{n}{<-> \fib@@scale fibr84}{}
\DeclareFontShape{U}{fib}{m}{sl}{<-> \fib@@scale fibo84}{}
\DeclareFontShape{U}{fib}{b}{n}{<-> \fib@@scale fibb84}{}
\DeclareFontShape{U}{fib}{m}{it}{<-> ssub * fib/m/sl}{}
\DeclareFontShape{U}{fib}{bx}{n}{<-> ssub * fib/b/n}{}
%</ufib>
%    \end{macrocode}
%
% \Finale
%
% \iffalse
%
% The next line of code prevents DocStrip from adding the
% character table to the generated files(s).
\endinput
%
% \fi
%
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
%%