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 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505
|
% \CheckSum{202}
% \iffalse
%
% file `ibycus.dtx'.
% Copyright (c) 2004, 2005 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, lgienc.def and lgifib.fd.
%
%<*driver>
\ProvidesFile{ibycus-babel.dtx}
%</driver>
%
%<ibycus>\ProvidesLanguage{ibycus}
%<lgifib>\ProvidesFile{lgifib.fd}%
%<lgienc>\ProvidesFile{lgienc.def}%
[2005/11/23 v3.0 (PH/WaS)]
%
%<*driver>
\documentclass{ltxdoc}
\usepackage{hyperref}
\usepackage{url}
\OnlyDescription
\begin{document}
\DocInput{ibycus-babel.dtx}
\end{document}
%</driver>
%
% \fi
%
% \GetFileInfo{ibycus-babel.dtx}
% \title{Typesetting ancient Greek\\ using Ibycus-encoded 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 Greek fonts with
% the so-called `Ibycus' encoding,
% 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
% Pierre A. MacKay's original Ibycus 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{\texorpdfstring{{\boldmath Why \eTeX?}}{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{Basic usage}
% The Greek 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 \emph{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}
% |... Latin, \ibygr{a)rxai=a gra'mmata} and Latin again|
% \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.
%
% Notice a particular difference between |ibycus| and other languages
% of the Babel system: Switching to the language |ibycus| selects
% both a particular font encoding (|LGI|) and a particular font family (by default |fib|),
% regardless of the font family that was active before.
%
% Greek fonts 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 font
% encoding as usual; they also select the default font family of the
% document.
%
% Ibycus-encoded fonts provide 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{Using alternative typefaces}
% \label{sec:typefaces}
% By default, Pierre A. MacKay's original Ibycus font family is used to typeset
% the Greek passages.
% From version 3.0 on the Ibucus-Babel interface supports also other font families
% with the same encoding.
%
% To select the Greek font family manually, issue the command
% \begin{verse}
% |\renewcommand{\ibycusdefault}|\marg{family}
% \end{verse}
% after loading of Babel---provided, of course, that the indicated font family is
% indeed available with the Ibycus encoding LGI.
% Macro packages to support alternative font familes in general may already include
% this action; see the related documentation.
%
% If you intend to write a class or package which is to change the font family
% used by the Ibycus-Babel interface, or if you want to implement a font family
% with Ibycus encoding, see the documentation of the source code,
% particularly the last section.
%
%
% \section{Scaling the Greek fonts}
% It may sometimes be useful to typeset the Greek fonts a little bit larger
% % or smaller (as compared with their `natural' size), to make them blend better
% with the typeface used for Latin.
% This can be accomplished through the macro |\setgreekfontscale|. For instance,
% |\setgreekfontscale{1.05}| will enlarge the Greek fonts by 5\%.
% 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. With version~3 of the
% Ibycus-Babel interface, additional manual patches were applied to the
% patterns, in order to fix a bug regarding the use of `lunate sigmas'.
%
% 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 suppresses 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 Globally changing the language to |ibycus|, i.e., a sequence such as
% \begin{verse}
% |\selectlanguage{ibycus}| \\
% \textit{Greek text\dots} \\
% |\selectlanguage{|\textit{anything}|}| \\
% \end{verse}
% may have unwanted effects, for instance on the font selection.
% 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 behavior of the existing commands \cmd{\textlatin}
% and \cmd{\latintext} is altered:
% They will switch to the the default font family of the document,
% rather than leaving the current font family untouched.
% \item The command \cmd{\setgreekfontscale} has no effect
% when the Ibycus fonts are already in use;
% this situation is, however, rather unlikely in the preamble.
% \end{itemize}
%
%
% \section{Incompatible changes over version 1.5}
% The names of several commands and environments have changed:
% \begin{center}
% \begin{tabular}{ll}
% Version 1.5: & Version 2.4 and later \\ \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 are going to load the file providing the definition of the LGI encoding,
% see section \ref{sec:lgienc}.
% The error handling has been adopted from Babel's (LGR) Greek module,
% in order to ensure consistent behavior:
% \begin{macrocode}
\InputIfFileExists{lgienc.def}{%
\message{Loading the definitions for the Greek font encoding LGI}}{%
\errhelp{I can't find the lgienc.def file for the Greek fonts}%
\errmessage{Since I do not know what the LGI encoding means^^J
I can't typeset Greek.^^J
I stop here, while you get a suitable lgienc.def file}\@@end
}
% \end{macrocode}
%
% The font family to be used for Greek passages is initialized to |fib|,
% unless it has been defined already by a preceding package:
% \begin{macrocode}
\providecommand{\ibycusdefault}{fib}
% \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\ibycus@scale{#1}}
\@onlypreamble\setgreekfontscale
% \end{macrocode}
% The macro |\ibycus@scale|, which is defined here, will be evaluated
% in the font definition files of LGI-encoded fonts; see \path{lgifib.fd} below.
%
% All text-editor symbols of the old package |ibycus4| are provided.
% However, |\dagger| is named |\sdagger| now.
% \begin{macrocode}
\newcommand{\braceleft}{%
{\fontencoding{LGI}\fontfamily{\ibycusdefault}\selectfont\char'333}}
\newcommand{\braceright}{%
{\fontencoding{LGI}\fontfamily{\ibycusdefault}\selectfont\char'337}}
\newcommand{\bracketleftbt}{%
{\fontencoding{LGI}\fontfamily{\ibycusdefault}\selectfont\char'363}}
\newcommand{\bracketrightbt}{%
{\fontencoding{LGI}\fontfamily{\ibycusdefault}\selectfont\char'367}}
\newcommand{\sdagger}{%
{\fontencoding{LGI}\fontfamily{\ibycusdefault}\selectfont\char'375}}
\newcommand{\dbldagger}{%
{\fontencoding{LGI}\fontfamily{\ibycusdefault}\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}
%
% \cmd{\latintext} needs to be extended, as compared with the default definition
% provided by the Babel kernel. The macro must not only switch to the default
% Latin font \emph{encoding}; in addition to that, it must also switch to an appropriate
% font \emph{family}, because the family is always changed to |\ibycusdefault|
% within the Greek passages. While v2.0 would select |\rmdefault|,
% this has been changed to |\familydefault| now.
% Since |\latintext| is a protected command, we extend actually the
% `unprotected' command \verb*|\latintext |:
% \begin{macrocode}
\expandafter\let\expandafter\iby@latintext\csname latintext \endcsname
\@namedef{latintext }{\fontfamily{\familydefault}\iby@latintext}
% \end{macrocode}
%
% \cmd{\ibycustext} is modelled after Babel's original \cmd{\greektext}.
% However, we do not alter \cmd{\encodingdefault} any longer, since
% doing so has turned out to be wrong. (See the \LaTeX\ bug babel/3796.)
% As long as |ibycus| is never used as the default language
% of a document, there is no need to touch \cmd{\encodingdefault} at all.
% \begin{macrocode}
\DeclareRobustCommand{\ibycustext}{%
\fontencoding{LGI}\fontfamily{\ibycusdefault}\selectfont}
\DeclareRobustCommand{\textibycus}[1]{\leavevmode{\ibycustext #1}}
\addto\extrasibycus{\ibycustext}
\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`\+=`\+}
% \end{macrocode}
% At the end of a Greek passage, we are going to issue the new command \cmd{\noibycustext}.
% In contrast to \cmd{\latintext}, it does not alter |\encodingdefault|.
% \begin{macrocode}
\DeclareRobustCommand{\noibycustext}{%
\fontencoding{\latinencoding}\fontfamily{\familydefault}\selectfont}
\addto\noextrasibycus{\noibycustext}
\ldf@finish{ibycus}
%</ibycus>
% \end{macrocode}
% Should we save and restore the actual family name,
% instead of simply forcing |\familydefault|?
%
% \subsection{The encoding definition file \texttt{lgienc.def}}
% \label{sec:lgienc}
% From v3.0 on, the Ibycus-encoded fonts are assigned the encoding LGI, even though
% there are currently no encoding-specific commands declared. Rationale:
% Future alternative font families with Ibycus encoding are using U already for other
% purposes such as non-alphabetic symbols. As usual, the encoding is declared in an
% external file.
% \begin{macrocode}
%<*lgienc>
\DeclareFontEncoding{LGI}{}{}
\DeclareFontSubstitution{LGI}{fib}{m}{n}
\DeclareErrorFont{LGI}{fib}{m}{n}{10}
%</lgienc>
% \end{macrocode}
%
%
% \subsection{The font definition file \texttt{lgifib.fd}}
% 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}
%<*lgifib>
\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}
% Now let's evaluate \cmd{\ibycus@scale} to determine the optional
% scaling parameter \cmd{\ibycus@@scale}, which will be applied in the
% font shape declarations:
% \begin{macrocode}
\expandafter\ifx\csname ibycus@scale\endcsname\relax
\let\ibycus@@scale\@empty
\else
\edef\ibycus@@scale{s*[\csname ibycus@scale\endcsname]}%
\fi
\DeclareFontFamily{LGI}{fib}{}
\DeclareFontShape{LGI}{fib}{m}{n}{<-> \ibycus@@scale fibr84}{}
\DeclareFontShape{LGI}{fib}{m}{sl}{<-> \ibycus@@scale fibo84}{}
\DeclareFontShape{LGI}{fib}{b}{n}{<-> \ibycus@@scale fibb84}{}
\DeclareFontShape{LGI}{fib}{m}{it}{<-> ssub * fib/m/sl}{}
\DeclareFontShape{LGI}{fib}{bx}{n}{<-> ssub * fib/b/n}{}
%</lgifib>
% \end{macrocode}
%
%
%
% \subsection{Notes for class and package writers}
% To change the font family used for Greek passages, redefine the
% macro \cmd{\ibycusdefault} accordingly. Macro packages should use |\def| rather
% than |\renewcommand|; thus, they can be loaded before as well as after
% \path{ibycus.ldf}.
%
% To make the command \cmd{\setgreekfontscale} work, font definition files for
% LGI-encoded font families must evaluate the macro \cmd{\ibycus@scale}
% in the same way as the above \path{lgifib.fd}.
%
% \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 \~}
%%
|