Teubner PDF
Teubner PDF
Contents
1 Introduction 2 Environments 3 Commands and symbols 4 Acknowledgements 5 Code 5.1 Preliminaries . . . . . . . 5.2 Compatibility with Latin fonts . . . . . . . . . . . . 5.3 Service macros . . . . . . 5.4 Extended accent denitions 5.5 Special accent macros . . 5.6 Some text commands . . . 5.7 Accent macros and glyph names . . . . . . . . . . . 5.8 Text philological symbols and macros . . . . . . . . 1 3 5 5 5 5 9 15 18 19 24 25 30
5.9 5.10 5.11 5.12 5.13 5.14 5.15 5.16 5.17 5.18 5.19
Greek, English, and German quotes . . . . . . . . Other philological symbols and macros . . . . . Ancient Greek monetary unit symbols . . . . . . . Another set of philological symbols and macros . Poetry environments and macros . . . . . . . . . . . Metrics symbols, macros and environmnets . . . . . Debugging commands . . Classical Greek numerals . Attic numerals . . . . . . First set of extended accent denitions . . . . . . Second set of extended accent denitions . . . . .
33 34 39 39 41 46 49 50 53 54 56
Abstract This extension package complements the greek option of the babel package so as to enable the use of the Lipsian1 fonts and to use several macros for inserting special annotations in the written text, as well as to typeset verses with special layout. Metric sequences may be dened and typeset by
le has version number v.3.4, last revised on 2012/09/17. here are called Lipsian fonts are a family of fonts that in Greece are called Lipsiakos; they are similar to the ones that were being used in the Teubner Printing Company of Lipsia from mid XIX century on.
1 What This
means of a companion font gmtr???? that follows the same conventions as the CB fonts that are normally used when the babel greek option is in force. Examples and lists of commands are available in the le teubner-doc.pdf which, as a regular pdf le, embeds all the necessary fonts and may be read on screen as well as printed on paper; beware, though, that the PostScript fonts that are being used in teubner-doc.pdf are not distributed with the package. While this documentation is being written the TEX-Live Team is trying to reduce the size of the distribution and one of the proposals is to reduce the number of Greek fonts distributed on TEX-Live; therefore it might be necessary that the users of this teubner package download the missing fonts directly from one of the ctan archives.
Introduction
Philologists in general have the necessity of using special alphabets and several special symbols in order to mark up their texts and to typeset them in a special way. Greek philology makes no exception, therefore I prepared this le and some extra fonts in order to complement what is already available with the greek option of the babel package. I must warmly thank Paolo Ciacchi of the University of Trieste who invited me in this adventure, since I know nothing about philology; he assisted me with all his competence, so that I could learn so many new things and I could appreciate the world of philologists. Paolo Ciacchis invitation arrived when I was almost nished with the design of the Lipsian font family; I was working on this new typeface after a kind request of Dimitri Filippou, with whom I already collaborated for other questions related to Greek typesetting. I warmly thank also Dimitri Filippou for the patience with which he revised every single glyph of the new typeface. Paolo Ciacchi added his constructive criticism to the typeface, especially for what concerns diacritical marks. At the end I think that the new typeface turned out pretty well thanks to both my friends. The Lipsian font, also called Leipzig or Lipsiakos in Greece, is one of the oblique fonts that used to be employed by the typesetters working in the German city of Leipzig, among which the Teubner Printing Company. This Companys classical works of ancient Greek poetry are considered among the best ever published. The name of this le and this extension package is in honor of that printing company. This package documentation does not contain any example written in Greek, because when you process this le it is very likely that you dont have the suitable Greek fonts and you must still download all or some of them. Therefore a companion le teubner-doc.pdf is included in this bundle where most, if not all, the new commands are documented and suitably shown. This package contains new environments and new commands; it presumes the user invokes it after declaring the greek option to the babel package; should he forget, this package will complain. But once the greek option is properly declared, this package veries that the polutonikogreek dialect is selected, or that the polutoniko attribute is set. This choice depends on the particular version of 2
the babel package, but should not concern the user; switching back and forth between classical Greek and some modern western language is performed in a transparent way; possibly there might be some problem switching from classical to modern spelling in Greek itself, but since in modern spelling the multiplicity of Greek diacritical marks is not forbidden, its the author choice to select classical or modern words, Lipsian or Didot fonts, polytonic or monotonic accentuation. The worst it can happen is that babel might use just one hyphenation pattern set, so that in one of the two Greek versions some words might turn out with the wrong hyphens. The CB Greek fonts, which have been available for some years now on ctan in the directory /tex-archive/fonts/greek/cb have been completed with the new les for the Lipsian fonts, and the metric symbols font gmtr????.*; the latter does not need a formal font denition le, because the necessary denitions are included in this package. All fonts are available also as Type 1 scalable fonts. In general, recent distributions of the TEX system already contain the necessary conguration to use the Type 1 font in one size, 10 pt, but, thanks scaling, these can be used at any size; this version of teubner is compatible with this reduced set. If optical sizes are desired for a more professional typesetting, the ctan archives contain also the cbgreek-full package, which includes also all the Type 1 fonts at the various standard (EC) sizes, plus other facilities that allow to use the CB fonts also in conjunction with the Latin Modern ones. The CB Greek fonts allow to input Greek text with a Latin keyboard and by employing the prex notation; with a Greek keyboard and le iso-8859-7.def it is possible to directly input Greek text with the monotonic spelling; if polytonic spelling is required I fear that the above le is of little help and that a Latin keyboard does the job without an excessive burden. Nevertheless there is a little point to observe; Lipsian fonts are very nice but show most kerning errors with more evidence than the traditional Didot Greek fonts. With the prex notation in force, kerning programs may result disabled and some diphthongs and some consonant-vowel combinations appear poorly matched when the second letter caries any diacritical mark. In order to avoid this feature, the accented vowels may be input by means of macros, that directly translate to the accented glyph, rather than invoking the ligature programs that are implied by the prex notation; reading a Greek text on the screen while editing the input .tex le when a Latin keyboard and such macros are used may be very strange, but authors get used to it, and agree that the eort is worth the result.
Environments
versi \verso
I apologize if I chose Italian names for verse environments; I wanted to use names very dierent from the corresponding English ones, but at the same time easily recognizable; after all versi is the plural of verso and therefore is the exact Italian translation of verses. If you feel more comfortable with Latin the alias environment names in Latin, versus, Versus, and VERSUS, are also available. The environment versi (versus) is used to typeset verses in line, without an
implicit end of line at the end of each verse; a vertical bar with a number on top of it marks the verse limit while allowing a numeric reference to a specic verse; the opening environment statement requires a string, a short text, in order to indent the verse lines the amount of this string width; the syntax is the following \begin{versi}{ string } verse \verso[ starting number ] verse \verso verse \verso verse ... \end{versi} where, of course, starting number is required only for the rst instance of \verso or when numbering must be restarted, for example after an ellipsis. A The environment Versi (Versus) is similar to the standard L TEX environment verse, except verse lines are numbered on multiples of 5; the opening statement requires the starting number as an optional argument; if this optional argument is not specied, the starting number is assumed to be 1. \begin{Versi}[ starting number ] verse \\ * [ vertical space ] verse \\ ... \end{Versi}
VERSI \SubVerso \NoSubVerso
Versi
The environment VERSI (VERSUS) allows for two verse enumerations; the main enumeration is identical to the one performed by the previous environment Versi, while the secondary enumeration is in smaller digits and normally numbers consecutive verses, except that it can be turned on and o; the verses that lack the secondary enumeration are indented by moving them to the right. \begin{VERSI}[ starting principal number ] verse \\ * [ vertical space ] \SubVerso[ starting secondary number ] verse \\ * [ vertical space ] ... \NoSubVerso verse \\ * [ vertical space ] ... \end{VERSI} where if starting principal number is missing, 1 is assumed, while if starting secondary number is missing, the enumeration is continued from the next available integer. Of course starting secondary number is used again when the secondary enumeration must be restarted; there are no means to restart the principal enumeration. The previous environments accept verses in any language and in any alphabet, the one that is in force before opening the environment; the language and, even less, the alphabet cannot be globally changed within the above environments; if such a change is performed, it is valid only for one verse, or for the remaining fraction of the verse after the language or font change. This means, among the 4
bracedmetrics
other things, that if the default alphabet is the one that shows the metric symbols, the above environments may be used to display metric verses, that is the pattern of long, short or ancipital symbols, together with any other metric symbol so as to display the metrics without disturbing the written text; when doing this metric typesetting, it may happen that some verse patterns exhibit some variants; in this case the bracedmetrics environment comes handy, because it can display such variants in separate lines but grouped with a large right brace; some commands allow to roughly align these variants, so as to allow to nest several such environments as if they were single blocks of metric symbols. The argument of the opening statement species the width of the block so as to align properly all the symbols even in nested environments. \begin{bracedmetrics}{ length } metric pattern \\ metric pattern \\ ... \end{bracedmetrics}
\verseskip \Hfill
Within the metric pattern it is possible to ush right the symbols by prexing the whole string with a \Hfill command; the length may be specied as an integer multiple of a long symbol by means of \verseskip{ number } The macro \verseskip can be used also within metric pattern in order to space out metric symbols.
\newmetrics
This package denes a lot of commands for inserting special signs in the middle of regular text, for marking zeugmas and synizeses, for putting unusual accents on any symbol, for inserting special parentheses that are used by philologists for marking blocks of letters or blocks of text. I suggest that the user consults the documentation le teubner-doc.pdf for a complete list of commands and symbols. Here it might be useful to describe a command for dening metric sequences, so as to shorten the denition of metric verses; this new command is \newmetrics and may be used for the denition of new commands whose name may start with A one digit : precisely this digit may be one of 2, 3, 4. Even if L TEX does not allow macros to contain both digits and letters, other service macros have been dened so as to handle these special control sequences even if they start with one digit strictly lower than 5. The syntax is: \newmetrics{ control sequence }{ definition } where denition consists in general of a sequence of metric commands such as \longa, \brevis, \anceps, etc.
Acknowledgements
I must thank with gratitude Paolo Ciacchi that urged me to prepare this extension le in order to help him typeset his master thesis of philological type in classical Greek. I am pleased to thank Gnter Milde who wrote a denition le for accessing the LGR encoded fonts in order to fetch the accented glyphs; I kindly gave me permission to use his macros, that I adapted to the conventions used within this le. These macros are saved into the denition le LGRaccent-glyph.def, so that it can be used also without the teubner package, fore example for typesetting without setting the polytoniko language attribute. I got some ideas also from a paper that Werner Lemberg published on Eutypon, the magazine of the Hellenic Friends of TEX, where he discussed in a constructive critical way the problems connected with the LGR encoded fonts and the Unicode encoding.
5
5.1
Code
Preliminaries
In order to use the PostScript pfb fonts (CM, EC, and CB) it is necessary to know A A if we are dealing with L TEX or pdfL TEX; this was necessary because apparently the pfb math scalable fonts derived from the METAFONT counterparts do not have exactly the same eective dimensions; this is why the zeugma and the synizesis signs have to be corrected when the pfb fonts are used; with these, in facts, the black leader that joins the curved extremities appeared a little too fat and did not join exactly the left mark. Recently, apparently, the fonts have been corrected and this trick is not necessary any more. Nevertheless we dene a new boolean that copes with the fact that sin 2007 the TEX engine is pdftex even when DVI output is sought:
1 2
When teubner.sty is input the language Greek must have been already dened; otherwise an error message is issued and processing is terminated.
\ifx\captionsgreek\undefined \PackageError{teubner}{Greek language unknown!\MessageBreak 5 I am not going to use Lipsian fonts and Scholars signs\MessageBreak 6 if Greek is unknown.\MessageBreak 7 Use the babel package with the \texttt{greek} option.\MessageBreak 8 Type X <return> to exit.}% 9 {Type X <return> to exit.} 10 \fi
3 4
If this test is passed, this means that not only the greek option to the babel package is set, but also that all the babel machinery is available. Since teubner.sty accepts some options it is necessary to provide their definitions; in particular the \or control sequence conicts with the \or primitive 6
command used within the syntax of \ifcase2 ; \oR is a little exception since all the other accent-vowel macros contain only lowercase letters. The point is that accent vowel sequences that directly access the accented glyph are made up as such: \ base character first diacritic second diacritic third diacritic where first diacritic is d or r or s for diaeresis, rough or smooth breadth second diacritic is c or a or g for circumex or acute or grave third diacritic is i for iota subscript or adscript Evidently none of the diacritical marks is compulsory, but at least one must be present; if more than one is present it must be given in that sequence. Since \oR means omicron with rough breath, it is not very important that it is declared with the standard sequence <o or with \oR or with \<o, because it never falls after another letter, so that it never breaks any ligature or kerning command. The command is there just for completeness. More or less the same is try with the \og sequence; it fails to work correctly when the main language is French and the french option to the babel package is in force; matter of facts, \og conicts with the homonymous command dened by that option with the meaning of ouvrir guillemets; therefore its necessary to use either the plain sequence o or the extended accent macro \o. At the same time since all accent combinations are dened as text commands, A in L TEX jargon, when their commands are followed by a vowel (or r) they dene a text symbol i.e. they fetch directly the glyph of the accented character; therefore <o, \oR and \r{o} are all equivalent (at the beginning of a word where omicron with rough breath is the only place where you can nd it). See more on this point in the sequel. Nevertheless, while these glyph name macros are dened by default, it is possible to do without by specifying the option NoGlyphNames (default; you can specify the option GlyphNames for turning on these macro names. In this case the same result is more comfortably obtained by using the extended accent macros whose behaviour is specied in the denition le LGRaccent-glyph.def. Another unusual option is set up for being used with non standard TEX system fonts; we have noticed that the Lipsian fonts appear a little too light when used together with the Times or the Palatino fonts; probably this is true also with other PostScript fonts. In this case the user might specify the option boldLipsian and the Lipsian fonts used in medium series will be substituted with those of the semibold one. At the same time, from July 2005 and for a few years, the full collection of the complete size set of the CB fonts has not been available any more as the default TEX system set up; only the 10pt size were available unless the cbgreek-full
2 With version 2002/07/18 v.1.0d this has been eliminated; the option remains for compatibility with older versions, but the only legal command is now \oR.
font package is loaded; for this reason a new option is needed in order to instruct teubner.sty to use the specic le type1ec.sty dated at least 2002/09/07, so as to scale up or down all the EC and CB fonts from an original 10 pt size. In order that the 10pt plays its role correctly, it is convenient, if not compulsory, to require rst the babel package, then the teubner one with the option 10pt, then all other packages required for a specic document, in particular the fontenc one if the T1 encoding is requested. This kludge is necessary for all fonts that have description les that use the \EC@family command for describing the available shapes and sizes; in practice this happens only with the EC fonts, even when the cm-super scalable implementation is used. For using the Latin Modern fonts (LM) new specic font description les for the CB fonts are part of the babel package, so this problem does not exist; when using other fonts, such as the TX, PX, ZE, . . . , other kludges are necessary, because their font family names are dierent from those normally used with TEX: cmr for serifed fonts, cmss for sanserif ones, and cmtt for monospaced ones.3 Notice that when using, for example, the TX fonts and no kludge is available, the CB fonts are loaded only as the error font, since the TX fonts have dierent family names than the CB ones; in many cases this might pass un-noticed, but if real Greek text in dierent shapes and series has to be typeset, the unaware typesetter might get crazy trying to force shape and series changes in the Greek text; it would not be impossible, but it would be very, very boring. In any case see in the sequel for the implemented kludges in order to run successful compilations also with non standard TEX system fonts.
\newif\ifor\orfalse % Compatibility with older versions \DeclareOption{or}{\relax} 13 \newif\ifboldLipsian \boldLipsianfalse 14 \DeclareOption{boldLipsian}{\boldLipsiantrue} 15 \newif\ifonesizetypeone 16 \DeclareOption{10pt}{\onesizetypeonetrue} 17 \newif\ifGlyphNames \GlyphNamesfalse 18 \DeclareOption{NoGlyphNames}{\GlyphNamesfalse} 19 \DeclareOption{GlyphNames}{\GlyphNamestrue} 20 \ProcessOptions*
11 12
In the sequel we frequently use the acronym for the Greek font encoding; we hope it will eventually become GR or, following the actual 256 glyph font encodings, T7 or X74 . Meanwhile the acronym is LGR, so wed better dene a symbolic name,
the Latin Modern fonts have dierent family names, but, due to their importance, specic font description les have been added to the babel package. The LM fonts are more comfortable than the EC ones, when scalable fonts are to be used, because they are continuously scalable and download into the produced les less font les than the EC o cm-super ones. Unless specically requested, the LM fonts should always be preferred to the EC and cm-super ones. When using the LM fonts, its better to use the full collection of the CB fonts, although the CB font description les are compatible with the single 10 pt size. 4 Apparently T7 has been chosen to dene an encoding where the rst 128 glyphs are the standard OT1 encoded Latin fonts, and the second group again of 128 glyphs contains the Greek characters; therefore, since polytonic spelling requires more than 128 glyphs, the extended encoding X7 will probably become the one applicable to the whole set of the CB fonts.
3 Even
\def\GRencoding@name{LGR}
Now the default Olga Greek fonts, used for rendering the Greek italic shape are an alternative with the Lipsian ones. If the 10pt option was specied it is necessary to load also the package texttttype1ec.sty. In any case we load also packages graphicx and ifthen that shall be useful for some commands.
\ifonesizetypeone \RequirePackage[10pt]{type1ec}[2002/09/07] 24 \fi 25 \RequirePackage{graphicx} 26 \RequirePackage{ifthen}
22 23
\metricsfont
Similarly the metric symbol font is declared together with a command for selecting it:
\DeclareFontFamily{U}{mtr}{\hyphenchar\font\m@ne} %\EC@family{U}{mtr}{m}{n}{gmtr} 29 \ifonesizetypeone 30 \DeclareFontShape{U}{mtr}{m}{n}{<-> gmtr1000}{}% 31 \else 32 \DeclareFontShape{U}{mtr}{m}{n}{% 33 <-5.5> gmtr0500 <5.5-6.5> gmtr0600 34 <6.5-7.5> gmtr0700 <7.5-8.5> gmtr0800 35 <8.5-9.5> gmtr0900 <9.5-11> gmtr1000 36 <11-15> gmtr1200 <15-> gmtr1728}{}% 37 \fi 38 \DeclareFontShape{U}{mtr}{m}{it}{<->ssub*mtr/m/n}{}% 39 \DeclareFontShape{U}{mtr}{b}{it}{<->ssub*mtr/m/n}{}% 40 \DeclareFontShape{U}{mtr}{b}{n}{<->ssub*mtr/m/n}{}% 41 \newcommand*\metricsfont{\fontencoding{U}\fontfamily{mtr}\upshape}
27 28
Next we require the package for extensible math fonts; it might be strange to use extensible math fonts in Greek philology, but a certain command must be picked up from such fonts, with the assurance that it changes size together with the current font size.
42
\RequirePackage{exscale}
Some macros are necessary to switch languages; such macros must be independent (at least for now) from the particular babel version, whether it be version 3.6, 3.7, or 3.8; in the former the concept of language attribute is unknown, while the latter recognizes varieties of the same language by the attribute setting. Such macros, besides being as robust as possible, must provide the alphabet changes as required.
\GreekName
During the language switching operations \GreekName distinguishes the dialect or the main language whose attribute gets set and, evidently, becomes eective when the main language greek is in force.
43 44
\ifx\languageattribute\undefined \def\GreekName{polutonikogreek}%
5.2
\previouslanguage \previousencoding
The default language is dened as the previous language; similarly the default encoding is dened as the previous encoding; these are the language and the encoding in force when the document starts; this is why such macros are dened at the beginning of the document. At the same time we assure that if the CM (or EC) or the LM fonts are the default ones, nothing special is done, while if the default fonts are, say, the TX ones, they are correctly restored, but the CM families are used for the CB ones. The font macro \substitutefontfamily is already present in the babel kernel; it copes only with the standard families, series and shapes, therefore it does not consider the Lipsian shape and its series. I had to redene it together with a new conditional macro in order to do the same job as the original one but taking into consideration also the Lipsian shape; the purpose of this macro is to write in the working directory a number of font description les that refer to the LGR Greek encoding, but have the names of the Latin font families; such font description les, simply substitute these non existent encoding-family series and shapes with the existing series and shapes of any other LGR encoded Greek font, in particular the CB ones. By issuing a command such as: \ifFamily{pxr}{cmr} an association is made with all the series and shapes of the Palatino serifed fonts to the corresponding CB serifed series and shapes; therefore when a language shift changes the default encoding from, say, T1 to LGR the font family LGR+pxr is mapped to the font family LGR+cmr and everything is supposed to work ne; when another language change resets the encoding to T1, the original Latin script is used again. The redened \substitutefontfamily macro is as such:
48 49 50 51
\substitutefontfamily \ifLipsian
\newif\ifLipsian
\providecommand*\substitutefontfamily{}% \renewcommand*\substitutefontfamily[3]{{% 52 \edef\@tempA{#1#2.fd}% 53 \lowercase\expandafter{\expandafter\def\expandafter\@tempA\expandafter{\@tempA}}% 54 \expandafter\IfFileExists\expandafter{\@tempA}{}{% 55 \immediate\openout15=\@tempA 56 \typeout{Writing file #1#2.fd} 57 \immediate\write15{% 58 \string\ProvidesFile{#1#2.fd}^^J 59 [\the\year/\two@digits{\the\month}/\two@digits{\the\day} 60 \space generated font description file]^^J 61 \string\DeclareFontFamily{#1}{#2}{}^^J 62 \string\DeclareFontShape{#1}{#2}{m}{n}{<->ssub * #3/m/n}{}^^J 63 \string\DeclareFontShape{#1}{#2}{m}{it}{<->ssub * #3/m/it}{}^^J
10
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
\string\DeclareFontShape{#1}{#2}{m}{sl}{<->ssub * #3/m/sl}{}^^J \string\DeclareFontShape{#1}{#2}{m}{sc}{<->ssub * #3/m/sc}{}^^J \string\DeclareFontShape{#1}{#2}{b}{n}{<->ssub * #3/bx/n}{}^^J \string\DeclareFontShape{#1}{#2}{b}{it}{<->ssub * #3/bx/it}{}^^J \string\DeclareFontShape{#1}{#2}{b}{sl}{<->ssub * #3/bx/sl}{}^^J \string\DeclareFontShape{#1}{#2}{b}{sc}{<->ssub * #3/bx/sc}{}^^J \string\DeclareFontShape{#1}{#2}{bx}{n}{<->ssub * #3/bx/n}{}^^J \string\DeclareFontShape{#1}{#2}{bx}{it}{<->ssub * #3/bx/it}{}^^J \string\DeclareFontShape{#1}{#2}{bx}{sl}{<->ssub * #3/bx/sl}{}^^J \string\DeclareFontShape{#1}{#2}{bx}{sc}{<->ssub * #3/bx/sc}{}^^J }% \ifLipsian \immediate\write15{% \string\DeclareFontShape{#1}{#2}{m}{li}{<->ssub * #3/m/li}{}^^J %<- Lipsian \string\DeclareFontShape{#1}{#2}{b}{li}{<->ssub * #3/b/li}{}^^J %<- Lipsian \string\DeclareFontShape{#1}{#2}{bx}{li}{<->ssub * #3/bx/li}{}^^J %<-Lipsian \string\DeclareFontShape{#1}{#2}{m}{ui}{<->ssub * #3/m/ui}{}^^J %<- upright Olga \string\DeclareFontShape{#1}{#2}{b}{ui}{<->ssub * #3/m/ui}{}^^J %<- upright Olga \string\DeclareFontShape{#1}{#2}{bx}{ui}{<->ssub * #3/bx/ui}{}^^J%<-upright Olga \string\DeclareFontShape{#1}{#2}{m}{rs}{<->ssub * #3/m/rs}{}^^J %<-serifed lc \string\DeclareFontShape{#1}{#2}{b}{rs}{<->ssub * #3/m/rs}{}^^J %<-serifed lc \string\DeclareFontShape{#1}{#2}{bx}{rs}{<->ssub * #3/bx/rs}{}^^J%<-serifed lc }% \global\Lipsianfalse\fi \closeout15}% }}
Notice that together with the Lipsian fonts the upright italics (Olga) and upright serifed lowercase alphabets are dened. In a while there are the denition for selecting these shapes. Of course you are not obliged to use them, but in case you wanted. . . These results are obtained by means of the following macros.
\ifCMLM \ifFamily
The \ifCMLM processes the necessary test in order to set the auxiliary macro \n@xt to be an alias to \iftrue or iffalse depending on the fact that the CM (or EC) fonts or the LM fonts are the default Latin ones, in this case it sets the \n@xt macro equivalent to \iftrue, otherwise it sets it to \iffalse. In order to succeed, it requires to analyze the rst two letters of the default family name; if these letters form one of the sequences cm or lm, the CM or LM fonts have been loaded, otherwise some other fonts are in force. We need therefore a macro with delimited arguments in order to extract the rst two letters of the family name.
\def\ifCMLM#1#2#3!{\edef\f@milyprefix{#1#2}% \ifthenelse{\(\equal{\f@milyprefix}{cm}\OR\equal{\f@milyprefix}{lm}\)}% 93 {\let\n@xt\iftrue}{\def\f@milyprefix{cmr}\let\n@xt\iffalse}\n@xt}
91 92 94
The other macro \ifFamily uses the previous macro and according to the test result, possibly runs the \substitutefontfamily macro that, if necessary, creates the description le that map the specied family font description le to the second 11
specied font family, both connected to the LGR encoding. Therefore, after these A font denition les exist, L TEX can fetch the Greek fonts by way of substitution. Lets explain again: if you specify
\Lipsiantrue\ifFamily{pxr}{lmr}
you state that you want to run the macro on the serifed Palatino font family, by associating the pxr family to the lmr one5 ; by specifying \Lipsiantrue you state that you want to create entries also for the Lipsian series and shape; The macro provides to reset \Lipsianfalse in order to avoid that other calls of that macro on non serifed or monospaced fonts try to create entries that in any case do not exist: the Lipsian font comes only as a serifed font! In this way, if you are using Palatino fonts through the pxfonts package, the teubner macros provide to create the necessary font description les so that while you are typesetting in medium normal Latin Palatino and you switch to Greek, the built in macros change the encoding to LGR; the LGR Palatino serifed medium normal Greek font does not exist, but that family, series and shape are mapped by the font description le to the corresponding LGR encoded Latin Modern CB fonts in medium series and normal shape, and typesetting goes on with the right Greek fonts.
95 96 97
\newcommand*\ifFamily[2]{% \expandafter\ifCMLM#1!\else\substitutefontfamily{LGR}{#1}{#2}\fi}
You dont actually need to use that macro for the Times or the Palatino eXtended fonts loaded by means of the corresponding packages txfonts or pxfonts, because a hook is set up so that at begin document the loading of those packages is tested, and if the test is true, the necessary font description les are possibly created. If you load the Times or the Palatino or any other non standard font by means of other packages, its up to you to issue the \substitutefontfamily macro right after calling that font package and by using the correct family names; similarly you might substitute the new Latin font family names to other Greek font family names, if you have other fonts available. At the same time at begin document we memorize the name and encoding of the Latin font used for the default language, so that when returning to Latin font typesetting after Greek font typesetting, the proper language typesetting rules and encoding are restored.
\AtBeginDocument{% \@ifpackageloaded{pxfonts}{\typeout{Palatino fonts loaded}% 100 \Lipsiantrue\ifFamily{pxr}{cmr}\Lipsianfalse 101 \ifFamily{pxss}{cmss}\ifFamily{pxtt}{cmtt}}{\relax}}
98 99 102
12
106
Nevertheless all this requires a minimum of attention in specifying the options for the babel package and in the order extensions packages are read in. The teubner.sty package should be read after any other package that sets or resets the Latin font encoding; for example if the T1 encoding is selected as the default one, in place of the OT1 encoding, then this choice must be made before this package is read in. Similarly when the babel options are specied, remember that the last language name becomes the default language at begin document; never specify greek as the last language option!
\Lipsiakostext \lishape \textli
\lishape is the normal declaration, modeled on the other similar macros in the A L TEX kernel, made up to chose the Lipsian shape. Nevertheless since it is a light character, if it must blend well with the other PostScript fonts, not only the CM and LM, but also the other ones available for typesetting with the TEX system, it is necessary to chose the b (bold) series in place of the m (medium) one, while maintaining the bx (bold extended) series when the other fonts are set with the blacker and larger series. This is why the \lishape declaration is a little more complicate than normal, since it has to test the value of the current series. The text command \textli matches the similar commands for Latin fonts. But the \lishape declaration is used also within the more complicated macros for declaring or setting the Lipsian font. \Lipsiakostext is a declaration stating that from now on typesetting will be done with the Lipsian fonts; notice that the encoding and the language name in force before this declaration are memorized, then the current Greek version is selected; the \let\~\Perispomeni is required because swithching on and o may reset the active tilde and connected macros denitions. \~ in Greek must set the circumex accent, so we make sure that this really occurs.
\DeclareRobustCommand{\lishape}{% \not@math@alphabet\lishape\relax 112 \ifthenelse{\equal{\f@encoding}{\GRencoding@name}}{% 113 \ifboldLipsian 114 \ifthenelse{\equal{\f@series}{m}}% 115 {\fontseries{b}\fontshape{li}\rmfamily}% 116 {\fontshape{li}\rmfamily}\else 117 \fontshape{li}\rmfamily\fi}% 118 {\fontshape{it}\selectfont}}%
110 111 119
\textLipsias
\textLipsias is a command that typesets its argument with the \Lipsiakostext A declaration in force. The L TEX command declaration used here makes sure that 13
possible italic corrections are taken into account; hte actual font switching is made through the same \Lipsiakostext declaration, but the inner working maintain local this declaration, so non grouping is explicitly required; for this reason we suggest to use this text command rather than the font declaration.
125 126
\DeclareTextFontCommand{\textLipsias}{\Lipsiakostext}
\NoLipsiakostext
\NoLipsiakostext is the opposite declaration that undoes everything that was done with \Lipsiakostext. Probably it is superuous, but it has been asked for. If \Lipsiakostext is delimited within a scope by means of an explicit group or an environment, it stops its eectiveness with the end of its scope. It is worth noting that, in order to delimit within a scope the action of this and of the other declarations, it is possible to use them as environments with the same name without the backslash. for example one might input in the source le something as: \begin{Lipsiakostext} Greek text to be typeset with the Lipsian font \end{Lipsiakostext} Remember also that these Greek text declarations may be issued while typesetting with Latin fonts; they provide also the language switch, so that they do not require the typesetter to rst switch to Greek and then to choose a certain Greek font.
\DeclareRobustCommand\NoLipsiakostext{% \ifthenelse{\equal{\f@series}{b}}{\fontseries{m}}{\relax}% 129 \fontshape{n}\selectfont 130 \expandafter\select@language\expandafter{\previouslanguage}% 131 \rmfamily\bbl@activate{~}}
127 128 132
\textDidot
\textDidot is a similar macro where the common upright Greek characters are selected; it goes by itself that if \textit is specied within the \textDidot argument, the typesetting is or becomes identical with what one can obtain with the \textLipsias command.
\DeclareRobustCommand\textDidot[1]{{% \expandafter\select@language\expandafter{\GreekName}% 135 \let\~\Perispomeni\let~\greek@tilde 136 \fontencoding{LGR}\rmfamily#1}}
133 134 137
\textlatin
\textlatin is a redenition of the standard babel macro that is adapted to the present situation, where it may be called behind the scenes in certain situations that are beyond the control of the typesetter. Therefore every precaution is taken in order to be sure that the composition of the command argument is really done with the default encoding and font families, but maintaining the current series and shape; of course, if the shape is that related to the Lipsian font, then the italic shape is temporarily restored (local denition). Moreover, with the (default) Latin 14
fonts the tilde is restored to a non breaking space by simly making it an active character.
\DeclareRobustCommand\textlatin[1]{\edef\externalencoding{\f@encoding}{% \def\itdefault{it}\def\@tempA{li}\ifx\@tempA\f@shape\def\f@shape{it}\fi% 140 \expandafter\select@language\expandafter{\previouslanguage}% 141 \fontencoding{\previousencoding}% 142 \fontfamily{\rmdefault}\selectfont 143 \bbl@activate{~}#1}% 144 \expandafter\fontencoding\expandafter{\externalencoding}\rmfamily}
138 139 145
The other switching font macros for using the other shapes that are available with the CB fonts are working only when typesetting in Greek and the default encoding is therefore LGR.
\DeclareRobustCommand\uishape{% \ifthenelse{\equal{\f@encoding}{\GRencoding@name}}% 148 {\fontshape{ui}\selectfont}{\relax}} 149 \DeclareTextFontCommand{\textui}{\uishape}
146 147 150
5.3
Service macros
\lift@accent
The rst lift accent macro just puts an accent over a letter, without inserting any space between them; the rst argument is the accent code (decimal, hexadecimal or octal; I prefer decimal), while the second argument is the letter any letter, even if it is not a vowel!
\newcommand*\lift@accent[2]{\leavevmode {\edef\slant@{\strip@pt\fontdimen1\font}% 158 \dimen@=\z@\setbox\z@\hbox{\char#1}\advance\[email protected]\wd\z@
156 157
15
\setbox\tw@\hbox{i}\setbox\z@\hbox{#2}% \ifdim\wd\z@>\wd\tw@\advance\dimen@ .5\wd\z@ 161 \else\advance\dimen@ .3\wd\z@\fi 162 \ifx#2h\advance\[email protected]\wd\z@\fi 163 \@tempdima\ht\z@\advance\@tempdima-1ex\relax 164 \advance\dimen@\slant@\@tempdima 165 \raise\@tempdima\hbox to\z@{\kern\dimen@\char#1\relax\hss}\box\z@}}
159 160 166
\Lift@accent
The second lift accent macro behaves as the rst one except it interposes a small vertical distance between the accent and the letter:
\newcommand*\Lift@accent[2]{\leavevmode {\edef\slant@{\strip@pt\fontdimen1\font}% 169 \dimen@=\z@\setbox\z@\hbox{\char#1}\advance\[email protected]\wd\z@ 170 \setbox\tw@\hbox{i}\setbox\z@\hbox{#2}% 171 \ifdim\wd\z@>\wd\tw@\advance\dimen@ .5\wd\z@ 172 \else\advance\dimen@ .3\wd\z@\fi 173 \ifx#2a\advance\[email protected]\wd\z@\fi 174 \ifx#2h\advance\[email protected]\wd\z@\fi 175 \@tempdima\ht\z@\advance\@tempdima-1ex\advance\@tempdima.1ex\relax 176 \advance\dimen@\slant@\@tempdima 177 \raise\@tempdima\hbox to\z@{\kern\dimen@\char#1\relax\hss}\box\z@}}
167 168 178
\LIFT@accent
The third lift accent macro behaves as the rst one, except it interposes a specied vertical space between the letter and the accent; this space is specied as the second argument:
\newcommand*\LIFT@accent[3]{\leavevmode {\edef\slant@{\strip@pt\fontdimen1\font}% 181 \dimen@=\z@\setbox\z@\hbox{\char#1}\advance\[email protected]\wd\z@ 182 \setbox\tw@\hbox{i}\setbox\z@\hbox{#3}% 183 \ifdim\wd\z@>\wd\tw@\advance\dimen@ .5\wd\z@ 184 \else\advance\dimen@ .3\wd\z@\fi 185 \ifx#2a\advance\[email protected]\wd\z@\fi 186 \ifx#2h\advance\[email protected]\wd\z@\fi 187 \@tempdima\ht\z@\advance\@tempdima-1ex\relax 188 \def\@tempA{#2}\ifx\@tempA\undefined\else 189 \advance\@tempdima#2\fi\let\@tempA\undefined 190 \advance\dimen@\slant@\@tempdima 191 \raise\@tempdima\hbox to\z@{\kern\dimen@\char#1\relax\hss}\box\z@}}
179 180 192
All these macros will be used in subsequent put accent macros, that will stack also several accents one above the other; the necessity arises for example when the macron or breve diacritical marks have to be put over accented letters; according to typographical practice the accents must go over the macron or the breve. In a similar way philologists often must use other diacritical marks in addition to the traditional Greek ones, therefore these macros will be used, for
16
example, for setting the Scandinavian ring (from a Latin font) over a Greek letter (from a Greek font).
\cap@
The rst such unusual diacritical mark is a small cap, a small upside down breve sign, that is in position 1 of the Greek font table.
\DeclareRobustCommand{\cap@}[1]{\leavevmode {\edef\slant@{\strip@pt\fontdimen1\font}% 195 \setbox\tw@\hbox{\fontencoding{\GRencoding@name}\selectfont 196 \char1}\[email protected]\wd\tw@ 197 \setbox\z@\hbox{#1}% 198 \advance\dimen@ .5\wd\z@ 199 \@tempdima\ht\z@\advance\@tempdima.55ex\relax 200 \advance\dimen@\slant@\@tempdima 201 \ifx\cf@encoding\GRencoding@name\else 202 \ifx#1k\advance\[email protected]\wd\tw@\fi\fi 203 \raise\@tempdima\hbox to\z@{\kern\dimen@\box\tw@\relax\hss}\box\z@}}
193 194 204
The \ifx\cf@encoding\GRencoding@name conditional construct shows that this macro behaves dierently with dierent font encodings; the following \ifx#1k checks the argument against the Greek letter kappa, which shows very clearly that these macros operate on any letter, not only on vowels.
\cap
By means of the above \cap@ macro we can dene three equivalent commands to be used either when the Greek encoding is in force, or when one of the Latin encodings is in force:
\DeclareTextCommand{\cap}{\GRencoding@name}{\cap@} \DeclareTextCommand{\cap}{OT1}{\cap@} 207 \DeclareTextCommand{\cap}{T1}{\cap@}
205 206 208
Probably one denition would be sucient, but on one side the presence of three encoding dependent macros are the remains of initial works, while on the other side they prevent to use these macros with encodings for which the macro might not work well, because it was not tested with them.
\cap@cedilla
Similarly a small cap can be put under another letter as it was a cedilla; for this task another macro is dened, which makes use of the same glyph in position 1 in the Greek font table:
\newcommand*\cap@cedilla[1]{\leavevmode {\setbox4\hbox{\fontencoding{\GRencoding@name}\selectfont\char1}% 211 \[email protected]\wd4 212 \setbox\z@\hbox{#1}% 213 \ifx\cf@encoding\GRencoding@name 214 \ifx#1i\advance\dimen@ .65\wd\z@\else\advance\dimen@ .5\wd\z@\fi 215 \else 216 \ifx#1i\advance\dimen@ .55\wd\z@\else\advance\dimen@ .5\wd\z@\fi 217 \fi 218 \hbox to\z@{\kern\dimen@\box4\hss}\unhbox\z@}}
209 210 219
17
\ring@cedilla
Another cedilla like diacritical mark is the Scandinavian ring put under a letter; the ring is taken from the metrics font, so its slot position does not depend on the various Latin encodings; the correct positioning requires careful examination of the letter under which it is to be placed, distinguishing the Greek from the Latin encodings:
\newcommand*\ring@cedilla[1]{\leavevmode {\setbox4\hbox{\metricsfont\char26}% 222 \edef\slant@{\strip@pt\fontdimen1\font}% 223 \[email protected]\wd4\ifdim\slant@\p@>\z@\advance\[email protected]\fi 224 \setbox\z@\hbox{#1}% 225 \ifx\cf@encoding\GRencoding@name 226 \advance\dimen@ .45\wd\z@ 227 \ifx#1h\advance\[email protected]\wd\z@\fi 228 \ifx#1a\advance\[email protected]\wd\z@\fi 229 \ifx#1o\advance\[email protected]\wd\z@\fi 230 \ifx#1u\advance\dimen@+.07\wd\z@\fi 231 \ifx#1w\advance\dimen@+.03\wd\z@\fi 232 \else 233 \ifx#1i\advance\[email protected]\wd\z@\else 234 \ifx#1r\advance\[email protected]\wd\z@\else 235 \ifx#1o\advance\[email protected]\wd\z@\else 236 \advance\[email protected]\wd\z@ 237 \fi\fi\fi 238 \fi 239 \hbox to\z@{\kern\dimen@\box4\hss}\unhbox\z@}}
220 221 240
\dot@cedilla
A Even the standard L TEX macro dot must be redened with a cedilla like macro, so as to make use of a special dot from the metric symbols font:
\newcommand*\dot@cedilla[1]{\leavevmode {\setbox4\hbox{\metricsfont\char27}% 243 \[email protected]\wd4 244 \setbox\tw@\hbox{i}\setbox\z@\hbox{#1}% 245 \ifx\cf@encoding\GRencoding@name 246 \advance\dimen@ .5\wd\z@ 247 \ifx#1h\advance\[email protected]\wd\z@\fi 248 \else 249 \ifdim\wd\z@>\wd\tw@\advance\[email protected]\wd\z@ 250 \else\advance\[email protected]\wd\tw@\fi 251 \fi 252 \setbox\tw@\hbox{o}\ifdim\wd\z@=\wd\tw@\advance\[email protected]\wd\z@\fi 253 \hbox to\z@{\kern\dimen@\box4\hss}\unhbox\z@}}
241 242 254
\tie@cedilla
A L TEX has the macro \t for placing a tie over two letters; philologists require also a tie under two letters; this is why another cedilla like macro is needed:
18
\setbox\tw@\hbox{i}\setbox\z@\hbox{#1}% \ifx\cf@encoding\GRencoding@name 260 \advance\[email protected]\wd\z@ 261 \ifx#1h\advance\[email protected]\wd\z@\fi 262 \ifx#1u\advance\[email protected]\wd\z@\fi 263 \else 264 \ifdim\wd\z@>\wd\tw@\advance\dimen@ .55\wd\z@ 265 \else\advance\dimen@ .5\wd\tw@\fi 266 \fi 267 \setbox\tw@\hbox{o}\ifdim\wd\z@=\wd\tw@\advance\[email protected]\wd\z@\fi 268 \hbox to\z@{\kern\dimen@\box4\hss}\unhbox\z@}}
258 259 269
5.4
We will use those service macros in the denition of several accent like macros that keep all the intricacies away from the user. Meanwhile we input from a separate le LGRaccent-glyph.def a whole set of extended accent macros slightly adapted A from those contained in Gnter Mildes denition le. In particular the L TEX kernel macros are used in order to declare accents, composite glyphs, composite commands, and the like; these are used as the default denitions; afterwards other denitions will be given that work when these composite macros dont work. In other words, while \~ and u in Greek form the composite glyph upsilon with circumex that exists in the Greek font table, the same macro \~ and the letter k produce the superposition of a circumex on top of a kappa glyph, since this glyph does not exist in the Greek font table. Notice that all these declarations are restricted to the Greek font encoding so they are usable only when such encoding is in force. See the teubner-doc.pdf le for more details concerning the usefulness of the extended accent macros vs. the ligature mechanism.
5.5
Now we come back to the accent like and cedilla like general macros we dened above, and that will be extensively used in the following denitions. Note that for what the circumex is concerned, when teubner is in eect it is not dened as an active character and does not work as a non breaking space. The command \~ and its equivalent \GRcirc is just an accent macro; how do you put a non A breaking space in a Greek context? By simply using the L TEX kernel macro \nobreakspace; when typesetting with non-Greek fonts the ~ is certainly handy to insert a non breaking space (a tie), but for polytonic Greek spelling in the past 15 years or so the Greek language denition le has always used the ~ sign a a letter, not as an active character. If you look in the babel package documentation related to the Greek language, you nd that for what concerns the ~ with polytonic spelling a number of dirty tricks have been used, but nothing has been done to replace the tie function of this character when typesetting in languages that use the Latin script; the only action related to this point has been to redene the kernel macros for typesetting gure and table captions so as to substitute the ~ 19
character with its explicit denition \nobreakspace. It is necessary to do the same when this package is used, although a shorter command \nbs is provided in order to simplify the input keying.
\let\nbs\nobreakspace % \end{macrocode 272 % 273 % Before defining the Greek accents with the extended macros input with the 274 % |LGRaccents-glyphs.def| file, we have to define the accent supersitioning macros that 275 % with \pack{teubner} allow to stack from one to more accent over the base letter, 276 % taking into account the slant of the font from which the base letter is taken. 277 % Notice that these macros allow to set an accent on any base latter, even if that 278 % might be meaningless. At the same time we redefine the standard macros so as let 279 % them do the same work when the LGR encoding is not in force. This duality is 280 % necessary, not only for backward compatibility, but also for avoidng that the 281 % normal redefined macros highjack the extended macro facility acquired by inputing 282 % the external definition file |LGRaccents-glyphs.def|. 283 % For the diaeresis we need to put an invisible character (|v| in the LGR encoded CB 284 % fonts) in order to avoid any ligature with an implied end of word (boundarychar) 285 % that turns the diaeresis into an apostrophe. 286 % \begin{macrocode} 287 \DeclareTextCommand{\G}{\GRencoding@name}[1]{\lift@accent{96}{#1}} 288 \DeclareTextCommand{\A}{\GRencoding@name}[1]{\lift@accent{39}{#1}} 289 \DeclareTextCommand{\C}{\GRencoding@name}[1]{\lift@accent{126}{#1}} 290 \DeclareTextCommand{\D}{\GRencoding@name}[1]{\lift@accent{34v}{#1}} 291 \DeclareTextCommand{\u}{\GRencoding@name}[1]{\lift@accent{30}{#1}} 292 \DeclareTextCommand{\=}{\GRencoding@name}[1]{\lift@accent{31}{#1}} 293 \renewcommand*\[1]{\lift@accent{39}{#1}} 294 \renewcommand*\[1]{\lift@accent{96}{#1}} 295 \renewcommand*\~[1]{\lift@accent{126}{#1}} 296 \renewcommand*\"[1]{\lift@accent{34v}{#1}}
270 271 297
\input{LGRaccents-glyphs.def} \let\GRcirc\Perispomeni 300 % 301 % \end{mcrocode} 302 % But we have to provide also the means for disabling the |~| shorthand that is 303 % reset every time the Greek language is selected again in a multilanguage document 304 % where language shifts take place quite often; we must also counteract the 305 % resetting of the |\~| definition performed by the |greek.ld| file in every 306 % language shift; it is not important to add the accent re-definition to the 307 % |\extrasgreek| macro, because when this macro is executed the last definition 308 % given is the one that lasts until the next language shift. 309 % \begin{macrocode} 310 \addto\extrasgreek{\shorthandoff{~}\let\~\Perispomeni} 311 \addto\noextrasgreek{\shorthandon{~}}
298 299 312
For the diaeresis we need to put an invisible character (v in the LGR encoded CB fonts) in order to avoid any ligature with an implied end of word (boundarychar) that turns the diaeresis into an apostrophe. 20
Besides the normal \u command for setting a breve command, another large breve is required by philologists, who need to mark a diphthong, or in general two letters; the macro \U does the job, but it is the typesetters responsibility to input the macro argument as made of two letters (possibly with their own accents):
\DeclareTextCommand{\U}{\GRencoding@name}[1]{\lift@accent{151}{#1}} % macron 315 \DeclareTextCommand{\=}{\GRencoding@name}[1]{\lift@accent{31}{#1}} 316 % rough 317 \DeclareTextCommand{\r}{\GRencoding@name}[1]{\lift@accent{60}{#1}} 318 % smooth 319 \DeclareTextCommand{\s}{\GRencoding@name}[1]{\lift@accent{62}{#1}} 320 % acute+diaeresis 321 \DeclareTextCommand{\Ad}{\GRencoding@name}[1]{\lift@accent{35}{#1}} 322 % grave+diaeresis 323 \DeclareTextCommand{\Gd}{\GRencoding@name}[1]{\lift@accent{36}{#1}} 324 % circumflex+diaeresis 325 \DeclareTextCommand{\Cd}{\GRencoding@name}[1]{\lift@accent{32}{#1}} 326 % acute+rough 327 \DeclareTextCommand{\Ar}{\GRencoding@name}[1]{\lift@accent{86}{#1}} 328 % grave+rough 329 \DeclareTextCommand{\Gr}{\GRencoding@name}[1]{\lift@accent{67}{#1}} 330 % circumflex+rough 331 \DeclareTextCommand{\Cr}{\GRencoding@name}[1]{\lift@accent{64}{#1}} 332 % acute+smooth 333 \DeclareTextCommand{\As}{\GRencoding@name}[1]{\lift@accent{94}{#1}} 334 % grave+smooth 335 \DeclareTextCommand{\Gs}{\GRencoding@name}[1]{\lift@accent{95}{#1}} 336 % circumflex+smooth 337 \DeclareTextCommand{\Cs}{\GRencoding@name}[1]{\lift@accent{92}{#1}}
313 314
Most of the above accent commands are used again in order to tie a text symbol meaning to certain combinations, that is when they receive as argument a vowel whose accented glyph is present in the font; in this way in order to type alpha with rough breath, acute accent and iota subscript you can type <a|, or \Ar{a}| or \arai or \<a|, if you use Mildes accent macros; the advantage of using the rst notation is its short string; the advantage of the second is that it does not break kerning commands with a preceeding letter; the advantage of the third is that it does not break any kerning either before or after; the fourth solution produces the same result as the third, but its easier to make up and you dont have to memorize any specic naming rule for accented glyphs. With the Lipsian font this trick is particularly useful for any sequence of alpha and upsilon each one with its own accents and/or diaresis. In Greek the regular cedilla is meaningless, so that \c may be redened as a semivowel command; at the same time the typesetter might be more comfortable if he could use always the same, although longer, macro for marking a vowel as a semivowel one; therefore \c plays the same role in Greek as \semiv.
338 339
21
\DeclareTextCommand{\semiv}{\GRencoding@name}[1]{\cap@cedilla{#1}} \DeclareTextCommand{\semiv}{OT1}[1]{\cap@cedilla{#1}} 342 \DeclareTextCommand{\semiv}{T1}[1]{\cap@cedilla{#1}} 343 % ring cedilla 344 \DeclareTextCommand{\ring}{\GRencoding@name}[1]{\ring@cedilla{#1}} 345 \DeclareTextCommand{\ring}{OT1}[1]{\ring@cedilla{#1}} 346 \DeclareTextCommand{\ring}{T1}[1]{\ring@cedilla{#1}} 347 % dot cedilla 348 \DeclareTextCommand{\Dot}{\GRencoding@name}[1]{\dot@cedilla{#1}} 349 \DeclareTextCommand{\Dot}{OT1}[1]{\dot@cedilla{#1}} 350 \DeclareTextCommand{\Dot}{T1}[1]{\dot@cedilla{#1}} 351 % tie cedilla 352 \DeclareTextCommand{\ut}{\GRencoding@name}[1]{\tie@cedilla{#1}} 353 \DeclareTextCommand{\ut}{OT1}[1]{\tie@cedilla{#1}} 354 \DeclareTextCommand{\ut}{T1}[1]{\tie@cedilla{#1}} 355 % 356 % Acute breve 357 \DeclareTextCommand{\Ab}{\GRencoding@name}[1]% 358 {\LIFT@accent{39}{-.15ex}{\lift@accent{30}{#1}}} 359 % Grave breve 360 \DeclareTextCommand{\Gb}{\GRencoding@name}[1]% 361 {\LIFT@accent{96}{-.15ex}{\lift@accent{30}{#1}}} 362 % Acute rough breve 363 \DeclareTextCommand{\Arb}{\GRencoding@name}[1]% 364 {\LIFT@accent{86}{-.15ex}{\lift@accent{30}{#1}}} 365 % Grave rough breve 366 \DeclareTextCommand{\Grb}{\GRencoding@name}[1]% 367 {\LIFT@accent{67}{-.15ex}{\lift@accent{30}{#1}}} 368 % Acute smooth breve 369 \DeclareTextCommand{\Asb}{\GRencoding@name}[1]% 370 {\LIFT@accent{94}{-.15ex}{\lift@accent{30}{#1}}} 371 % Grave smooth breve 372 \DeclareTextCommand{\Gsb}{\GRencoding@name}[1]% 373 {\LIFT@accent{95}{-.15ex}{\lift@accent{30}{#1}}} 374 % 375 % Acute macron 376 \DeclareTextCommand{\Am}{\GRencoding@name}[1]% 377 {\Lift@accent{39}{\lift@accent{31}{#1}}} 378 % Grave macron 379 \DeclareTextCommand{\Gm}{\GRencoding@name}[1]% 380 {\Lift@accent{96}{\lift@accent{31}{#1}}} 381 % Circumflex macron 382 \DeclareTextCommand{\Cm}{\GRencoding@name}[1]% 383 {\Lift@accent{126}{\lift@accent{31}{#1}}} 384 % Acute rough macron 385 \DeclareTextCommand{\Arm}{\GRencoding@name}[1]% 386 {\Lift@accent{86}{\lift@accent{31}{#1}}} 387 % Grave rough macron 388 \DeclareTextCommand{\Grm}{\GRencoding@name}[1]% 389 {\Lift@accent{67}{\lift@accent{31}{#1}}}
340 341
22
% Circumflex rough macron \DeclareTextCommand{\Crm}{\GRencoding@name}[1]% 392 {\Lift@accent{64}{\lift@accent{31}{#1}}} 393 % Acute smooth macron 394 \DeclareTextCommand{\Asm}{\GRencoding@name}[1]% 395 {\Lift@accent{94}{\lift@accent{31}{#1}}} 396 % Grave smooth macron 397 \DeclareTextCommand{\Gsm}{\GRencoding@name}[1]% 398 {\Lift@accent{95}{\lift@accent{31}{#1}}} 399 % Circumflex smooth macron 400 \DeclareTextCommand{\Csm}{\GRencoding@name}[1]% 401 {\Lift@accent{92}{\lift@accent{31}{#1}}} 402 % smooth macron 403 \DeclareTextCommand{\Sm}{\GRencoding@name}[1]% 404 {\Lift@accent{62}{\lift@accent{31}{#1}}} 405 % rough macron 406 \DeclareTextCommand{\Rm}{\GRencoding@name}[1]% 407 {\Lift@accent{60}{\lift@accent{31}{#1}}} 408 % breve and dieresis 409 \DeclareTextCommand{\bd}{\GRencoding@name}[1]% 410 {\LIFT@accent{30}{-.1ex}{\lift@accent{34v}{#1}}} 411 % 412 % iota subscript 413 \DeclareTextCommand{\iS}{\GRencoding@name}[1] 414 {\ooalign{#1\crcr\hidewidth\char124\hidewidth}}
390 391 415
\d
The \d macro must be made available also with the Greek encoding
\DeclareTextCommand{\d}{\GRencoding@name}[1]% {\leavevmode\bgroup\o@lign{\relax#1\crcr 418 \hidewidth\sh@ft{10}.\hidewidth}\egroup}
416 417 419
The \Open macro sets a special sign under a letter in order to mark it with an open pronunciation.
\DeclareRobustCommand{\Open}[1]{\leavevmode {\setbox4\hbox{\raise-.33ex\hbox{\metricsfont\char14}}% 422 \[email protected]\wd4 423 \setbox\tw@\hbox{i}\setbox\z@\hbox{#1}% 424 \ifx\cf@encoding\GRencoding@name 425 \advance\dimen@ .5\wd\z@ 426 \setbox\tw@\hbox{h}\ifdim\wd\z@=\wd\tw@\advance\[email protected]\wd\z@\fi 427 \else 428 \ifdim\wd\z@>\wd\tw@\advance\dimen@ .55\wd\z@ 429 \else\advance\dimen@ .5\wd\tw@\fi 430 \fi 431 \setbox\tw@\hbox{o}\ifdim\wd\z@=\wd\tw@\advance\[email protected]\wd\z@\fi 432 \hbox to\z@{\kern\dimen@\box4\hss}\unhbox\z@}}
420 421
23
433
\nasal
\tenaspir
\DeclareRobustCommand{\tenaspir}[1]{#1\/% {\fontencoding{\GRencoding@name}\selectfont<v}}
\palat
With the help of some of the previous macros some new commands get dened so as to use a simple more or less mnemonic macro instead of having the typesetter type in nested macros; these macros are valid only in the Greek and Latin encodings.
% dot and breve \DeclareTextCommand{\Ud}{\GRencoding@name}[1]{\d{\u{#1}}} 456 % dot and macron 457 \DeclareTextCommand{\md}{\GRencoding@name}[1]{\d{\={#1}}} 458 % open and breve 459 \DeclareTextCommand{\UO}{\GRencoding@name}[1]{\Open{\u{#1}}} 460 % open and macron 461 \DeclareTextCommand{\mO}{\GRencoding@name}[1]{\Open{\={#1}}}
454 455 462
% \DeclareTextCommand{\Ud}{T1}[1]{\d{\u{#1}}} 465 \DeclareTextCommand{\md}{T1}[1]{\d{\={#1}}} 466 \DeclareTextCommand{\UO}{T1}[1]{\Open{\u{#1}}} 467 \DeclareTextCommand{\mO}{T1}[1]{\Open{\={#1}}} 468 % 469 \DeclareTextCommand{\Ud}{OT1}[1]{\d{\u{#1}}} 470 \DeclareTextCommand{\md}{OT1}[1]{\d{\={#1}}}
463 464
24
\DeclareTextCommand{\UO}{OT1}[1]{\Open{\u{#1}}} \DeclareTextCommand{\mO}{OT1}[1]{\Open{\={#1}}}
5.6
\greekquoteleft \greekquoteright \textguillemotleft \textguillemotright \textcompwordmark \textemdash emdash \textendash
Several macros are traditionally dened for every encoding; we do not make exceptions. Actually all the symbols dened here can be obtained with the regular CB font ligatures so the macros are sort of superuous. Nevertheless, in case any of the component symbols is made active and dened to perform something different, these macros can overcome the diculty of producing the ligated glyphs. Even the \textcompwordmark macro, although the compound word mark is sort of unusual, could have been omitted, because with a Latin keyboard this symbol gets input by pressing the v key (v stands for void); all the hyphenation pattern les for the Greek language recognize v as a letter, an invisible one, that breaks any ligature, that hides the end of the word, that allows hyphenation (if the rest of the word is taken as a word by TEX itself, which does not always happens!. . . ).
\DeclareTextSymbol{\greekquoteleft}{\GRencoding@name}{123} \let\textguillemotleft\greekquoteleft 476 \DeclareTextSymbol{\greekquoteright}{\GRencoding@name}{125} 477 \let\textguillemotright\greekquoteright 478 \DeclareTextSymbol{\textcompwordmark}{\GRencoding@name}{118} 479 \DeclareTextSymbol{\textemdash}{\GRencoding@name}{127} 480 \let\emdash\textemdash 481 \DeclareTextSymbol{\textendash}{\GRencoding@name}{0}
474 475 482
\stigma \varstigma \koppa \coppa \varkoppa \sampi \Coppa \Stigma \Sampi \Euro \permill
Some other Greek symbols are dened; some deal with the lowercase and upper case Milesian numerals, that are not accessible in the font matrix with a normal keyboard stroke, and some deal with the Euro symbol and the permill symbol, that are unlikely to be used in a philological text, but, who knows. . . May be the standard names starting with text should be used; It would not be too dicult a task, but these names should be dened in the greek.fd language description le; I know tha Werner Lemberg ha written a paper on Eutypon on this subject, also in order to make use of the CB fonts with Unicode support. But this is just an extension to that package, so I am not going to redene things that are already there or that will be there in a next version of that le.
\DeclareTextSymbol{\stigma}{\GRencoding@name}{006} \DeclareTextSymbol{\varstigma}{\GRencoding@name}{007} 485 \DeclareTextSymbol{\koppa}{\GRencoding@name}{18} 486 \DeclareTextSymbol{\varkoppa}{\GRencoding@name}{19}\let\coppa\varkoppa 487 \DeclareTextSymbol{\sampi}{\GRencoding@name}{27} 488 \DeclareTextSymbol{\Coppa}{\GRencoding@name}{21}\let\Koppa\Coppa 489 \DeclareTextSymbol{\Stigma}{\GRencoding@name}{22} 490 \DeclareTextSymbol{\Sampi}{\GRencoding@name}{23} 491 \DeclareTextSymbol{\Euro}{\GRencoding@name}{24}
483 484
25
492 493
\DeclareTextSymbol{\permill}{\GRencoding@name}{25}
More important, although unlikely to be found in a philological text, is the quesA tion of standard L TEX commands that are dened with reference to some encoding; if Greek text is being typeset, the Greek encoding is being used and such A symbols would not be available any more; L TEXwould issue warning messages complaining for their absence. Therefore we redened them also for the Greek encoding.
\DeclareTextCommand{\textdollar}{\GRencoding@name}% {{\fontencoding{T1}\selectfont\char36}} 496 \DeclareTextCommand{\textsection}{\GRencoding@name}% 497 {{\fontencoding{T1}\selectfont\char159}} 498 \DeclareTextCommand{\textsterling}{\GRencoding@name}% 499 {{\fontencoding{T1}\selectfont\char191}} 500 \DeclareTextCommand{\textunderscore}{\GRencoding@name}% 501 {{\fontencoding{T1}\selectfont\char95}} 502 \DeclareTextCommand{\textvisiblespace}{\GRencoding@name}% 503 {{\fontencoding{T1}\selectfont\char32}}
494 495 504
5.7
Now come dozens of macros that allow to access Greek accented vowels (plus rho with rough and smooth breaths) with macros instead of ligatures; such macros allow the kerning information to be used by TEX, while the ligature mechanism would sometimes impeach the use of such kerning information. Notice that the same glyphs are often accessed with a text symbol or a text composite symbol; as explained above the opportunity of using either one derives from the necessity of maintaining the kerning mechanism embedded in the font; if the CB fonts had a postxed accent notation, instead of a prexed one, none of these macros would be necessary (probably. . . !), but there would be other inconveniences. Notice that the following code is subject to the boolean variabale GlyphNames which is set to true by default, just fort compatibility with the past; I suggest to use the NoGlyphNames when typesetting new documents, since the glyphs are more asily specied by means of the extended accent macros that are also less restricted in their names; for a letter marked with a smooth breath and an acute accent you can indierently type before the letter one of the following \>\, \>, \\>, \> at your choice. Moreover you can always postx the mark for the iota subscribed at the right of the letter, without any need o memorising complicated names.
\ifGlyphNames \DeclareTextSymbol{\ag}{\GRencoding@name}{128} 507 \DeclareTextSymbol{\ar}{\GRencoding@name}{129} 508 \DeclareTextComposite{\r}{\GRencoding@name}{a}{129} 509 \DeclareTextSymbol{\as}{\GRencoding@name}{130} 510 \DeclareTextComposite{\s}{\GRencoding@name}{a}{130}
505 506
26
\DeclareTextSymbol{\aa}{\GRencoding@name}{136} \DeclareTextSymbol{\ac}{\GRencoding@name}{144} 513 \DeclareTextSymbol{\ai}{\GRencoding@name}{248} 514 \DeclareTextSymbol{\aai}{\GRencoding@name}{140} 515 \DeclareTextSymbol{\aci}{\GRencoding@name}{148} 516 \DeclareTextSymbol{\agi}{\GRencoding@name}{132} 517 \DeclareTextSymbol{\ara}{\GRencoding@name}{137} 518 \DeclareTextComposite{\Ar}{\GRencoding@name}{a}{137} 519 \DeclareTextSymbol{\arc}{\GRencoding@name}{145} 520 \DeclareTextComposite{\Cr}{\GRencoding@name}{a}{145} 521 \DeclareTextSymbol{\arg}{\GRencoding@name}{131} 522 \DeclareTextComposite{\Gr}{\GRencoding@name}{a}{131} 523 \DeclareTextSymbol{\ari}{\GRencoding@name}{133} 524 \DeclareTextSymbol{\asa}{\GRencoding@name}{138} 525 \DeclareTextComposite{\As}{\GRencoding@name}{a}{138} 526 \DeclareTextSymbol{\asc}{\GRencoding@name}{146} 527 \DeclareTextComposite{\Cs}{\GRencoding@name}{a}{146} 528 \DeclareTextSymbol{\asg}{\GRencoding@name}{139} 529 \DeclareTextComposite{\Gs}{\GRencoding@name}{a}{139} 530 \DeclareTextSymbol{\asi}{\GRencoding@name}{134} 531 \DeclareTextSymbol{\argi}{\GRencoding@name}{135} 532 \DeclareTextSymbol{\arai}{\GRencoding@name}{141} 533 \DeclareTextSymbol{\arci}{\GRencoding@name}{149} 534 \DeclareTextSymbol{\asai}{\GRencoding@name}{142} 535 \DeclareTextSymbol{\asgi}{\GRencoding@name}{143} 536 \DeclareTextSymbol{\asci}{\GRencoding@name}{150} 537 \DeclareTextSymbol{\hg}{\GRencoding@name}{152} 538 \DeclareTextSymbol{\hr}{\GRencoding@name}{153} 539 \DeclareTextComposite{\r}{\GRencoding@name}{h}{153} 540 \DeclareTextSymbol{\hs}{\GRencoding@name}{154} 541 \DeclareTextComposite{\s}{\GRencoding@name}{h}{154} 542 \DeclareTextSymbol{\hrg}{\GRencoding@name}{163} 543 \DeclareTextComposite{\Gr}{\GRencoding@name}{h}{163} 544 \DeclareTextSymbol{\hgi}{\GRencoding@name}{156} 545 \DeclareTextSymbol{\hri}{\GRencoding@name}{157} 546 \DeclareTextSymbol{\hsi}{\GRencoding@name}{158} 547 \DeclareTextSymbol{\hrgi}{\GRencoding@name}{167} 548 \DeclareTextSymbol{\ha}{\GRencoding@name}{160} 549 \DeclareTextSymbol{\hra}{\GRencoding@name}{161} 550 \DeclareTextComposite{\Ar}{\GRencoding@name}{h}{161} 551 \DeclareTextSymbol{\hsa}{\GRencoding@name}{162} 552 \DeclareTextComposite{\As}{\GRencoding@name}{h}{162} 553 \DeclareTextSymbol{\hsg}{\GRencoding@name}{171} 554 \DeclareTextComposite{\Gs}{\GRencoding@name}{h}{171} 555 \DeclareTextSymbol{\hai}{\GRencoding@name}{164} 556 \DeclareTextSymbol{\hrai}{\GRencoding@name}{165} 557 \DeclareTextSymbol{\hsai}{\GRencoding@name}{166} 558 \DeclareTextSymbol{\hsgi}{\GRencoding@name}{175} 559 \DeclareTextSymbol{\hc}{\GRencoding@name}{168} 560 \DeclareTextSymbol{\hrc}{\GRencoding@name}{169}
511 512
27
\DeclareTextComposite{\Cr}{\GRencoding@name}{h}{169} \DeclareTextSymbol{\hsc}{\GRencoding@name}{170} 563 \DeclareTextComposite{\Cs}{\GRencoding@name}{h}{170} 564 \DeclareTextSymbol{\hci}{\GRencoding@name}{172} 565 \DeclareTextSymbol{\hrci}{\GRencoding@name}{173} 566 \DeclareTextSymbol{\hsci}{\GRencoding@name}{174} 567 \DeclareTextSymbol{\hi}{\GRencoding@name}{249} 568 \DeclareTextSymbol{\wg}{\GRencoding@name}{176} 569 \DeclareTextSymbol{\wr}{\GRencoding@name}{177} 570 \DeclareTextComposite{\r}{\GRencoding@name}{w}{177} 571 \DeclareTextSymbol{\ws}{\GRencoding@name}{178} 572 \DeclareTextComposite{\s}{\GRencoding@name}{w}{178} 573 \DeclareTextSymbol{\wrg}{\GRencoding@name}{179} 574 \DeclareTextComposite{\Gr}{\GRencoding@name}{w}{179} 575 \DeclareTextSymbol{\wgi}{\GRencoding@name}{180} 576 \DeclareTextSymbol{\wri}{\GRencoding@name}{181} 577 \DeclareTextSymbol{\wsi}{\GRencoding@name}{182} 578 \DeclareTextSymbol{\wrgi}{\GRencoding@name}{183} 579 \DeclareTextSymbol{\wa}{\GRencoding@name}{184} 580 \DeclareTextSymbol{\wra}{\GRencoding@name}{185} 581 \DeclareTextComposite{\Ar}{\GRencoding@name}{w}{185} 582 \DeclareTextSymbol{\wsa}{\GRencoding@name}{186} 583 \DeclareTextComposite{\As}{\GRencoding@name}{w}{186} 584 \DeclareTextSymbol{\wsg}{\GRencoding@name}{187} 585 \DeclareTextComposite{\Gs}{\GRencoding@name}{w}{187} 586 \DeclareTextSymbol{\wai}{\GRencoding@name}{188} 587 \DeclareTextSymbol{\wrai}{\GRencoding@name}{189} 588 \DeclareTextSymbol{\wsai}{\GRencoding@name}{190} 589 \DeclareTextSymbol{\wsgi}{\GRencoding@name}{191} 590 \DeclareTextSymbol{\wc}{\GRencoding@name}{192} 591 \DeclareTextSymbol{\wrc}{\GRencoding@name}{193} 592 \DeclareTextComposite{\Cr}{\GRencoding@name}{w}{193} 593 \DeclareTextSymbol{\wsc}{\GRencoding@name}{194} 594 \DeclareTextComposite{\Cs}{\GRencoding@name}{w}{194} 595 \DeclareTextSymbol{\wci}{\GRencoding@name}{196} 596 \DeclareTextSymbol{\wrci}{\GRencoding@name}{197} 597 \DeclareTextSymbol{\wsci}{\GRencoding@name}{198} 598 \DeclareTextSymbol{\wi}{\GRencoding@name}{250} 599 \DeclareTextSymbol{\ig}{\GRencoding@name}{200} 600 \DeclareTextSymbol{\ir}{\GRencoding@name}{201} 601 \DeclareTextComposite{\r}{\GRencoding@name}{i}{201} 602 \DeclareTextSymbol{\is}{\GRencoding@name}{202} 603 \DeclareTextComposite{\s}{\GRencoding@name}{i}{202} 604 \DeclareTextSymbol{\irg}{\GRencoding@name}{203} 605 \DeclareTextComposite{\Gr}{\GRencoding@name}{i}{203} 606 \DeclareTextSymbol{\ia}{\GRencoding@name}{208} 607 \DeclareTextSymbol{\ira}{\GRencoding@name}{209} 608 \DeclareTextComposite{\Ar}{\GRencoding@name}{i}{209} 609 \DeclareTextSymbol{\isa}{\GRencoding@name}{210} 610 \DeclareTextComposite{\As}{\GRencoding@name}{i}{210}
561 562
28
\DeclareTextSymbol{\isg}{\GRencoding@name}{211} \DeclareTextComposite{\Gs}{\GRencoding@name}{i}{211} 613 \DeclareTextSymbol{\ic}{\GRencoding@name}{216} 614 \DeclareTextSymbol{\irc}{\GRencoding@name}{217} 615 \DeclareTextComposite{\Cr}{\GRencoding@name}{i}{217} 616 \DeclareTextSymbol{\isc}{\GRencoding@name}{218} 617 \DeclareTextComposite{\Cs}{\GRencoding@name}{i}{218} 618 \DeclareTextSymbol{\id}{\GRencoding@name}{240} 619 \DeclareTextSymbol{\idg}{\GRencoding@name}{241} 620 \DeclareTextComposite{\Gd}{\GRencoding@name}{i}{241} 621 \DeclareTextSymbol{\ida}{\GRencoding@name}{242} 622 \DeclareTextComposite{\Ad}{\GRencoding@name}{i}{242} 623 \DeclareTextSymbol{\idc}{\GRencoding@name}{243} 624 \DeclareTextComposite{\Cd}{\GRencoding@name}{i}{243} 625 \DeclareTextSymbol{\ug}{\GRencoding@name}{204} 626 \DeclareTextSymbol{\ur}{\GRencoding@name}{205} 627 \DeclareTextComposite{\r}{\GRencoding@name}{u}{205} 628 \DeclareTextSymbol{\us}{\GRencoding@name}{206} 629 \DeclareTextComposite{\s}{\GRencoding@name}{u}{206} 630 \DeclareTextSymbol{\urg}{\GRencoding@name}{207} 631 \DeclareTextComposite{\Gr}{\GRencoding@name}{u}{207} 632 \DeclareTextSymbol{\ua}{\GRencoding@name}{212} 633 \DeclareTextSymbol{\ura}{\GRencoding@name}{213} 634 \DeclareTextComposite{\Ar}{\GRencoding@name}{u}{213} 635 \DeclareTextSymbol{\usa}{\GRencoding@name}{214} 636 \DeclareTextComposite{\As}{\GRencoding@name}{u}{214} 637 \DeclareTextSymbol{\usg}{\GRencoding@name}{215} 638 \DeclareTextComposite{\Gs}{\GRencoding@name}{u}{215} 639 \DeclareTextSymbol{\uc}{\GRencoding@name}{220} 640 \DeclareTextSymbol{\urc}{\GRencoding@name}{221} 641 \DeclareTextComposite{\Cr}{\GRencoding@name}{u}{221} 642 \DeclareTextSymbol{\usc}{\GRencoding@name}{222} 643 \DeclareTextComposite{\Cs}{\GRencoding@name}{u}{222} 644 \DeclareTextSymbol{\ud}{\GRencoding@name}{244} 645 \DeclareTextSymbol{\udg}{\GRencoding@name}{245} 646 \DeclareTextComposite{\Gd}{\GRencoding@name}{u}{245} 647 \DeclareTextSymbol{\uda}{\GRencoding@name}{246} 648 \DeclareTextComposite{\Ad}{\GRencoding@name}{u}{246} 649 \DeclareTextSymbol{\udc}{\GRencoding@name}{247} 650 \DeclareTextComposite{\Cd}{\GRencoding@name}{u}{247} 651 \DeclareTextSymbol{\eg}{\GRencoding@name}{224} 652 \DeclareTextSymbol{\er}{\GRencoding@name}{225} 653 \DeclareTextComposite{\r}{\GRencoding@name}{e}{225} 654 \DeclareTextSymbol{\es}{\GRencoding@name}{226} 655 \DeclareTextComposite{\s}{\GRencoding@name}{e}{226} 656 \DeclareTextSymbol{\erg}{\GRencoding@name}{227} 657 \DeclareTextComposite{\Gr}{\GRencoding@name}{e}{227} 658 \DeclareTextSymbol{\ea}{\GRencoding@name}{232} 659 \DeclareTextSymbol{\era}{\GRencoding@name}{233} 660 \DeclareTextComposite{\Ar}{\GRencoding@name}{e}{233}
611 612
29
\DeclareTextSymbol{\esa}{\GRencoding@name}{234} \DeclareTextComposite{\As}{\GRencoding@name}{e}{234} 663 \DeclareTextSymbol{\esg}{\GRencoding@name}{235} 664 \DeclareTextComposite{\Gs}{\GRencoding@name}{e}{235} 665 \DeclareTextSymbol{\oR}{\GRencoding@name}{229} 666 \DeclareTextComposite{\r}{\GRencoding@name}{o}{229} 667 \DeclareTextSymbol{\og}{\GRencoding@name}{228} 668 \DeclareTextSymbol{\os}{\GRencoding@name}{230} 669 \DeclareTextComposite{\s}{\GRencoding@name}{o}{230} 670 \DeclareTextSymbol{\org}{\GRencoding@name}{231} 671 \DeclareTextComposite{\Gr}{\GRencoding@name}{o}{231} 672 \DeclareTextSymbol{\oa}{\GRencoding@name}{236} 673 \DeclareTextSymbol{\ora}{\GRencoding@name}{237} 674 \DeclareTextComposite{\Ar}{\GRencoding@name}{o}{237} 675 \DeclareTextSymbol{\osa}{\GRencoding@name}{238} 676 \DeclareTextComposite{\As}{\GRencoding@name}{o}{238} 677 \DeclareTextSymbol{\osg}{\GRencoding@name}{239} 678 \DeclareTextComposite{\Gs}{\GRencoding@name}{o}{239} 679 \DeclareTextSymbol{\rr}{\GRencoding@name}{251} 680 \DeclareTextComposite{\r}{\GRencoding@name}{r}{251} 681 \DeclareTextSymbol{\rs}{\GRencoding@name}{252} 682 \DeclareTextComposite{\s}{\GRencoding@name}{r}{252} 683 \DeclareTextSymbol{\Id}{\GRencoding@name}{219} 684 \DeclareTextSymbol{\Ud}{\GRencoding@name}{223} 685 \DeclareTextComposite{\"}{\GRencoding@name}{U}{223} 686 \fi
661 662 687 688
5.8
Next come some short macros for inserting special symbols that philologists use quite often in Greek.
\h \q \yod \iod
Macro \h is used to insert a Latin h while typesetting in Greek. Macro \q is used to insert a Latin q while typesetting in Greek. Macros \yod and \iod are used to insert a Latin j while typesetting in Greek; the control sequence \jod was avoided in order to reduce the possibility of typing \jot which is a TEX internal dimension.
\DeclareTextCommand{\h}{\GRencoding@name}% {{\fontencoding{OT1}\selectfont h}} 691 \DeclareTextCommand{\q}{\GRencoding@name}% 692 {{\fontencoding{OT1}\selectfont q}} 693 \DeclareTextCommand{\yod}{\GRencoding@name}% 694 {{\fontencoding{OT1}\selectfont j}}% 695 \let\iod\yod
689 690 696
30
\f \F \digamma \Digamma
At the same time it was believed that for inserting lower and upper case digamma it was preferable to use short macros and to avoid the dilemma between the \ddigamma and the \digamma macros, the former being the one dened in the greek extension to babel, the latter being a standard mathematical symbol; initially I believed that philologists do not use mathematical symbols so we made \digamma an alias for \f; afterwards I found out that mathematicians, physicists, engineers, . . . use the teubner.sty package and that the \digamma is a symbol already dened in the package amssymb.sty; therefore I made a conditional creation of this alias; this trick is delayed to the beginning of the document, so as to make it independent on the order with which packages are loaded.
\DeclareTextSymbol{\f}{\GRencoding@name}{147} \AtBeginDocument{\@ifpackageloaded{amssymb}% 699 {\let\AMSdigamma\digamma\def\digamma{\textormath{\f}{\AMSdigamma}}}% amssymb loaded 700 {\let\digamma\f}% amssymb not loadedloaded 701 } 702 \DeclareTextSymbol{\F}{\GRencoding@name}{195}\let\Digamma\F
697 698 703
\fLow \fHigh
The digamma glyphs set forth another question because, according to Paolo Ciacchi, a dierent glyph should be used for typesetting text compared with the one that is used as a variant in Milesian numerals in place of the standard stigma symbol. By means of macros \fLow or \fHigh it is possible to chose the raised or the lowered digamma glyphs; Greek numerals always use the lowered one, while when text is being typeset the typesetter can chose the version he likes best.
\DeclareRobustCommand{\fLow}% {{\setbox\z@\hbox{\f}\dimen@\ht\z@ 706 \advance\dimen@-1ex\raise-\dimen@\hbox{\box\z@}}} 707 \DeclareRobustCommand{\fHigh}% 708 {{\setbox\z@\hbox{\f}\dimen@\dp\z@\raise\dimen@\hbox{\box\z@}}}
704 705 709
Here we start a set of miscellaneous macros. We begin with some parentheses that should turn out in upright shape, even if the default font is the Lipsian one which is oblique; its parentheses are oblique as in all oblique fonts, therefore we need to quietly change fonts behind the scenes. The same is true with the question mark that, philologically speaking, represents an uncertain element, not the termination of a real question; it should therefore always come out between parentheses and in upright shape from a Latin font. While the parenthesized question mark comes from the OT1 Latin upright font, the parentheses obtained with \lpar and \rpar are taken from the metric symbols font, as well as the parentheses used in the parenthesized text processed with macro \frapar.
\DeclareRobustCommand\qmark{\hskip.16ex{\fontencoding{OT1}\upshape(?)}} \DeclareRobustCommand\lpar{{\metricsfont(}} 712 \DeclareRobustCommand\rpar{{\metricsfont)}} 713 \DeclareRobustCommand\frapar[1]{\lpar#1\rpar}
710 711 714
31
\ap
The apex/superscript macro \ap does not dier much from the plain standard A L TEX macro \textsuperscript, the only dierence being the italic correction that precedes \textsuperscript.
715 716
\DeclareRobustCommand{\ap}[1]{\/\textsuperscript{#1}}
Four macros are dened so as to insert a certain number of dots or dashes as specied in the optional command argument; \Dots and \Dashes t the dots or the dashes pretty close together, while \DOTS and \DASHES t them more loosely apart.
\newcommand\Dots[1][1]{{\count255=#1\@whilenum\count255>\z@ \do{\kern.4ex\d{v}\kern.4ex\advance\count255\m@ne}}} 719 \newcommand\DOTS[1][1]{{\count255=#1\@whilenum\count255>\z@ 720 \do{\kern.8ex\d{v}\kern.8ex\advance\count255\m@ne}}} 721 \newcommand\Dashes[1][1]{{\count255=#1\@whilenum\count255>\z@ 722 \do{\kern.4ex--\kern.4ex\advance\count255\m@ne}}} 723 \newcommand\DASHES[1][1]{{\count255=#1\@whilenum\count255>\z@ 724 \do{\kern.8ex--\kern.8ex\advance\count255\m@ne}}}
717 718 725
\: \; \? \MutPers
Greek text or poetry sometimes requires some stacked dots; here we prepared macros for two (\:), three (\;), and four (\?) stacked dots. Two stacked dots in a row indicate that the speaker of a drama or comedy has changed (mutatio personae ). For \: and \; it is necessary to preserve the mathematical meaning, A while \? apparently does not have any previous use in standard L TEX. The real macros are \tw@dots, \thre@dots, and \f@urdots.
\DeclareRobustCommand{\:}{\textormath{\tw@dots}{\mskip\medmuskip}} \DeclareRobustCommand{\;}{\textormath{\thre@dots}{\mskip\thickmuskip}} 728 \DeclareRobustCommand{\?}{\f@urdots} 729 \DeclareRobustCommand{\mutpers}{\makebox[1ex]{\:\hfill\:}\space} 730 \let\MutPers\mutpers\let\antilabe\mutpers 731 \def\tw@dots{\mbox{\kern1\p@\vbox to1ex{\hbox{.}\vss\hbox{.}}}} 732 \def\thre@dots{\mbox{\kern1\p@\vbox to 2ex{\hbox{.}\vss 733 \hbox{.}\vss\hbox{.}}}} 734 \def\f@urdots{\mbox{\kern1\p@\vbox to 2ex{\hbox{.}\vss 735 \hbox{.}\vss\hbox{.}\vss\hbox{.}}}}
726 727 736
\| \dBar \tBar
Similarly Greek text and poetry require certain cesurae indicated with vertical bars; we provided commands for one (\|), two (\dBar), and three (\tBar) vertical bars.
\DeclareRobustCommand{\|}{\relax\ensuremath{\mskip2mu\vert}} \DeclareRobustCommand{\dBar}{\ensuremath{\vert\vert}} 739 \DeclareRobustCommand{\tBar}{\ensuremath{\vert\vert\vert}}
737 738 740
The following are mostly service macros for adjusting the spacing within macro definitions. Nevertheless they are available also to the typesetter, because sometimes 32
certain glyph combinations require a little adjustment. Of course the typesetter will not use them at the very beginning, but only during proof revision, so as to introduce them only where really necessary.
\def\negthinspace{\nobreak\hskip-0.07em} \def\posthinspace{\nobreak\hskip0.07em} 743 \def\posthindspace{\nobreak\hskip0.14em} 744 \renewcommand{\,}{\textormath{\posthinspace}{\mskip\thinmuskip}} 745 \renewcommand{\!}{\textormath{\negthinspace}{\mskip-\thinmuskip}}
741 742 746
\lbrk \rbrk \lmqi \rmqi \lmqs \rmqs \mqi \mqs \Ladd \LLadd \ladd \lladd \lesp \ldel
Philologists require a certain number of special parentheses in order to enclose parts of text that are doubtful or that have been added although they are missing from the original manuscripts; even letter strings that have been modied under the assumption that the copyist made some error. Such enclosing marks include angle brackets, square brackets, upper part of square brackets, lower part of square brackets. Such symbols may even appear doubled. Most of these glyphs have been designed anew, because they are missing or are inadequate if they are taken from the usual CM fonts (either text or math fonts). Brackets for example have been designed as to be higher and deeper than the font total height, so as not to interfere with Greek accents and to accomodate for at least one level of nesting (for example square brackets enclosing lower part of square brackets. The single glyphs may be used directly by the typesetter, but we think that the commands requiring some text are far more useful. \Ladd and its double version \LLadd enclose text that should be added for sure. \ladd and its double version \lladd enclose text that probably should be added. \lesp and its synonymous \ldel enclose text that should be deleted. \mqi surrounds some text with the lower part of open and closed square brackets. \mqs surrounds some text with the upper part of open and closed square brackets. See teubenr-doc.pdf for samples of such commands.
\DeclareRobustCommand{\lbrk}{{\metricsfont\posthindspace[\negthinspace}} \DeclareRobustCommand{\rbrk}{{\metricsfont]}} 749 \DeclareRobustCommand\lmqi{{\metricsfont!}} 750 \DeclareRobustCommand\rmqi{{\metricsfont:}} 751 \DeclareRobustCommand\lmqs{{\metricsfont?}} 752 \DeclareRobustCommand\rmqs{{\metricsfont;}} 753 \DeclareRobustCommand\mqi[1]{\posthinspace\lmqi\negthinspace 754 {#1\/}\rmqi}\let\mezzeq\mqi 755 \DeclareRobustCommand\mqs[1]{\lmqs{#1\/}\rmqs} 756 \DeclareRobustCommand{\Ladd}[1]{{\metricsfont<}{\!\!#1\/}% 757 {\metricsfont>}}% litterae certe addendae 758 \DeclareRobustCommand{\LLadd}[1]{{\metricsfont<\kern-.3ex<} 759 {\!\!#1\/}{\metricsfont>\kern-.3ex>}}% litterae certe addendae 760 \DeclareRobustCommand{\ladd}[1]{{\metricsfont\kern.15ex[\negthinspace}% 761 {#1\/}{\metricsfont]\kern-.15ex}}% litterae addendae 762 \DeclareRobustCommand{\lladd}[1]{{\metricsfont\kern.15ex[\kern-.3ex[% 763 \negthinspace}{#1\/}{\metricsfont]\kern-.3ex]% 764 \kern-.15ex}}% litterae addendae 765 \DeclareRobustCommand{\lesp}[1]% 766 {\mbox{$\{\kern-.20ex$#1\kern.16ex$\}$}}% litterae delendae
747 748
33
767 768
\let\ldel\lesp
5.9
\itopenquotes \itclosedquotes \itoq \itcq
The following macros allow to set Italian/English high quotes even while typing in Greek; such quotes are standard in Italian and in English typesetting and their commands preserve the font family shape and series of the surrounding font. In French typography, as well in the typographic traditions of other countries, dierent quotes are used. In that case the typesetter must resort to a change of language, for example returning to German, inputting the German quotes, then turning back to Greek. He might as well dene his own macros, or he might clone the following denitions and change them according to his country typographic traditions. If he decides to modify these denitions he should either rename this le or he should put his redenitions in a private package to be input after teubner.sty.
\DeclareTextCommand{\itopenquotes}{\GRencoding@name}% {{\fontencoding{OT1}\selectfont\char92}}% 771 \DeclareTextCommand{\itclosedquotes}{\GRencoding@name}% 772 {{\fontencoding{OT1}\selectfont\char34}}% 773 \let\itoq\itopenquotes 774 \let\itcq\itclosedquotes
769 770 775
On the opposite the following German and English quotes are redesigned and included in the metric symbols font. Since this font is in one shape and one series, these quotes do not change as the outside font does, but remain xed; the most useful commands are \GEdqtext for enclosing some text within German double quotes, \GEqtext for enclosing some text within German single quotes, and \ENdqtext for enclosing some text in English double quotes. Apparently while setting Greek poetry in stacked, possibly enumerated, verses, German double or single quotes are often used, since they cannot be misunderstood with Greek diacritical marks. Modern Greek double quotes apparently are not appreciated by philologists, at least outside Greece.
\newcommand\GEodq{\bgroup\futurelet\@tempA\GE@dq} \def\GE@dq{{\metricsfont\char18}\ifx\@tempA m\posthinspace\fi\egroup} 778 \newcommand\GEcdq{{\metricsfont\char16}} 779 \newcommand\GEdqtext[1]{\GEodq\posthinspace#1\/\posthinspace\GEcdq} 780 \newcommand\GEoq{\bgroup\futurelet\@tempA\GE@q} 781 \def\GE@q{{\metricsfont\char13}\ifx\@tempA m\posthinspace\fi\egroup} 782 \newcommand\GEcq{{\metricsfont\char19}} 783 \newcommand\GEqtext[1]{\GEoq\posthinspace#1\/\posthinspace\GEcq} 784 \newcommand\ENodq{{\metricsfont\char16}} 785 \newcommand\ENcdq{{\metricsfont\char17}} 786 \newcommand\ENdqtext[1]{\ENodq\negthinspace#1\/\posthinspace\ENcdq}
776 777 787
34
5.10
\LitNil \litnil
788 789
The CB fonts include also the letter shwa, the glyph that appears as a roman e rotated 180 around its center. Philologists need it even when writing Greek. In order to make it available also when the Latin encodings are in force, suitable denitions have been given so that the suitable CB font was changed behind the scenes without any intervention by the typesetter. With this version of teubner.sty a new denition is made up that uses the \rotatebox facility of the graphicx package; In a future revision of the CB fonts the \schwa slot shall be freed so that Greek glyphs only populate it, without extraneous presences. The \schwa glyph is made available also with the Latin encodings.
%\DeclareTextSymbol{\sva}{\GRencoding@name}{26} \DeclareTextCommand{\sva}{\GRencoding@name}{% 792 \rotatebox[origin=c]{180}{\def\@tempA{li}% 793 \fontencoding{OT1}\ifx\f@shape\@tempA\fontshape{it}\fi\selectfont e}} 794 \DeclareTextCommand\sva{OT1}{{\expandafter\fontencoding 795 \expandafter{\GRencoding@name}\selectfont\sva}} 796 \DeclareTextCommand\sva{T1}{{\expandafter\fontencoding 797 \expandafter{\GRencoding@name}\selectfont\sva}} 798 \let\shva\sva\let\shwa\sva
790 791 799
\skewstack
The \skewstack command stacks two arguments not one on top of the other, but the second argument is placed to the right and upwards relative to the rst argument. The second argument is set in script font size. Although there are similarities with the \textsuperscript command, the exact placement of the second argument depends on the shape (height and depth) of both arguments. This command will be used for creating some philologists symbols, but is readily available to the typesetter both for direct use and for writing macros dening new symbols.
\DeclareRobustCommand\skewstack[2]{{% \edef\slant@{\strip@pt\fontdimen1\font}% 802 \setbox\z@\hbox{#1}\dimen@\ht\z@\box\z@ 803 \kern-.045em\setbox\@ne\hbox{\scriptsize#2}% 804 \ifdim\dimen@>1.2ex\advance\dimen@-\ht\@ne\else 805 \dimen@1ex\advance\[email protected]\ht\@ne\fi 806 \kern\slant@\dimen@\raise\dimen@\hbox{\box\@ne}}}
800 801 807
Matter of fact some common Latin stacked symbols are dened here in terms of \skewstack. As it may bee seen, the second argument (the rst as well, but here there are no examples) may in turn contain other macros for composite symbols.
808 809
\DeclareRobustCommand\hv{{\fontencoding{OT1}\selectfont \skewstack{h}{v}}}
35
\DeclareRobustCommand\qw{{\fontencoding{OT1}\selectfont \skewstack{q}{w}}} 812 \DeclareRobustCommand\gw{{\fontencoding{OT1}\selectfont 813 \skewstack{g}{w}}} 814 \DeclareRobustCommand\gusv{{\fontencoding{OT1}\selectfont 815 \skewstack{g}{\semiv{u}}}} 816 \DeclareRobustCommand\qusv{{\fontencoding{OT1}\selectfont 817 \skewstack{q}{\semiv{u}}}} 818 \DeclareRobustCommand\qu{{\fontencoding{OT1}\selectfont 819 \skewstack{q}{u}}}
810 811 820
\dz
Without using \skewstack other symbols may be dened; here \dz is just an example, where the kerning between d and z has been found by cut and try. With other glyphs may be dierent kerning is necessary.
821 822
Now we come to another set of commands like the ones needed to mark the syneresis or the zeugma and other similar marks.
\Utie
This rst macro sets a smile symbol under a couple of letters. The glyph is ne but is good only for two adjacent letters, therefore it is necessary to have a stretchable symbol.
\DeclareRobustCommand\Utie[1]{% \mbox{\vtop{\ialign{##\crcr 825 \hfil#1\hfil\crcr 826 \noalign{\kern.3ex\nointerlineskip}% 827 \hfil$\smile$\hfil\crcr}}}}
823 824 828
\siner \siniz
This is why the \siner and \siniz synonymous commands have been dened; in place of or in addition to the smile symbol; they contain a stretchable ller \upfill that behaves almost as the stretchable horizontal brace that is used in A the denition of the L TEX commands \underbrace or \overbrace.
\DeclareRobustCommand{\siner}[1]{% \mbox{\vtop{\ialign{##\crcr 831 \hfil#1\hfil\crcr 832 \noalign{\kern.6ex\nointerlineskip}% 833 \upfill\crcr}}}} 834 \let\siniz\siner
829 830 835
\upfill
A The \upfill is dened as a leader, the same way as the corresponding L TEX stretchable horizontal brace.
36
\downfill
The \downfill arc is totally similar to the \upfill one, except for its terminating elements that change the shape of the arc from up to down.
\def\downfill{$\m@th\scriptstyle\setbox\z@\hbox{$\scriptstyle\braceld$}% \kern.16ex\braceld\ifPDF\kern-.15ex\fi 843 \leaders\vrule \@height\ht\z@ \@depth\z@\hfill 844 \bracerd\kern.16ex$}
841 842 845
\zeugma
Similarly \zeugma puts a stretchable arc over its argument; it must take into account the slant of the argument font so as to skew the placement of the arc.
\newcommand*\zeugma[1]{{\vbox{\setbox\z@\hbox{#1}\dimen@=\ht\z@ \edef\@slant{\strip@pt\fontdimen1\font}% 848 \dimen\tw@=\wd\z@ 849 \dimen@=\@slant\dimen@\ifmetricsfont\dimen@=\z@ 850 \advance\dimen\[email protected]\fi 851 \kern-.2ex\ialign{##\crcr 852 \hbox to\z@{\ifmetricsfont\kern.25ex\fi\kern\dimen@ 853 \hbox to\dimen\tw@{\hss\downfill\kern.2\dimen@\hss}\hss}\crcr 854 \noalign{\ifmetricsfont\kern.6ex 855 \else\kern.4ex\fi\nointerlineskip}% 856 \hfil{#1}\hfil\crcr}}}% 857 }
846 847 858
\slzeugma \rszeugma
Although the shape of oblique zeugma arcs cannot be changed depending on the width and height of the zeugma argument, in certain circumstances the philologists want to use oblique zeugma marks. This is why we dened a sloping zeugma arc \slzeugma, and a rising zeugma arc \rszeugma that can be used with poor results, if such arcs are superimposed over the wrong letters. There is nothing automatic in the choice of the oblique arc and is totally on the typesetter responsibility to use the correct command. These slanted zeugma signs are possibly useful only for two letters since they are not stretchable.
\newcommand*\slzeugma[1]{{\leavevmode \setbox\tw@\hbox{\metricsfont\char120}% 861 \setbox\z@\hbox{#1}\[email protected]\wd\z@\advance\[email protected]\wd\tw@ 862 \edef\@slant{\strip@pt\fontdimen1\font}% 863 \advance\dimen@\@slant\ht\z@ 864 \hbox to\z@{\kern\dimen@\box\tw@\hss}\box\z@ 865 }% 866 }
859 860 867
\newcommand*\rszeugma[1]{{\leavevmode \setbox\tw@\hbox{\metricsfont\char122}% 870 \setbox\z@\hbox{#1}\[email protected]\wd\z@\advance\[email protected]\wd\tw@ 871 \edef\@slant{\strip@pt\fontdimen1\font}% 872 \advance\dimen@\@slant\ht\z@ 873 \hbox to\z@{\kern\dimen@\box\tw@\hss}\box\z@ 874 }% 875 }
868 869
37
876
\nexus \nesso
Originally I had two dierent macros for marking a nexus ; one made use of a up stretchable turtle bracket, and the user used a leader of Latin circumex signs. Both were unsatisfactory; the latter was really ugly, but I kept the macro name as a synonym for compatibility with the past. The good looking marker is obtained from a mathematical \widehat sign by stretching it to the width of the string the marcher should mark; the new macro \nexus (that replaces the stretchable turtle bracket) relies on the facilities oered by the \resizebox of the package graphicx.
\newcommand*{\nexus}[1]{{\setbox\tw@\hbox{#1\/}% \edef\slant@{\strip@pt\fontdimen1\font}% 879 \@tempdima=\slant@\ht\tw@\advance\@tempdima.45ex 880 \setbox4\hbox{\resizebox{\wd\tw@}{\height}{$\widehat{\phantom{aaa}}$}}% 881 \setbox4\hbox{\smash{\lower1.35ex\hbox{\box4}}}% 882 \vbox{\ialign{##\crcr% 883 \kern\@tempdima\box4% 884 \crcr 885 \noalign{\kern.15ex\nointerlineskip}% 886 \hfil{#1}\hfil\crcr}}}} 887 \let\nesso\nexus
877 878 888
While setting poetry it is necessary to mark the end of paragraphs, which do not necessarily coincide with the ends of stanzas. After the verse that concludes a logical paragraph philologists insert a mark called coronis (synonymous of paragraph, therefore the command \paragr) or a stronger mark called Coronis, which diers from the common coronis because it bears an inverted semilunar sign on its left. Both marks are input by means of their respective commands \paragr (preferred to \coronis) or \Coronis inserted at the beginning of the paragraph terminating verse. The command \dparagr inserts a double coronis mark, which is sometimes required in place of the ordinary single mark.
\def\C@rule{\vrule\@height.45ex\@depth-.35ex\@width1.5em} \def\coronis@rule{\hbox to\z@{\hss\C@rule\hss}} 891 \def\Coronis@rule{\hbox to\z@ 892 {\hss\hbox to\z@{\hss$\scriptstyle)$\kern-1.5\p@}\C@rule\hss}} 893 \DeclareRobustCommand\paragr{\raisebox{-1ex}[\z@][\z@]{\coronis@rule}} 894 \let\coronis\paragr 895 \DeclareRobustCommand\Coronis{\raisebox{-1ex}[\z@][\z@]{\Coronis@rule}} 896 \DeclareRobustCommand{\dparagr}% 897 {\raisebox{-1.3ex}[\z@][\z@]{\coronis@rule}% 898 \raisebox{-1.6ex}[\z@][\z@]{\coronis@rule}}
889 890 899
\sinafia \crux \FinisCarmen \apici \positio \Int \star \dstar \tstar \responsio
The next group of commands are intended to insert special symbols in the philological text; just the command \apici requires an argument, a block of text that shall be enclosed within straight vertical apices, irrespective of the font slant. The command \FinisCarmen although very descriptive, is long to type, therefore a 38
shorter alias \FinCar has been dened. \apex was the initial name given to the command, but on a second time it was changed to \positio, and the latter should always be used in place of the former. For what concerns \star which is a stanA dard L TEX math command, the original denition is saved in the service macro \m@thst@r and the command is redened so as to perform as it should both in text and in math mode. The symbol , on the contrary, was redened so as not to mix math with text, even if its rendering resorts to mathematics.
\DeclareRobustCommand*\sinafia{{\metricsfont s}} \DeclareRobustCommand*{\crux}{{\metricsfont\char171}} 902 \DeclareRobustCommand*{\FinisCarmen}{\ensuremath{\otimes}} 903 \let\FinCar\FinisCarmen 904 \DeclareRobustCommand*{\apici}[1]% 905 {\posthinspace{\metricsfont\char96}\negthinspace#1% 906 \posthinspace{\metricsfont\char39}\negthinspace} 907 \DeclareRobustCommand*{\apex}% 908 {\/\hskip.5ex\vrule\@height1.7ex\@depth-1ex\hskip.2ex} 909 \let\positio\apex 910 \DeclareRobustCommand*{\Int}{\ensuremath{\int}} 911 \let\m@thst@r\star 912 \DeclareRobustCommand*{\star}{\textormath{{{\upshape *}}}{\m@thst@r}} 913 \DeclareRobustCommand*{\dstar}{{\upshape **}} 914 \DeclareRobustCommand*{\tstar}{{\upshape ***}} 915 \DeclareRobustCommand*{\responsio}{{\boldmath\ensuremath{\sim}}}
900 901 916
\thorn \Thorn
\thorn and \Thorn are the exact equivalents of \th and \Th that are dened only for the T1 encoding. Therefore such encoding is selected in an implicit way.
917 918 919
\DeclareRobustCommand{\thorn}{{\fontencoding{T1}\selectfont\th}} \DeclareRobustCommand{\Thorn}{{\fontencoding{T1}\selectfont\TH}}
5.11
\dracma \hemiobelion \tetartemorion \stater \denarius \etos
This set of symbols, taken from the metrics symbol font (which by this time is evident does not contain only metrics symbols) represents the unit symbols of some coins of ancient Greece, as they were found on many ostraka in several archeological sites.
\DeclareRobustCommand{\dracma}{{\metricsfont D}} \DeclareRobustCommand{\hemiobelion}{{\metricsfont A}} 922 \DeclareRobustCommand{\tetartemorion}{{\metricsfont B}} 923 \DeclareRobustCommand{\stater}{{\metricsfont C}} 924 \DeclareRobustCommand{\denarius}{{\metricsfont E}} 925 \DeclareRobustCommand{\etos}{{\metricsfont G}}
920 921 926
39
5.12
\cut \dcutbar \bcutbar \gcutbar
The following set of macros are all connected with the principal macro \cut, which should position a horizontal tie or bar across a certain number of latin letters, specically d, b, and g; due to their dierent shapes, such bars are of dierent length and located at dierent heights; if they are in italics the bar position must change again. Therefore even if the user command \cut is the same for all these letters, its action must change depending on dierent circumstances. It merely checks its argument (it must be one letter and unpredictable results are obtained if more that one token is passed as an argument to \cut) and selects the proper bar. The specic bar commands \dcutbar, \bcutbar, and \gcutbar, are dened in such a way as to cope only with the their initial letter.
\DeclareRobustCommand{\cut}[1]{% \ifx#1d\dcutbar\else 929 \ifx#1b\bcutbar\else 930 \ifx#1g\gcutbar 931 \fi 932 \fi 933 \fi} 934 % 935 \def\dcutbar{{\edef\slant@{\strip@pt\fontdimen1\font}% 936 d\[email protected]\kern\slant@\dimen@ 937 \llap{\vrule\@height1.3ex\@depth-\dimen@ 938 \ifdim\slant@\p@>\z@\@width.35em\else\@width.4em\fi\kern.03em}}} 939 \def\bcutbar{{\edef\slant@{\strip@pt\fontdimen1\font}% 940 \rlap{\[email protected]\kern\slant@\dimen@ 941 \ifdim\slant@\p@=\z@\kern.03em\fi 942 \vrule\@height1.3ex\@depth-\dimen@ 943 \ifdim\slant@\p@>\z@\@width.3em\else\@width.4em\fi}b}} 944 \def\gcutbar{{\edef\slant@{\strip@pt\fontdimen1\font}% 945 \ifdim\slant@\p@>\z@ 946 g\kern-.55ex\[email protected]\kern-\slant@\dimen@ 947 \vrule\@height-.1ex\@depth\dimen@\@width.6ex 948 \else 949 \[email protected]\kern\slant@\dimen@\vrule\@height.3ex\@depth-\dimen@ 950 \@width.6ex\kern-.55ex\relax g 951 \fi}}
927 928 952
\OSN
\let\OSN\oldstylenums
The next three macros are used in glottology; the rst two ones are used to mark special pronunciations of the sibilant, while the last one is used to mark a special pronunciation of the guttural that produces a click.
\newcommand\splus{\leavevmode{% \edef\slant@{\strip@pt\fontdimen1\font}% 957 \setbox\z@\hbox{s}%
955 956
40
\dimen@=\wd\z@ \setbox\tw@\hbox{$\scriptscriptstyle+$}% 960 \advance\[email protected]\ht\tw@ 961 \raisebox{\dimen@}[\z@][\z@]{% 962 \makebox[\z@][l]{\kern.5\wd\z@ 963 \kern\slant@\dimen@\kern-.5\wd\tw@\box\tw@}}% 964 \box\z@}}% 965 \newcommand\stimes{\leavevmode{% 966 \edef\slant@{\strip@pt\fontdimen1\font}% 967 \setbox\z@\hbox{s}% 968 \dimen@=\wd\z@ 969 \setbox\tw@\hbox{$\scriptscriptstyle\times$}% 970 \advance\[email protected]\ht\tw@ 971 \raisebox{\dimen@}[\z@][\z@]{% 972 \makebox[\z@][l]{\kern.5\wd\z@ 973 \kern\slant@\dimen@\kern-.5\wd\tw@\box\tw@}}% 974 \box\z@}}% 975 \newcommand\kclick{\leavevmode{% 976 \edef\slant@{\strip@pt\fontdimen1\font}% 977 \setbox\z@\hbox{k}% 978 \setbox\tw@\hbox{\fontencoding\GRencoding@name\selectfont\s{v}}% 979 \dimen@\wd\z@ 980 \ifdim\slant@\p@=\z@ 981 \advance\[email protected]\wd\z@\else\advance\dimen@\wd\tw@ 982 \fi 983 k\makebox[\z@][r]{\unhcopy\tw@\kern.5\dimen@}% 984 }}%
958 959 985
5.13
\verso versi
Here we start with verse environments; we already explained that we dened three new verse environments that typeset poetry in in-line verses, numbered by ve verses, and numbered by ve and subnumbered verses. For the environment versi we rst need a counter and a little macro for generating the short bar that has to receive the verse number as a limits superscript.
986 987 988
\newcounter{verso}\setcounter{verso}{0} \newcommand{\smallvert}{\vrule\@height.6ex\@depth.4ex}
Next we dene the macro \verso that sets the small bar with the verse number on top. Since the initial numbering might be dierent from 1, \verso accepts an optional argument, which is intended to be the initial counter value. Since \verso steps up the counter a dierent action must be taken if the optional argument is present; in order to be able to reference such verse by means of the \label\ref cross reference mechanism, this stepping up must be done by means of \refstepcounter; therefore we have to leave \refstepcounter outside the conditional code, and step down the counter by one unit only in case the initial value is specied.
41
\DeclareRobustCommand\verso[1][]{% \def\@tempA{#1}\ifx\@tempA\empty 991 \else 992 \setcounter{verso}{#1}\addtocounter{verso}{\m@ne}% 993 \fi 994 \refstepcounter{verso}% 995 \@killglue\space 996 \ensuremath{\mathop{\smallvert}\limits^{\scriptscriptstyle\theverso}}% 997 \space\ignorespaces}
989 990 998
Now that the verse separation macro is ready we can dene the environment; the required opening statement argument represents a short text whose width is taken as a measure for indentation, so that verses are typeset with a left margin that leaves out this short text. Substantially this environment is a list one, and the left margin variable width is totally similar to the one used in thebibiography environment. Also the \makelabel command has been modied accordingly.
\newenvironment{versi}[1]{% \def\makelabel##1{##1} 1001 \setbox\z@\hbox{#1}% 1002 \list{}{\labelwidth\wd\z@\leftmargin\labelwidth 1003 \advance\leftmargin\labelsep}% 1004 \item[\box\z@] 1005 }{% 1006 \endlist 1007 } 1008 \let\versus\versi \let\endversus\endversi
999 1000
Versi
The second environment Versi accepts an optional starting number in the opening, statement, whose default value is 1: verses are composed as in the standard A L TEX verse environment (with one minor dierence) except they are numbered in the left margin with a progression of ve; only verse numbers that are integer multiples of ve are displayed. The minor dierence is that stanzas cannot be marked with a blank line in the input .tex le, as it is customary with the standard environment, but if a visual mark is desired, such as extra vertical space, it is necessary to resort to the optional spacing parameter that can be specied to the \\ command. This environment uses the same verse counting counter, dened for use with the versi environment. For specic purposes it is necessary to have a boolean variable for allowing or prohibiting verses to split up at the end of line; the default is not to split.
\newif\ifBreakVersi \BreakVersifalse 1011 \newenvironment{Versi}[1][1]{% 1012 \setcounter{verso}{#1}%
1009 1010
\BreakVersotrue \BreakVersofalse
An internal macro \writ@verso does not actually write out the complete, possibly numbered verse, but provides for checking that the verse counter contains a
42
multiple of 5, and to write it out using old stile numbers; in case the number is not an integer multiple of 5 the number is written out as the \empty macro.
1013 1014 1015 1016 1017 1018 1019 1020 1021
A Since the \\ command should provide the same functionality as the regular L TEX command, while in this environment it should provide other functionalities, such as triggering the display of the verse number. It is necessary to dene an intermediate command \v@rscr, that examines the possible optional arguments, such as the optional star or the brackets enclosing vertical spacing 1022 1023 1024
Finally the \wr@teverse macro does the actual typesetting of the verse. Notice that the environment opening statement and every succeeding previous verse starts an horizontal box where the contents of the current verse is stored. Therefore the rst thing to do is to close the box with the \egroup command, then a line of text is output that contains a possibly empty box or the verse number and the command for stepping up the verse counter, followed by the verse box number 0 and an end of paragraph; in this way the \\ operates always in vertical mode, contrary to what A happens in the verse standard L TEX environment. Even in this environment the actual typesetting is done within a list environment, whose parameters are set dierently from what they are in the verse environment. Notice in any case that the command \wr@teverse reopens the 0 box, so on the last verse, upon closing the environment, it is necessary to remember to close such box, whose contents is irrelevant and can be thrown away. I have experienced some problems in typesetting verses in two-column format; the column width might be too short for setting up verses even if verses are not that long, because in the left margin there must be room for the verse numbering; for homogeneity the spacing must conform also with the following environment VERSI that has a secondary verse numbering, therefore it cant be too small. The result is that there might be a test for controlling the two-column format, but I think that it is more useful for the typesetter to be able to switch on and o the possibility of breaking long verses on more lines. On two-column format in any case it is better to leave the right margin to coincide with the column right margin.
1025 1026 1027 1028
43
1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052
\begingroup\raggedright \hyphenpenalty \@M \unhbox\z@\par \endgroup \else \rlap{\box\z@}\par \fi \penalty##1\vskip##2\relax \setbox\z@\hbox\bgroup\ignorespaces}% \list{}{\itemsep\z@\parsep\z@ \if@twocolumn \itemindent -5.3em% \listparindent\itemindent \rightmargin\z@ \advance\leftmargin 3.3em \else \itemindent -1.5em% \listparindent\itemindent \rightmargin \leftmargin \advance\leftmargin 1.5em \fi }% \item\leavevmode\setbox\z@\hbox\bgroup\ignorespaces }{%
Upon closing it is necessary to activate the writing out of the last verse that is still in the 0 box, but since this box is immediately reopened, it is necessary to close it again before exiting the environment.
1053 1054 1055 1056 1057 1058
VERSI
The third environment VERSI set verses in the traditional way, but numbers them with two dierent enumerations; the principal one is by multiples of ve, while the secondary one counts by units, and may be turned on and o, or reset at will. We therefore need another counter for the secondary enumeration and commands for turning it on and o and for resetting the counter. We need also a new length and a new boolean variable in order to manage the secondary enumeration. The new length represents an indentation of those verses that do no have the secondary enumeration, while secondary enumerated verses are not indented. For VERSI there is the same possibility of turning on and o the possibility of breaking verses at the end of line as it happens for the environment Versi. Macro \NoSubVerso turns o the secondary enumeration; macro \SubVerso turns on the secondary enumeration, but it accepts an optional argument for resetting the secondary counter; the default value is 0; if no optional argument is specied,
\SubVerso \NoSubVerso
44
and therefore if the optional argument has its default value 0, no resetting is performed and the enumeration keeps going from the last contents of the secondary counter; if the rst use of \SubVerso does not contain the optional argument, the secondary enumeration keeps going from the old contents of the secondary counter which is unpredictable, depending upon the previous occurrences of the environment VERSI. The typesetter, therefore, must remember to specify the optional argument to \SubVerso the rst time he uses it in this environment.
1059
\newcounter{subverso} \setcounter{subverso}{0} \newif\ifSubVerso 1061 \newlength{\versoskip} 1062 \newcommand*\NoSubVerso{\global\SubVersofalse 1063 \global\versoskip1.3em\ignorespaces} 1064 \newcommand*\SubVerso[1][0]{\global\SubVersotrue 1065 \ifnum#1=0\else 1066 \setcounter{subverso}{#1}% 1067 \global\protected@edef\@currentlabel{\the\c@subverso}% 1068 \fi 1069 \global\versoskip.3em\ignorespaces}
1060 1070
The opening environment statement accepts an optional argument (default equals 1) which represents the primary enumeration starting number:
1071 1072
\newenvironment{VERSI}[1][1]{% \setcounter{verso}{#1}%
We need two macros \writ@verso and \writ@subverso, that typeset the primary and secondary enumeration; the rst one is similar to the one used in the Versi environment, while the second one has no special features except the conditional construct needed to check if the secondary enumeration has to be printed out.
1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087
\def\writ@verso{% \count255=\value{verso}\divide\count255by5\relax \multiply\count255by5\relax \advance\count255-\value{verso}% \ifnum\count255=0\relax {\fontseries{m}\small\expandafter\oldstylenums\expandafter{\the\c@verso}}% \else \empty \fi}% \NoSubVerso \def\writ@subverso{% \ifSubVerso {\fontseries{m}\scriptsize\expandafter\oldstylenums \expandafter{\the\c@subverso}}% \fi}%
Similarly to the previous environment, the \\ command must be redened so as to perform more or less as the standard one, while doing all the necessary actions needed in this environment. It must check the presence of the optional star and of the optional vertical skip and it has to pass control to a service macro \v@rscr
45
that does the actual job; actually it passes control to a third macro \writ@verse that eectively outputs the current verse.
1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104
\def\\{\@ifstar{\v@rscr{\@M}}{\v@rscr{\z@}}}% \def\v@rscr##1{\@ifnextchar[{\writ@verse{##1}}% {\writ@verse{##1}[\z@]}}% \def\writ@verse##1[##2]{\egroup \makebox[1.5em][r]{\writ@verso\refstepcounter{verso}}% \makebox[1.5em][r]{\writ@subverso\refstepcounter{subverso}}% \kern1.5ex\hskip\versoskip \ifBreakVersi \begingroup \hyphenpenalty \@M \unhbox\z@\par \endgroup \else \rlap{\box\z@}\par \fi \penalty##1\vskip##2\relax \setbox\z@\hbox\bgroup\ignorespaces}%
For the remaining part, the environment is a normal list environment with specic initial parameters.
1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119
\list{}{\parsep\z@\itemsep\z@ \if@twocolumn \itemindent -5.3em% \listparindent\itemindent \rightmargin\z@ \advance\leftmargin 3.3em \else \itemindent -1.5em% \listparindent\itemindent \rightmargin \leftmargin \advance\leftmargin 1.5em \fi }% \item\leavevmode\setbox\z@\hbox\bgroup\ignorespaces }{%
The closing statement must output the last verse, which is still contained in box 0; since box 0 is automatically reopened, it must be closed again and its contents, of no signicance now, can be lost upon closing the environment group.
\\% \egroup\endlist} 1122 \let\VERSUS\VERSI \let\endVERSUS\endVERSUS
1120 1121 1123
5.14
Now we start dening many macros concerned with metrics; the metric symbol font has been developed mainly for this purpose. We start dening some macros 46
for inputting specic symbols; many such macros have their own aliases in Latin.
\lunga The following denitions are straightforward; a small comment on \breve: since A \longa it is also a math command in standard L TEX, its meaning is saved in a service \breve macro \br@ve and the \breve macro is redened taking into account whether the \brevis typesetting is being done in text or in math mode. The unusual letters that appear \bbreve in the denitions of the various metric symbols have no mysterious meaning; they \bbrevis might have been specied by \char number , but it seemed shorter to specify the \barbreve corresponding letters that would occupy the same slots in literal fonts. \barbrevis 1124 \DeclareRobustCommand\lunga{{\metricsfont l}} \barbbrev 1125 \let\longa\lunga \barbbrevis 1126 \let\br@ve\breve \ubarbreve 1127 \DeclareRobustCommand\breve{\textormath{{{\metricsfont b}}}{\br@ve}} \ubarbrevis 1128 \let\brevis\breve \ubarbbreve 1129 \DeclareRobustCommand\bbreve{{\metricsfont c}} \ubarbbrevis 1130 \let\bbrevis\bbreve 1131 \DeclareRobustCommand\barbreve{{\metricsfont i}} \ubarsbreve 1132 \let\barbrevis\barbreve \ubarsbrevis 1133 \DeclareRobustCommand\barbbreve{{\metricsfont j}} \ubrevelunga 1134 \let\barbbrevis\barbbreve \ubrevislonga 1135 \DeclareRobustCommand\ubarbreve{{\metricsfont d}} 1136 \let\ubarbrevis\ubarbreve 1137 \DeclareRobustCommand\ubarbbreve{{\metricsfont e}} 1138 \let\ubarbbrevis\ubarbbreve 1139 \DeclareRobustCommand\ubarsbreve{{\metricsfont f}} 1140 \let\ubarsbrevis\ubarsbreve 1141 \DeclareRobustCommand{\ubrevelunga}{{\metricsfont\char107}} 1142 \let\ubrevislonga\ubrevelunga
1143
\corona Similarly the following symbols have straightforward denitions. Only \hiatus \ElemInd and \Hiatus require a small explanation; \hiatus inserts a small capital H in \coronainv superscript position; in a rst moment it was chosen the solution of designing \catal a specic sans serif glyph in superscript position directly in the metric symbol \ipercatal font (actually this symbol is still part of the font), but while testing it, Paolo \hiatus Ciacchi observed that a regular H with serifs was better looking than the sans \Hiatus serif counterpart. Therefore the denition was changed in order to use the current \X font upright shape; by specifying H, it is irrelevant if the current one is a Latin \anceps font, and the letter is a capital h, or if the current one is a Greek font and the \banceps letter is a capital eta. \Hiatus displays the same symbol in a zero width box \ancepsdbrevis so that it does not occupy any horizontal space; it is useful while writing down \aeolicbii complicated metric sequences. Macro\X may be considered, thanks to its shape, \aeolicbiii a mnemonic shortcut in place of the full name \anceps. \aeolicbiv 1144 \DeclareRobustCommand\corona{{\metricsfont\char20}} 1145 \let\ElemInd\corona 1146 \DeclareRobustCommand\coronainv{{\metricsfont\char21}} 1147 \DeclareRobustCommand\catal{{\metricsfont g}} 1148 \DeclareRobustCommand\ipercatal{{\metricsfont h}}
47
\DeclareRobustCommand\hiatus{\textsuperscript{\upshape H}} \DeclareRobustCommand\Hiatus{\makebox[\z@]{\hiatus}} 1151 \DeclareRobustCommand\X{{\metricsfont X}} 1152 \let\anceps\X 1153 \DeclareRobustCommand\banceps{{\metricsfont Y}} 1154 \DeclareRobustCommand\ancepsdbrevis{{\metricsfont Z}} 1155 \DeclareRobustCommand{\aeolicbii}{{\metricsfont I}} 1156 \DeclareRobustCommand{\aeolicbiii}{{\metricsfont J}} 1157 \DeclareRobustCommand{\aeolicbiv}{{\metricsfont K}}
1149 1150 1158
\stripsl@sh \2 \3 \4
Here we prepare for the denition of a very useful macro, \newmetrics, that should ease quite a lot writing complicated and repetitive metric sequences. We A shall dene \newmetrics by means of the internal L TEX macro \@namedef which accepts a macro name containing any character, provided this name does not contain the initial back slash (if it does this back slash becomes part of the macro name; see the TEXbook where there is an example for the denition of \\TeX). Therefore we need a service macro \stripsl@sh that strips the rst token from the control sequence, so that the naf user does not have to treat the new metrics control sequence dierently from the control sequences it uses for example with \newcommand. Next we dene three numeric control sequences that should be followed by the rest of the macro name. The naf user can then type in something like \2iamb in order to activate a macro whose name is formed by the tokens A 2iamb, which is normally impossible in L TEX. Notice, though, the compulsory space after the macro name.
\newif\ifmetricsfont\metricsfontfalse \def\stripsl@sh#1{\expandafter\@gobble\string#1} 1161 \def\2#1 {\csname2#1\endcsname} 1162 \def\3#1 {\csname3#1\endcsname} 1163 \def\4#1 {\csname4#1\endcsname}
1159 1160 1164
\newmetrics
Here is the user macro \newmetrics, to be used just as \newcommand, except it accepts a macro name starting with one of the digits 2, 3, or 4, and sets the suitable boolean variable to true so that in a long metric sequence the metric font might be selected just once.
\newcommand\newmetrics[2]{% \expandafter\@namedef\expandafter{\stripsl@sh#1}% 1167 {{\metricsfonttrue#2}}}
1165 1166 1168
\iam Here some common metric sequences are dened; some dene single measures, \chor such as the iambus or the choriambus, while some dene complete verses such \enopl as the hexameter or the pentameter. \4MACRO 1169 \newmetrics\iam{\barbreve\lunga\breve\lunga} \aeolchorsor 1170 \newmetrics\chor{\lunga\breve\breve\lunga} \hexam 1171 \newmetrics\enopl{\breve\lunga\breve\breve\lunga\breve\breve\lunga} \pentam 1172 \newmetrics{\4MACRO}{\lunga\lunga\lunga\lunga} \2tr
48
\newmetrics{\aeolchorsor}{\lunga\zeugma{\breve\breve}\breve \breve\zeugma{\breve\breve}} 1175 \newmetrics{\hexam}{\lunga\breve\breve\lunga\breve\breve 1176 \lunga\breve\breve\lunga\breve\breve\lunga\breve\breve 1177 \lunga\lunga} 1178 \newmetrics{\pentam}{\lunga\barbbreve\lunga\barbbreve\lunga\dBar 1179 \lunga\breve\breve\lunga\breve\breve\lunga} 1180 \newmetrics{\2tr}{\lunga\breve\lunga\X\ \lunga\breve\lunga\X\ }
1173 1174 1181
As it may be seen, the denition of such metric sequences may contain almost anything; here \zeugma was used as well as \, but almost every macro dened in the previous parts may be freely used.
\metricstack
\metricstack is a command similar to \shortstack used to stack something over something else; specically the second argument over the third one; it was specically designed for use while typesetting metric sequences, but actually there is nothing that forbids to use it with any base character (typeset in text LR mode) and any superscript character belonging to a math alphabet (which is being set in scriptscript style, not in script style, as it happens with \shortstack.
\DeclareRobustCommand*{\metricstack}[2]% {$\mathord{\mathop{\hbox{#1\rule{\z@}{1ex}}}% 1184 \limits^{\scriptscriptstyle\relax#2\relax}}$}
1182 1183 1185
\svert
\svert is a short vertical rule that may be used, for example, with \metricstack for putting a small number over a dividing vertical bar in metric sequences.
1186
\newcommand*{\svert}{\vrule\@height.8ex\@depth.2ex\relax}
\textoverline
A L TEX has macro \underline that can be used in both text and math mode; there is nothing similar for overlining, therefore we dened a new command for this task.
\DeclareRobustCommand*{\textoverline}[1]{% \leavevmode\vbox{\setbox\z@\hbox{#1} 1189 \ialign{##\crcr 1190 \hbox to\wd\z@{\hrulefill}\crcr 1191 \noalign{\kern.4ex\nointerlineskip}% 1192 \hfil\box\z@\hfil\crcr}}}
1187 1188 1193
\verseskip bracedmetrics
The environment bracedmetrics is used primarily for setting some metric sequences one atop the other, with a certain alignment and grouped together with a right brace. We need therefore a length name \br@cedmetrics for measuring the width of this large metrics sequence stack; we need a command \verseskip for inserting a blank space before, after or in the middle of a metric sequence, that more or less is as wide as an integer number of metric symbols, and, last but not least, the environment itself for typesetting this large object containing the said metric sequences; see the documentation le teubner-doc.pdf for examining some examples.
49
\newenvironment{bracedmetrics}[1]{\def\Hfill{\leavevmode\hfill}% \settowidth{\br@cedmetrics}{#1}% 1200 \ifvmode\vskip1ex\fi 1201 $\displaystyle\left.% 1202 \vcenter\bgroup\hsize\br@cedmetrics\parindent\z@\parskip\z@ 1203 }{\egroup\right\}$}
1198 1199 1204
5.15
\TRON \GTRON \TROF \GTROF \treceon \traceoff
Debugging commands
Here there are some macros for turning on and o the tracing facilities of TEX, that turn out to be useful while debugging; they are accessible also to the end user. Global settings must be turned on and o globally; local settings die out by themselves when a group is closed, but it is a good habit to explicitly turn them out regardless of groups. Attention that when the tracing facilities are on and a page ship out takes place, the .log le receives a lot of material, and this le gets very large. In order to avoid logging too much information the trace package is loaded; this package give access to the macros \traceon and \traceoff that log a lot of information, except the redundant one, specically all the macros executed during any font change. Users dont realize the amount of processing done behind the scenes when with the New Font Selection Scheme (NFSS) a font change takes place; luckily enough modern processors are quite fast so that the compilation CPU time does not become too heavy. But if the TEX processing is logged, this amount of work implies thousands of lines of almost meaningless information when the purpose of logging depends on errors that are dicult to spot; Font changes are almost exempt from errors, so the processing of the inner workings need not be logged down. If the user needs to trace something in order to spot errors, s/he is invited to use the commands \traceon and \traceoff; commands \TRON and \TROF do log much more material, in particular font changes, but at least they action may be conned within groups or environments; \GTRON and \GTROF are global settings and cant be conned within groups or environments; sometimes they are necessary, but its important to turn o global tracing as soon as possible.
\RequirePackage{trace} \def\GTRON{\global\tracingcommands=\tw@ \global\tracingmacros=\tw@} 1207 \def\GTROF{\global\tracingcommands=\z@ \global\tracingmacros=\z@} 1208 \def\TRON{\tracingcommands=\tw@ \tracingmacros=\tw@} 1209 \def\TROF{\tracingcommands=\z@ \tracingmacros=\z@}
1205 1206 1210
50
5.16
When typesetting Greek it may occur to specify numbers written out as Milesian numerals; the greek option to the babel package denes a couple of macros for transforming explicit arabic numerals or counter contents as Milesian numerals. Since this package oers more possibilities in the choice of those non alphabetic characters used in the Milesian notation, such macros have to be redened. On the occasion we changed some little internal details so as to make such macros a little faster and more robust.
\Greeknumeral \greeknumeral \@ifStar \grtoday
Both \gereeknumeral and \Greeknumeral, the latter producing upper case Greek numerals, while the former produces lower case ones, resort to a service macro \gr@@numeral. But the new denition accepts the starred version; without the star the digit value 6 is represented with a stigma, while with the star that value is represented with a lowered digamma. The upper case version requires intermediate macros before using \MakeUppercase on the result in order to convert lower to upper case Milesian value symbols. This means that \gr@@numeral may work only with lower case symbols. It turned out that the normal redenition command \renewcommand produced fragile commands that broke out when used as arguments of other commands, specically the Greek date was broken when it was passed as the argument to the \date command of the class memoir; therefore I decided to redene the \@ifstar macro into another \@ifStar one so as not A to ddle with L TEX kernel commands. I dened also the lowercase version of the \grtoday date, since the babel package provides only the \today command with no control over the use of which type of numerals; \grtoday uses the lowercase Milesian numerals through the redened \greeknumeral macro.
\def\@ifStar#1#2{\def\@tempA{#1}\def\@tempB{#2}\futurelet\@tempC\@testStar} \def\@testStar{\ifx\@tempC*\bbl@afterelse\expandafter\@tempA\@gobble\else 1213 \bbl@afterfi\@tempB\fi} 1214 \DeclareRobustCommand*{\Greeknumeral}{% 1215 \let\n@vanta\Coppa\let\n@vecento\Sampi 1216 \@ifStar{\Gr@@kn@meral}{\Gr@@knum@ral}} 1217 \DeclareRobustCommand*{\greeknumeral}{% 1218 \let\n@vanta\varkoppa\let\n@vecento\sampi 1219 \@ifStar{\let\s@i\stigma\gr@@numeral}{\let\s@i\fLow\gr@@numeral}} 1220 \def\Gr@@kn@meral#1{\let\s@i\Stigma 1221 \expandafter\MakeUppercase\expandafter{\gr@@numeral{#1}}} 1222 \def\Gr@@knum@ral#1{\let\s@i\Digamma 1223 \expandafter\MakeUppercase\expandafter{\gr@@numeral{#1}}} 1224 \def\grtoday{{\expandafter\greeknumeral\expandafter{\the\day}}\space 1225 \gr@c@month\space{\expandafter\greeknumeral\expandafter{\the\year}}}
1211 1212 1226
\gr@@numeral
\gr@@numeral must do most of the processing; it must check that the argument is within the allowable range 1 999 999 and issue suitable warnings if not. On the other side, if the number is within the correct range, it must check in which decade it falls and must call other macros so as to produce the correct decimal digit Milesian symbol. Six such macros are needed because the allowable range 51
contains at maximum six decimal places. Apparently Milesian symbology allows to go beyond one million, but Apostolos Syropoulos, who originally wrote the code thought (correctly) that Milesian numbers would not be used for acrobatic performances but possibly for writing the Greek date with the AD year; six decimal places are more than enough for this purpose. \gr@ill@value was not redened from Apostolos Syropoulos babel denition; it simply issues a warning message about an argument out of range. The presence of the primitive command number in these macros is for two purposes: (a) transforms a counter contents into a sequence of digits tokens, and (b) if the argument is already a digit string, it removes any leading zeros. No braces are present because this string is examined sequentially one digit at a time from the leading position to the least signicant position; of course this means that the decimal zero is treated correctly even if Milesian symbols do not have the equivalent of a zero.
\def\gr@@numeral#1{% \ifnum#1<\@ne\space\gr@ill@value{#1}% 1229 \else 1230 \ifnum#1<10\relax\expandafter\gr@num@i\number#1% 1231 \else 1232 \ifnum#1<100\relax\expandafter\gr@num@ii\number#1% 1233 \else 1234 \ifnum#1<\@m\relax\expandafter\gr@num@iii\number#1% 1235 \else 1236 \ifnum#1<\@M\relax\expandafter\gr@num@iv\number#1% 1237 \else 1238 \ifnum#1<100000\relax\expandafter\gr@num@v\number#1% 1239 \else 1240 \ifnum#1<1000000\relax\expandafter\gr@num@vi\number#1% 1241 \else 1242 \space\gr@ill@value{#1}% 1243 \fi 1244 \fi 1245 \fi 1246 \fi 1247 \fi 1248 \fi 1249 \fi 1250 }
1227 1228
The next six macros transform single decimal digits into Milesian symbols. The argument to each macro is a single decimal digit; their positional value is determined by the calling a macro that invokes a dierent transformation routine for every position. To the right of the least signicant position there must be the symbol anwtonos, similar to an apostrophe, while to the left of each most significant symbol whose value is greater than 999 there must be a katwtonos symbol, similar to a lowered and inverted apostrophe. Zeros are examined in all macros, except the one for units, because their value cannot be printed but there still is the possibility that there are no more digits higher than zero, so that the anwtonos must be set. Macros \n@vanta and \n@vecento are set by the calling macros so 52
5.17
Attic numerals
Its true that Apostolos Siropoulos wrote also the athnum.sty extension package in order to typeset integer numbers with the Athenian or Attic notation; this representation of integer strictly positive integers was similar in a way to the Roman notation, based on a biquinalry representation of decimal digits (taking into account that there was not a symbol for zero) so as the Romans had the symbols for 1, 5, 10, 50, 100, 500 and 1000 (I, V, X, L, C, D, M) the Attic notation has symbols for the same sequence of decimal values extended with 10 000 and 50 000. While typesetting philological texts in Greek it might be necessary to use also the Attic notation. As the original Roman notation used to be purely additive (i.e. 9 = VIIII), so is the Attic notation.
\AtticNumeral \AtticCycl@
Therefore another conversion macro was devised that receives the value to be converted as its argument and checks that it falls between the boundaries; actually the lower boundary is zero, while the upper boundary was chosen to be 99 999, for no other reason that the lack of further symbols, beyond the value 50 000, would force to long sequences of identical symbols that are dicult to read. The athnum.sty
53
package allows to extend this range to 249 9999; should it be necessary, the user is invited to load that package and its transformation command \athnum. The user command \AtticNumeral is very simple, but it must be preceded by the denitions of the quinary symbols for 50, 500, 5000, and 50 000; such symbols are present in all the CB Greek fonts in all sizes, series and shapes; therefore the denitions must be subject to the LGR enconding:
\DeclareTextSymbol{\Vmiria}{\GRencoding@name}{5} \DeclareTextSymbol{\Vkilo}{\GRencoding@name}{4} 1281 \DeclareTextSymbol{\Vetto}{\GRencoding@name}{3} 1282 \DeclareTextSymbol{\Vdeka}{\GRencoding@name}{2}
1279 1280
The we need a command for issuing a warning message if the number to be transformed is out of range:
1283 1284
The real transformation algorithm is transfered to the auxiliary macro \AttiCycl@, where successive division by 10 allow to extract the various decimal digits of various weights maintaining the remainder in the original counter; each decimal digit is possibly divided into the quinary value and the remaining units up to 4; the the cycle is repeated untile the decimal units, that do not require the computation of the remainder and terminate the cycle. Notice that we use also the -TEX extended commands for integer computations; this implies that teubner mus be run with a suitably recent version of the typesetting engine that embeds the above extensions.
\def\AtticCycl@#1{% \bgroup 1294 \countdef\valore=252\countdef\cifra=250\relax 1295 \valore=#1\relax 1296 \cifra=\valore\divide\cifra10000\relax 1297 \valore=\numexpr\valore-\cifra*10000\relax 1298 \ifnum\cifra>4\relax\Vmiria \advance\cifra-5\fi 1299 \@whilenum\cifra>\z@\do{M\advance\cifra\m@ne}% 1300 \cifra=\valore\divide\cifra1000\relax 1301 \valore=\numexpr\valore-\cifra*1000\relax 1302 \ifnum\cifra>4\relax\Vkilo \advance\cifra-5\fi 1303 \@whilenum\cifra>\z@\do{Q\advance\cifra\m@ne}% 1304 \cifra=\valore\divide\cifra100\relax 1305 \valore=\numexpr\valore-\cifra*100\relax 1306 \ifnum\cifra>4\relax\Vetto \advance\cifra-5\fi
1292 1293
54
1307 1308 1309 1310 1311 1312 1313 1314 1315 1316
\@whilenum\cifra>\z@\do{H\advance\cifra\m@ne}% \cifra=\valore\divide\cifra10\relax \valore=\numexpr\valore-\cifra*10\relax \ifnum\cifra>4\relax\Vdeka \advance\cifra-5\fi \@whilenum\cifra>\z@\do{D\advance\cifra\m@ne}% \cifra=\valore \ifnum\cifra>4\relax P\advance\cifra-5\relax\fi \@whilenum\cifra>\z@\do{I\advance\cifra\m@ne}% \egroup}
5.18
These macros were originally dened by Guenter Milde in his le lgrenc-accents.def version 3.2 dated 2008-06-17 and released under the LPPL LaTeX Project Public License version 1.3 or ay later version. These macros were slightly modied by Claudio Beccari in this le, version 1.0 of 2010-04-13, in order to adapt them to the teubner.sty package, but they can be used independently of this package. This modied version is released again under the LPPL license version 1.3c or any later version. These denitions are a modest variation of the standard LGR encoded ligature set, in the sense that they dont rely on ligatures but on accent and composite text macros that address directly the accented glyphs. For example, if alpha with smooth spirit, acute accent and iota subscribed has to be inserted in the Greek text, the user can use either one of the following solutions: 1) >a| 2) \>a| Solution 1) saves hitting one key but breaks the kerning mechanism; Solution 2) requires hitting one more key but preserves the kerning mechanism. As explained in teubner-doc.pdf there might be some problems when typesetting in all capitals or in caps and small caps (just the initial is capitalized); in these cases the choice between either solution is not without consequences, especially if capitalization takes place behind the scenes, say, in typesetting a header that is stylized with \MakeUppercase. Only the diacritics that involve the breve ( ) and the macron ( ) are regular TEX accent macros and behave almost as ordinary OT1-like accents; actually they allow to stack several accents over the same base letter. There is no addressing of the marked glyphs, because the 256-font table cant accommodate so many glyphs. This le should be usable by inputting it directly even without requiring the polutoniko language attribute of the Greek language. For more details read the teubner.pdf and the teubner-doc.pdf les that are part of the teubner package documentation.
55
Thanks to Stanislav Kondratyev who spotted sneaky bugs in the denition of some commands; his testing and feedback resulted very precious. This upgraded version 3.4 of the teubner package derived from his feedback.
\providecommand*\GRencoding@name{LGR} \DeclareTextAccent{\u}{\GRencoding@name}{"1E} % breve 1319 \DeclareTextAccent{\=}{\GRencoding@name}{"1F} % macron
1317 1318 1320
\DeclareTextAccent{\Dialytika}{\GRencoding@name}{"22} % dialytika \DeclareTextAccent{\Oxia}{\GRencoding@name}{"27} % oxia 1323 \DeclareTextAccent{\Varia}{\GRencoding@name}{"60} % varia 1324 \DeclareTextAccent{\Perispomeni}{\GRencoding@name}{"7E} % perispomeni 1325 \DeclareTextCommand{\}{\GRencoding@name}{\Oxia} 1326 \DeclareTextCommand{\}{\GRencoding@name}{\Varia} 1327 \DeclareTextCommand{\~}{\GRencoding@name}{\Perispomeni} 1328 \DeclareTextCommand{\"}{\GRencoding@name}{\Dialytika}
1321 1322 1329
% % % %
\DeclareTextAccent{\DialytikaOxia}{\GRencoding@name}{"23} % oxia+dialytika \DeclareTextAccent{\DialytikaVaria}{\GRencoding@name}{"24} % varia+dialytika 1337 \DeclareTextAccent{\DialytikaPerispomeni}{\GRencoding@name}{"20} % perisp.+dial. \DeclareTextAccent{\DasiaOxia}{\GRencoding@name}{"56} % oxia+rough \DeclareTextAccent{\DasiaVaria}{\GRencoding@name}{"43} % varia+rough 1341 \DeclareTextAccent{\DasiaPerispomeni}{\GRencoding@name}{"40}% perisp.+rough
1339 1340 1342
\DeclareTextAccent{\PsiliOxia}{\GRencoding@name}{"5E} % oxia+smooth \DeclareTextAccent{\PsiliVaria}{\GRencoding@name}{"5F} % varia+smooth 1345 \DeclareTextAccent{\PsiliPerispomeni}{\GRencoding@name}{"5C}% perisp.+smooth 1346 % composite commands 1347 \DeclareTextCompositeCommand{\"}{\GRencoding@name}{}{\DialytikaOxia} 1348 \DeclareTextCompositeCommand{\"}{\GRencoding@name}{\}{\DialytikaOxia} 1349 \DeclareTextCompositeCommand{\"}{\GRencoding@name}{}{\DialytikaVaria} 1350 \DeclareTextCompositeCommand{\"}{\GRencoding@name}{\}{\DialytikaVaria} 1351 \DeclareTextCompositeCommand{\"}{\GRencoding@name}{~}{\DialytikaPerispomeni} 1352 \DeclareTextCompositeCommand{\"}{\GRencoding@name}{\~}{\DialytikaPerispomeni}
1343 1344 1353
\DeclareTextCompositeCommand{\}{\GRencoding@name}{"}{\DialytikaOxia} \DeclareTextCompositeCommand{\}{\GRencoding@name}{\"}{\DialytikaOxia} 1356 \DeclareTextCompositeCommand{\}{\GRencoding@name}{<}{\DasiaOxia} 1357 \DeclareTextCompositeCommand{\}{\GRencoding@name}{\<}{\DasiaOxia} 1358 \DeclareTextCompositeCommand{\}{\GRencoding@name}{>}{\PsiliOxia} 1359 \DeclareTextCompositeCommand{\}{\GRencoding@name}{\>}{\PsiliOxia}
1354 1355 1360 1361 1362
\DeclareTextCompositeCommand{\}{\GRencoding@name}{"}{\DialytikaVaria} \DeclareTextCompositeCommand{\}{\GRencoding@name}{\"}{\DialytikaVaria}
56
\DeclareTextCompositeCommand{\~}{\GRencoding@name}{"}{\DialytikaPerispomeni} \DeclareTextCompositeCommand{\~}{\GRencoding@name}{\"}{\DialytikaPerispomeni} 1370 \DeclareTextCompositeCommand{\~}{\GRencoding@name}{<}{\DasiaPerispomeni} 1371 \DeclareTextCompositeCommand{\~}{\GRencoding@name}{\<}{\DasiaPerispomeni} 1372 \DeclareTextCompositeCommand{\~}{\GRencoding@name}{>}{\PsiliPerispomeni} 1373 \DeclareTextCompositeCommand{\~}{\GRencoding@name}{\>}{\PsiliPerispomeni}
1368 1369 1374
\DeclareTextCompositeCommand{\Psili}{\GRencoding@name}{}{\PsiliOxia} \DeclareTextCompositeCommand{\Psili}{\GRencoding@name}{\}{\PsiliOxia} 1377 \DeclareTextCompositeCommand{\Psili}{\GRencoding@name}{}{\PsiliVaria} 1378 \DeclareTextCompositeCommand{\Psili}{\GRencoding@name}{\}{\PsiliVaria} 1379 \DeclareTextCompositeCommand{\Psili}{\GRencoding@name}{~}{\PsiliPerispomeni} 1380 \DeclareTextCompositeCommand{\Psili}{\GRencoding@name}{\~}{\PsiliPerispomeni}
1375 1376 1381
\DeclareTextCompositeCommand{\Dasia}{\GRencoding@name}{}{\DasiaOxia} \DeclareTextCompositeCommand{\Dasia}{\GRencoding@name}{\}{\DasiaOxia} 1384 \DeclareTextCompositeCommand{\Dasia}{\GRencoding@name}{}{\DasiaVaria} 1385 \DeclareTextCompositeCommand{\Dasia}{\GRencoding@name}{\}{\DasiaVaria} 1386 \DeclareTextCompositeCommand{\Dasia}{\GRencoding@name}{~}{\DasiaPerispomeni} 1387 \DeclareTextCompositeCommand{\Dasia}{\GRencoding@name}{\~}{\DasiaPerispomeni}
1382 1383 1388
5.19
Now come another bunch of Mildes macros for composite glyphs; none of them involves glyphs containing the subscript or adscript iota; this symbol, in facts is postxed to the previous glyph macro description, so its ligature takes place after the previous glyph macro has been expanded; remember also that with the high accents you can use both input strings, for example: > and \>; therefore you can use the simple ligature input and, if kerning is not working well with certain glyphs, you can just add a backslash in front of the ligature sequence and everything gets xed with proper ligatures. So, if a>u with certain fonts results in broken kerning, you just change it to a\>u and the kerning gets xed.
\DeclareTextComposite{\}{\GRencoding@name}{a}{128} \DeclareTextComposite{\Dasia}{\GRencoding@name}{a}{129} 1391 \DeclareTextComposite{\Psili}{\GRencoding@name}{a}{130} 1392 \DeclareTextComposite{\}{\GRencoding@name}{a}{136} 1393 \DeclareTextComposite{\Perispomeni}{\GRencoding@name}{a}{144} 1394 \DeclareTextComposite{\~}{\GRencoding@name}{a}{144} 1395 \DeclareTextComposite{\DasiaOxia}{\GRencoding@name}{a}{137} 1396 \DeclareTextComposite{\DasiaPerispomeni}{\GRencoding@name}{a}{145} 1397 \DeclareTextComposite{\DasiaVaria}{\GRencoding@name}{a}{131} 1398 \DeclareTextComposite{\PsiliOxia}{\GRencoding@name}{a}{138} 1399 \DeclareTextComposite{\PsiliPerispomeni}{\GRencoding@name}{a}{146}
1389 1390
57
\DeclareTextComposite{\PsiliVaria}{\GRencoding@name}{a}{139}
\DeclareTextComposite{\}{\GRencoding@name}{h}{152} \DeclareTextComposite{\Dasia}{\GRencoding@name}{h}{153} 1404 \DeclareTextComposite{\Psili}{\GRencoding@name}{h}{154} 1405 \DeclareTextComposite{\DasiaVaria}{\GRencoding@name}{h}{163} 1406 \DeclareTextComposite{\}{\GRencoding@name}{h}{160} 1407 \DeclareTextComposite{\DasiaOxia}{\GRencoding@name}{h}{161} 1408 \DeclareTextComposite{\PsiliOxia}{\GRencoding@name}{h}{162} 1409 \DeclareTextComposite{\PsiliVaria}{\GRencoding@name}{h}{171} 1410 \DeclareTextComposite{\Perispomeni}{\GRencoding@name}{h}{168} 1411 \DeclareTextComposite{\~}{\GRencoding@name}{h}{168} 1412 \DeclareTextComposite{\DasiaPerispomeni}{\GRencoding@name}{h}{169} 1413 \DeclareTextComposite{\PsiliPerispomeni}{\GRencoding@name}{h}{170}
1414
\DeclareTextComposite{\}{\GRencoding@name}{w}{176} \DeclareTextComposite{\Dasia}{\GRencoding@name}{w}{177} 1417 \DeclareTextComposite{\Psili}{\GRencoding@name}{w}{178} 1418 \DeclareTextComposite{\DasiaVaria}{\GRencoding@name}{w}{179} 1419 \DeclareTextComposite{\}{\GRencoding@name}{w}{184} 1420 \DeclareTextComposite{\DasiaOxia}{\GRencoding@name}{w}{185} 1421 \DeclareTextComposite{\PsiliOxia}{\GRencoding@name}{w}{186} 1422 \DeclareTextComposite{\PsiliVaria}{\GRencoding@name}{w}{187} 1423 \DeclareTextComposite{\Perispomeni}{\GRencoding@name}{w}{192} 1424 \DeclareTextComposite{\~}{\GRencoding@name}{w}{192} 1425 \DeclareTextComposite{\DasiaPerispomeni}{\GRencoding@name}{w}{193} 1426 \DeclareTextComposite{\PsiliPerispomeni}{\GRencoding@name}{w}{194}
1415 1416 1427
\DeclareTextComposite{\}{\GRencoding@name}{i}{200} \DeclareTextComposite{\Dasia}{\GRencoding@name}{i}{201} 1430 \DeclareTextComposite{\Psili}{\GRencoding@name}{i}{202} 1431 \DeclareTextComposite{\DasiaVaria}{\GRencoding@name}{i}{203} 1432 \DeclareTextComposite{\}{\GRencoding@name}{i}{208} 1433 \DeclareTextComposite{\DasiaOxia}{\GRencoding@name}{i}{209} 1434 \DeclareTextComposite{\PsiliOxia}{\GRencoding@name}{i}{210} 1435 \DeclareTextComposite{\PsiliVaria}{\GRencoding@name}{i}{211} 1436 \DeclareTextComposite{\Perispomeni}{\GRencoding@name}{i}{216} 1437 \DeclareTextComposite{\~}{\GRencoding@name}{i}{216} 1438 \DeclareTextComposite{\DasiaPerispomeni}{\GRencoding@name}{i}{217} 1439 \DeclareTextComposite{\PsiliPerispomeni}{\GRencoding@name}{i}{218} 1440 \DeclareTextComposite{\"}{\GRencoding@name}{i}{240} 1441 \DeclareTextComposite{\DialytikaVaria}{\GRencoding@name}{i}{241} 1442 \DeclareTextComposite{\DialytikaTonos}{\GRencoding@name}{i}{242} 1443 \DeclareTextComposite{\DialytikaPerispomeni}{\GRencoding@name}{i}{243}
1428 1429 1444
58
\DeclareTextComposite{\DasiaOxia}{\GRencoding@name}{u}{213} \DeclareTextComposite{\PsiliOxia}{\GRencoding@name}{u}{214} 1452 \DeclareTextComposite{\PsiliVaria}{\GRencoding@name}{u}{215} 1453 \DeclareTextComposite{\Perispomeni}{\GRencoding@name}{u}{220} 1454 \DeclareTextComposite{\~}{\GRencoding@name}{u}{220} 1455 \DeclareTextComposite{\DasiaPerispomeni}{\GRencoding@name}{u}{221} 1456 \DeclareTextComposite{\PsiliPerispomeni}{\GRencoding@name}{u}{222} 1457 \DeclareTextComposite{\"}{\GRencoding@name}{u}{244} 1458 \DeclareTextComposite{\DialytikaVaria}{\GRencoding@name}{u}{245} 1459 \DeclareTextComposite{\DialytikaTonos}{\GRencoding@name}{u}{246} 1460 \DeclareTextComposite{\DialytikaPerispomeni}{\GRencoding@name}{u}{247}
1450 1451 1461
\DeclareTextComposite{\}{\GRencoding@name}{e}{224} \DeclareTextComposite{\Dasia}{\GRencoding@name}{e}{225} 1464 \DeclareTextComposite{\Psili}{\GRencoding@name}{e}{226} 1465 \DeclareTextComposite{\DasiaVaria}{\GRencoding@name}{e}{227} 1466 \DeclareTextComposite{\}{\GRencoding@name}{e}{232} 1467 \DeclareTextComposite{\DasiaOxia}{\GRencoding@name}{e}{233} 1468 \DeclareTextComposite{\PsiliOxia}{\GRencoding@name}{e}{234} 1469 \DeclareTextComposite{\PsiliVaria}{\GRencoding@name}{e}{235} 1470 \DeclareTextComposite{\Dasia}{\GRencoding@name}{o}{229} 1471 \DeclareTextComposite{\}{\GRencoding@name}{o}{228} 1472 \DeclareTextComposite{\Psili}{\GRencoding@name}{o}{230} 1473 \DeclareTextComposite{\DasiaVaria}{\GRencoding@name}{o}{231} 1474 \DeclareTextComposite{\}{\GRencoding@name}{o}{236} 1475 \DeclareTextComposite{\DasiaOxia}{\GRencoding@name}{o}{237} 1476 \DeclareTextComposite{\PsiliOxia}{\GRencoding@name}{o}{238} 1477 \DeclareTextComposite{\PsiliVaria}{\GRencoding@name}{o}{239} 1478 \DeclareTextComposite{\Dasia}{\GRencoding@name}{r}{251} 1479 \DeclareTextComposite{\Psili}{\GRencoding@name}{r}{252}
1462 1463 1480
With capital letters the dialytika (diaeresis) is maintained on top of the letters I and U, while for the other capital letters the diacritics are typeset in front of them, not on top of them, as it is customary with Greek typesetting best practice; the Unicode capital accented glyphs do exist, but they should never be used; the CB fonts dont even contain them. There is no concern with kerning because the diacritics preceding the capital letters are not preceded by something else; what follows is kerned the usual way. With and specic kernings are provided, if the dialytika macro \" is used; kerning with the dialytika ligature temporarily works with kludges that should not be present in any font, but the CB fonts have them because the AU and AU kerning was terrible without them; now, with Mildes macros and or the pre-existing \Id and \Ud macros, should not be of any concern.
1481 1482 1483 1484 1485
\DeclareTextComposite{\"}{\GRencoding@name}{I}{219} \DeclareTextComposite{\"}{\GRencoding@name}{U}{223}
59
\DeclareTextCompositeCommand{\Perispomeni}{\GRencoding@name}{A}{A} \DeclareTextCompositeCommand{\Varia}{\GRencoding@name}{A}{A} 1489 \DeclareTextCompositeCommand{\Oxia}{\GRencoding@name}{A}{A} 1490 \DeclareTextCompositeCommand{\PsiliVaria}{\GRencoding@name}{A}{>A} 1491 \DeclareTextCompositeCommand{\DasiaVaria}{\GRencoding@name}{A}{<A} 1492 \DeclareTextCompositeCommand{\PsiliOxia}{\GRencoding@name}{A}{>A} 1493 \DeclareTextCompositeCommand{\DasiaOxia}{\GRencoding@name}{A}{<A} 1494 \DeclareTextCompositeCommand{\PsiliPerispomeni}{\GRencoding@name}{A}{>\char126A} 1495 \DeclareTextCompositeCommand{\DasiaPerispomeni}{\GRencoding@name}{A}{<\char126A} 1496 \DeclareTextCompositeCommand{\>}{\GRencoding@name}{A}{>A} 1497 \DeclareTextCompositeCommand{\<}{\GRencoding@name}{A}{<A}
1487 1488 1498
\DeclareTextCompositeCommand{\Psili}{\GRencoding@name}{E}{>E} \DeclareTextCompositeCommand{\Dasia}{\GRencoding@name}{E}{<E} 1501 \DeclareTextCompositeCommand{\Varia}{\GRencoding@name}{E}{E} 1502 \DeclareTextCompositeCommand{\Oxia}{\GRencoding@name}{E}{E} 1503 \DeclareTextCompositeCommand{\PsiliVaria}{\GRencoding@name}{E}{>E} 1504 \DeclareTextCompositeCommand{\DasiaVaria}{\GRencoding@name}{E}{<E} 1505 \DeclareTextCompositeCommand{\PsiliOxia}{\GRencoding@name}{E}{>E} 1506 \DeclareTextCompositeCommand{\DasiaOxia}{\GRencoding@name}{E}{<E} 1507 \DeclareTextCompositeCommand{\>}{\GRencoding@name}{E}{>E} 1508 \DeclareTextCompositeCommand{\<}{\GRencoding@name}{E}{<E}
1499 1500 1509
\DeclareTextCompositeCommand{\Psili}{\GRencoding@name}{H}{>H} \DeclareTextCompositeCommand{\Dasia}{\GRencoding@name}{H}{<H} 1512 \DeclareTextCompositeCommand{\Perispomeni}{\GRencoding@name}{H}{H} 1513 \DeclareTextCompositeCommand{\Varia}{\GRencoding@name}{H}{H} 1514 \DeclareTextCompositeCommand{\Oxia}{\GRencoding@name}{H}{H} 1515 \DeclareTextCompositeCommand{\PsiliVaria}{\GRencoding@name}{H}{>H} 1516 \DeclareTextCompositeCommand{\DasiaVaria}{\GRencoding@name}{H}{<H} 1517 \DeclareTextCompositeCommand{\PsiliOxia}{\GRencoding@name}{H}{>H} 1518 \DeclareTextCompositeCommand{\DasiaOxia}{\GRencoding@name}{H}{<H} 1519 \DeclareTextCompositeCommand{\PsiliPerispomeni}{\GRencoding@name}{H}{>\char126H} 1520 \DeclareTextCompositeCommand{\DasiaPerispomeni}{\GRencoding@name}{H}{<\char126H} 1521 \DeclareTextCompositeCommand{\>}{\GRencoding@name}{H}{>H} 1522 \DeclareTextCompositeCommand{\<}{\GRencoding@name}{H}{<H}
1510 1511 1523
\DeclareTextCompositeCommand{\Psili}{\GRencoding@name}{I}{>I} \DeclareTextCompositeCommand{\Dasia}{\GRencoding@name}{I}{<I} 1526 \DeclareTextCompositeCommand{\Perispomeni}{\GRencoding@name}{I}{I} 1527 \DeclareTextCompositeCommand{\Varia}{\GRencoding@name}{I}{I} 1528 \DeclareTextCompositeCommand{\Oxia}{\GRencoding@name}{I}{I} 1529 \DeclareTextCompositeCommand{\PsiliVaria}{\GRencoding@name}{I}{>I} 1530 \DeclareTextCompositeCommand{\DasiaVaria}{\GRencoding@name}{I}{<I} 1531 \DeclareTextCompositeCommand{\PsiliOxia}{\GRencoding@name}{I}{>I} 1532 \DeclareTextCompositeCommand{\DasiaOxia}{\GRencoding@name}{I}{<I} 1533 \DeclareTextCompositeCommand{\PsiliPerispomeni}{\GRencoding@name}{I}{>\char126I} 1534 \DeclareTextCompositeCommand{\DasiaPerispomeni}{\GRencoding@name}{I}{<\char126I} 1535 \DeclareTextCompositeCommand{\>}{\GRencoding@name}{I}{>I} 1536 \DeclareTextCompositeCommand{\<}{\GRencoding@name}{I}{<I}
1524 1525
60
\DeclareTextCompositeCommand{\Psili}{\GRencoding@name}{O}{>O} \DeclareTextCompositeCommand{\Dasia}{\GRencoding@name}{O}{<O} 1543 \DeclareTextCompositeCommand{\Varia}{\GRencoding@name}{O}{O} 1544 \DeclareTextCompositeCommand{\Oxia}{\GRencoding@name}{O}{O} 1545 \DeclareTextCompositeCommand{\PsiliVaria}{\GRencoding@name}{O}{>O} 1546 \DeclareTextCompositeCommand{\DasiaVaria}{\GRencoding@name}{O}{<O} 1547 \DeclareTextCompositeCommand{\PsiliOxia}{\GRencoding@name}{O}{>O} 1548 \DeclareTextCompositeCommand{\DasiaOxia}{\GRencoding@name}{O}{<O} 1549 \DeclareTextCompositeCommand{\>}{\GRencoding@name}{O}{>O} 1550 \DeclareTextCompositeCommand{\<}{\GRencoding@name}{O}{<O}
1541 1542 1551
\DeclareTextCompositeCommand{\Dasia}{\GRencoding@name}{U}{<U} \DeclareTextCompositeCommand{\DasiaVaria}{\GRencoding@name}{U}{<U} 1554 \DeclareTextCompositeCommand{\Perispomeni}{\GRencoding@name}{U}{U} 1555 \DeclareTextCompositeCommand{\Varia}{\GRencoding@name}{U}{U} 1556 \DeclareTextCompositeCommand{\Oxia}{\GRencoding@name}{U}{U} 1557 \DeclareTextCompositeCommand{\DasiaOxia}{\GRencoding@name}{U}{<U} 1558 \DeclareTextCompositeCommand{\DasiaPerispomeni}{\GRencoding@name}{U}{<\char126U} 1559 \DeclareTextCompositeCommand{\<}{\GRencoding@name}{U}{<U} 1560 \DeclareTextCompositeCommand{\Dialytica}{\GRencoding@name}{U}{\"U} 1561 \DeclareTextCompositeCommand{\DialytikaOxia}{\GRencoding@name}{U}{\"U} 1562 \DeclareTextCompositeCommand{\DialyticaDasia}{\GRencoding@name}{U}{\"U}
1552 1553 1563
\DeclareTextCompositeCommand{\Psili}{\GRencoding@name}{W}{>W} \DeclareTextCompositeCommand{\Dasia}{\GRencoding@name}{W}{<W} 1566 \DeclareTextCompositeCommand{\Perispomeni}{\GRencoding@name}{W}{W} 1567 \DeclareTextCompositeCommand{\Varia}{\GRencoding@name}{W}{W} 1568 \DeclareTextCompositeCommand{\Oxia}{\GRencoding@name}{W}{W} 1569 \DeclareTextCompositeCommand{\PsiliVaria}{\GRencoding@name}{W}{>W} 1570 \DeclareTextCompositeCommand{\DasiaVaria}{\GRencoding@name}{W}{<W} 1571 \DeclareTextCompositeCommand{\PsiliOxia}{\GRencoding@name}{W}{>W} 1572 \DeclareTextCompositeCommand{\DasiaOxia}{\GRencoding@name}{W}{<W} 1573 \DeclareTextCompositeCommand{\PsiliPerispomeni}{\GRencoding@name}{W}{>\char126W} 1574 \DeclareTextCompositeCommand{\DasiaPerispomeni}{\GRencoding@name}{W}{<\char126W} 1575 \DeclareTextCompositeCommand{\>}{\GRencoding@name}{W}{>W} 1576 \DeclareTextCompositeCommand{\<}{\GRencoding@name}{W}{<W}
1564 1565
During the year 2010 this package teubner.sty was upgraded in order to allow using the CBgreek fonts even when other Latin fonts, dierent from the standard CM and LM ones are selected for typesetting text with the Latin script. At the same time Antonis Tsolomitis uploaded a new package in order to 61
let Greek users use some Greek fonts that match the Times eXtended ones. In order to use the de facto default encoding LGR for Greek fonts, he produced the necessary lgrtxr.fd, lgrtxss.fd, lgrtxtt.fd, font denition les that allow the font switching implied by the greek option to the babel package. These les take precedence over the mechanism outlined in section 5.2, because command \substitutefontfamily rst tests the existence of lgrtxr.fd, and, if this is not available, it may generate a specic one suitable for working smoothly with teubner.sty. Now if Tsolomitis les are available on the main system tree, these take precedence and the teubner compatible les are not generated. Unfortunately Tsolomitis fonts, although better suited to match the TX fonts, are well adapted to typeset common Greek text, but they are not adapted to typeset philological texts. We therefore avoid this clash by creating a teubnertx.sty le. This extension denes the families and shapes available with the familiar fond denition les, but the information gets input by teubner.sty at the begin document time, without resorting to any .fd le. May be more information is loaded than is strictly necessary, but it better to do this way than to clash with other packages.
1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607
\DeclareFontFamily{LGR}{txr}{} \DeclareFontShape{LGR}{txr}{m}{n}{<->ssub * cmr/m/n}{} \DeclareFontShape{LGR}{txr}{m}{it}{<->ssub * cmr/m/it}{} \DeclareFontShape{LGR}{txr}{m}{sl}{<->ssub * cmr/m/sl}{} \DeclareFontShape{LGR}{txr}{m}{sc}{<->ssub * cmr/m/sc}{} \DeclareFontShape{LGR}{txr}{b}{n}{<->ssub * cmr/bx/n}{} \DeclareFontShape{LGR}{txr}{b}{it}{<->ssub * cmr/bx/it}{} \DeclareFontShape{LGR}{txr}{b}{sl}{<->ssub * cmr/bx/sl}{} \DeclareFontShape{LGR}{txr}{b}{sc}{<->ssub * cmr/bx/sc}{} \DeclareFontShape{LGR}{txr}{bx}{n}{<->ssub * cmr/bx/n}{} \DeclareFontShape{LGR}{txr}{bx}{it}{<->ssub * cmr/bx/it}{} \DeclareFontShape{LGR}{txr}{bx}{sl}{<->ssub * cmr/bx/sl}{} \DeclareFontShape{LGR}{txr}{bx}{sc}{<->ssub * cmr/bx/sc}{} \DeclareFontShape{LGR}{txr}{m}{li}{<->ssub * cmr/m/li}{} \DeclareFontShape{LGR}{txr}{b}{li}{<->ssub * cmr/b/li}{} \DeclareFontShape{LGR}{txr}{bx}{li}{<->ssub * cmr/bx/li}{} \DeclareFontShape{LGR}{txr}{m}{ui}{<->ssub * cmr/m/ui}{} \DeclareFontShape{LGR}{txr}{b}{ui}{<->ssub * cmr/m/ui}{} \DeclareFontShape{LGR}{txr}{bx}{ui}{<->ssub * cmr/bx/ui}{} \DeclareFontShape{LGR}{txr}{m}{rs}{<->ssub * cmr/m/rs}{} \DeclareFontShape{LGR}{txr}{b}{rs}{<->ssub * cmr/m/rs}{} \DeclareFontShape{LGR}{txr}{bx}{rs}{<->ssub * cmr/bx/rs}{} \DeclareFontFamily{LGR}{txss}{} \DeclareFontShape{LGR}{txss}{m}{n}{<->ssub * cmss/m/n}{} \DeclareFontShape{LGR}{txss}{m}{it}{<->ssub * cmss/m/it}{} \DeclareFontShape{LGR}{txss}{m}{sl}{<->ssub * cmss/m/sl}{} \DeclareFontShape{LGR}{txss}{m}{sc}{<->ssub * cmss/m/sc}{} \DeclareFontShape{LGR}{txss}{b}{n}{<->ssub * cmss/bx/n}{} \DeclareFontShape{LGR}{txss}{b}{it}{<->ssub * cmss/bx/it}{}
62
1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627
\DeclareFontShape{LGR}{txss}{b}{sl}{<->ssub * cmss/bx/sl}{} \DeclareFontShape{LGR}{txss}{b}{sc}{<->ssub * cmss/bx/sc}{} \DeclareFontShape{LGR}{txss}{bx}{n}{<->ssub * cmss/bx/n}{} \DeclareFontShape{LGR}{txss}{bx}{it}{<->ssub * cmss/bx/it}{} \DeclareFontShape{LGR}{txss}{bx}{sl}{<->ssub * cmss/bx/sl}{} \DeclareFontShape{LGR}{txss}{bx}{sc}{<->ssub * cmss/bx/sc}{} \DeclareFontFamily{LGR}{txtt}{\hyphenchar=-1} \DeclareFontShape{LGR}{txtt}{m}{n}{<->ssub * cmtt/m/n}{} \DeclareFontShape{LGR}{txtt}{m}{it}{<->ssub * cmtt/m/it}{} \DeclareFontShape{LGR}{txtt}{m}{sl}{<->ssub * cmtt/m/sl}{} \DeclareFontShape{LGR}{txtt}{m}{sc}{<->ssub * cmtt/m/sc}{} \DeclareFontShape{LGR}{txtt}{b}{n}{<->ssub * cmtt/bx/n}{} \DeclareFontShape{LGR}{txtt}{b}{it}{<->ssub * cmtt/bx/it}{} \DeclareFontShape{LGR}{txtt}{b}{sl}{<->ssub * cmtt/bx/sl}{} \DeclareFontShape{LGR}{txtt}{b}{sc}{<->ssub * cmtt/bx/sc}{} \DeclareFontShape{LGR}{txtt}{bx}{n}{<->ssub * cmtt/bx/n}{} \DeclareFontShape{LGR}{txtt}{bx}{it}{<->ssub * cmtt/bx/it}{} \DeclareFontShape{LGR}{txtt}{bx}{sl}{<->ssub * cmtt/bx/sl}{} \DeclareFontShape{LGR}{txtt}{bx}{sc}{<->ssub * cmtt/bx/sc}{}
63