% \iffalse meta comment % File: teubner.dtx Copyright (C) 2001-2004 Claudio Beccari % % It may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % % \fi % %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} % \iffalse %<*dtx> \ProvidesFile{teubner.dtx} % %\NeedsTeXFormat{LaTeX2e} %\ProvidesPackage{teubner} %\ProvidesFile{teubner.dtx} [2008/02/10 v.2.2d extensions for Greek philology] % %<*driver> \documentclass{ltxdoc} \GetFileInfo{teubner.dtx} \title{The \textsf{teubner} package\\ Extensions for Greek philology% \thanks{This file has version number \fileversion, last revised on \filedate.}} \author{Claudio Beccari\\\texttt{claudio.beccari@gmail.com}} \date{} \providecommand\babel{\textsf{babel}} \newcommand\lbr{\char123\relax}\newcommand\rbr{\char125\relax} \newenvironment{sintassi}{% \begin{quote}\parskip0pt\hfuzz10pt\ttfamily\obeylines }{% \end{quote}\ignorespaces } \newcommand*\acro[1]{\expandafter\textsc\expandafter{\MakeLowercase{#1}}} \begin{document} \maketitle \DocInput{teubner.dtx} \end{document} % % \fi % % \CheckSum{4013} % % \begin{abstract} % This extension package complements the greek option of the \babel\ % package so as to enable the use of the Lipsian\footnote{What 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.} % 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 defined and typeset by means of a % companion font \texttt{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 file % \texttt{teubner-doc.pdf} which, as a regular pdf file, 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 \texttt{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 \textsf{teubner} package download the % missing fonts directly from one of the \acro{CTAN} archives. % \end{abstract} % % \section{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 file 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 Ciacchi's ``invitation'' arrived when I was almost finished % 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 Company's classical works of ancient Greek poetry are considered among % the best ever published. The name of this file 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 file it is very likely that % you don't have the suitable Greek fonts and you must still download % all or some of them. Therefore a companion % file \texttt{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 \texttt{greek} option to the \babel\ % package; should he forget, this package will complain. But once the % \texttt{greek} option is properly declared, this package verifies that the % |polutonikogreek| dialect is selected, or that the |polutoniko| attribute % is set. This choice depends on the particular version of 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 mark is not forbidden, % it's 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 % \acro{ctan} in the directory \texttt{/tex-archive/fonts/greek/cb} have % been completed with the new files for the Lipsian fonts,and the metric % symbols font \texttt{gmtr????.*}; % the latter does not need a formal font definition file, because % the necessary definitions 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 % configuration to use the Type~1 font in one size, 10\,pt, but, thanks % scaling, these can be used at any size; this version of \textsf{teubner} % is compatible with this reduced set. If optical sizes are desired for % a more professional typesetting, the \acro{ctan} archives contain also % the \textsf{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 prefix notation; with a Greek keyboard and file % \texttt{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 % file 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 prefix 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 prefix notation; reading a Greek text % on the screen while editing the input \texttt{.tex} file when a Latin % keyboard and such macros are used may be very strange, but authors get % used to it, and agree that the effort is worth the result. % % \section{Environments} % I apologize if I chose Italian names for verse environments; I wanted to % use names very different from the corresponding English ones, but at the % same time easily recognizable. % % \DescribeEnv{versi}\DescribeMacro{\verso} The environment \texttt{versi} % is used to typeset verses % in line, without an 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 specific 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{sintassi} % \bslash begin\lbr versi\rbr\lbr\meta{string}\rbr{} % \meta{verse}\bslash verso[\meta{starting number}]\meta{verse}\bslash verso % \meta{verse}\bslash verso\meta{verse}\dots{} % \bslash end\lbr versi\rbr % \end{sintassi} % where, of course, \meta{starting number} is required only for the first % instance of |\verso| or when numbering must be restarted, for example % after an ellipsis. % % \DescribeEnv{Versi} The environment \texttt{Versi} is similar to the % standard \LaTeX\ environment \texttt{verse}, except verses are numbered % on multiples of~5; the opening statement requires the \meta{starting % number} as an optional argument; if this optional argument is not specified, % the starting number is assumed to be~1. % \begin{sintassi} % \bslash begin\lbr Versi\rbr[\meta{starting number}] % \meta{verse}\bslash\bslash{}\meta{*}[\meta{vertical space}] % \meta{verse}\bslash\bslash{} % \dots{} % \bslash end\lbr Versi\rbr %\end{sintassi} % % \DescribeEnv{VERSI}\DescribeMacro{\SubVerso}\DescribeMacro{\NoSubVerso} % The environment \texttt{VERSI} allows for two verse % enumerations; the main enumeration is identical to the one performed by % the previous environment \texttt{Versi}, while the secondary enumeration % is in smaller digits and normally numbers consecutive verses, except % that it can be turned on and off; the verses that lack the secondary % enumeration are indented by moving them to the right. % \begin{sintassi} % \bslash begin\lbr VERSI\rbr[\meta{starting principal number}] % \meta{verse}\bslash\bslash\meta{*}[\meta{vertical space}] % \bslash SubVerso[\meta{starting secondary number}] % \meta{verse}\bslash\bslash\meta{*}[\meta{vertical space}] % \dots{} % \bslash NoSubVerso % \meta{verse}\bslash\bslash\meta{*}[\meta{vertical space}] % \dots % \bslash end\lbr VERSI\rbr % \end{sintassi} % where if \meta{starting principal number} is missing, 1 is assumed, % while if \meta{starting secondary number} is missing, the enumeration % is continued from the next available integer. Of course % \meta{starting secondary number} is used again when the secondary % enumeration must be restarted; there are no means to restart the % principal enumeration. % % \DescribeEnv{bracedmetrics} The previous environments accept \meta{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 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 \texttt{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 specifies the width of the % block so as to align properly all the symbols even in nested environments. % \begin{sintassi} % \bslash begin\lbr bracedmetrics\rbr\lbr\meta{length}\rbr{} % \meta{metric pattern}\bslash\bslash % \meta{metric pattern}\bslash\bslash % \dots{} % \bslash end\lbr bracedmetrics\rbr % \end{sintassi} % \DescribeMacro{\verseskip}\DescribeMacro{\Hfill} Within the \meta{metric pattern} % it is possible to flush right the symbols % by prefixing the whole string with a |\Hfill| command; the \meta{length} may % be specified as an integer multiple of a ``long'' symbol by means of %\begin{sintassi} % \bslash verseskip\lbr\meta{number}\rbr %\end{sintassi} % The macro |\verseskip| can be used also within \meta{metric pattern} % in order to space out metric symbols. % % \section{Commands and symbols} % This package defines 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 file \texttt{teubner-doc.pdf} for a complete list of commands % and symbols. % % \DescribeMacro{\newmetrics} Here it might be useful to describe a command % for defining metric sequences, so as to shorten the definition of metric verses; % this new command is |\newmetrics| and may be used for the definition of new commands % whose name \emph{may start with one digit}: precisely this digit may be one % of~2, 3,~4. Even if \LaTeX\ does not allow macros to contain both digits % and letters, other service macros have been defined so as to handle these % special control sequences even if they start with \emph{one} digit strictly lower % than~5. The syntax is: % \begin{sintassi} % \bslash newmetrics\lbr\meta{control sequence}\rbr\lbr\meta{definition}\rbr % \end{sintassi} % where \meta{definition} consists in general of a sequence of metric commands such as % |\longa|, |\brevis|, |\anceps|, etc. % % \StopEventually{} % % \section{Code} % The beginning of the file starts with the traditional stuff; % as usual we provide also the means for avoiding reading this file again. % \begin{macrocode} %<*package> \ifx\teubner\undefined \def\teubner{teubner}\else\expandafter\endinput \fi % \end{macrocode} % In order to use the PostScript pfb fonts (CM, EC, and CB) it is necessary to know if % we are dealing with \LaTeX\ or pdf\LaTeX; this is necessary because apparently the % pfb math extensible fonts derived from the \textsf{META\-FONT} counterparts do not have exactly the same % effective 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 appears a little too fat and does not join exactly le left mark. Therefore we % define a new boolean\footnote{Thanks to Yuqing Deng who spotted an error somewhere else, % that followed from an improper definition of the state variable \texttt{\string\ifPDF} such % that the program performed correctly under \texttt{pdflatex} and crashed under \texttt{latex}.}: % \begin{macrocode} \newif\ifPDF \PDFfalse \@ifundefined{pdfoutput}{\PDFfalse}{\ifnum\pdfoutput>\z@\PDFtrue\fi} % \end{macrocode} % When \texttt{teubner.sty} is input the language Greek must have been already defined; % otherwise an error message is issued and processing is terminated. % \begin{macrocode} \ifx\captionsgreek\undefined \PackageError{teubner}{Greek language unknown!\MessageBreak I am not going to use Lipsian fonts and Scholars' signs\MessageBreak if Greek is unknown.\MessageBreak Use the babel package with the \texttt{greek} option.\MessageBreak Type X to exit.}% {Type X to exit.} \fi % \end{macrocode} % 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 \texttt{teubner.sty} accepts some options it is necessary to provide % their definitions; in particular the |\or| control sequence conflicts % with the |\or| primitive command used within the syntax of |\ifcase|\footnote{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 \texttt{\string\oR}.}; % |\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: % \begin{sintassi} % \bslash \meta{vowel}\meta{first diacritic}\meta{second diacritic}\meta{third diacritic} % \textrm{where} % \meta{first diacritic} \textrm{is \texttt{d} or \texttt{r} or \texttt{s} for diaeresis, rough or smooth breadth} % \meta{second diacritic} \textrm{is \texttt{c} or \texttt{a} or \texttt{g} for circumflex or acute or grave} % \meta{third diacritic} \textrm{is \texttt{i} for iota subscript or adscript} % \end{sintassi} % 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 |ssub*mtr/m/n}{} \newcommand*\metricsfont{\fontencoding{U}\fontfamily{mtr}\upshape} % \end{macrocode} % \end{macro} % 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. % \begin{macrocode} \RequirePackage{exscale} % \end{macrocode} % % 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 % or~3.7; 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. %\begin{macro}{\GreekName} During the language switching operations |\GreekName| % distinguishes the dialect or the main language whose attribute % gets set and, evidently, becomes effective when the main language \texttt{greek} % is in force. % \begin{macrocode} \ifx\languageattribute\undefined \def\GreekName{polutonikogreek}% \else \languageattribute{greek}{polutoniko}\def\GreekName{greek}% \fi % \end{macrocode} %\end{macro} %\begin{macro}{\previouslanguage} %\begin{macro}{\previousencoding} The ``default'' language is defined as the ``previous'' % language; similarly the ``default'' encoding is defined as the ``previous'' encoding; these % are the language and the encoding in force when the document starts; this is why such macros % are defined at the beginning of the document: % \begin{macrocode} \AtBeginDocument{% \edef\previouslanguage{\languagename}% \edef\previousencoding{\f@encoding}% } % \end{macrocode} % Nevertheless 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 \emph{after} any other package that sets o resets font definitions, % in particular if font encoding is defined; 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 specified, remember that % the last language name becomes the default language at begin document; never % specify \texttt{greek} as the last language option\dots, well, unless you are going to write % all your document in Greek; in this case the only switching you need is between % Didot characters and Lipsian characters (which is simply done by means of |\upshape| % and |\itshape|); in any case specify the polytonic spelling. %\end{macro} %\end{macro} % %\begin{macro}{\Lipsiakostext} |\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\~\GRcirc| is required because swithching % on and off may reset the active tilde and connected macros definitions. |\~| in Greek % must set the circumflex accent, so we make sure that this really occurs. % \begin{macrocode} \DeclareRobustCommand\Lipsiakostext{\edef\previouslanguage{\languagename}% \edef\previousencoding{\f@encoding}% \expandafter\select@language\expandafter{\GreekName}% \let\~\GRcirc\let~\greek@tilde\itshape} % \end{macrocode} %\end{macro} %\begin{macro}{\NoLipsiakostext} |\NoLipsiakostext| is the opposite declaration % that undoes everything that was done with |\Lipsiakostext|. % \begin{macrocode} \DeclareRobustCommand\NoLipsiakostext{% \expandafter\select@language\expandafter{\previouslanguage}% \expandafter\fontencoding\expandafter{\previousencoding}\upshape \edef\previouslanguage{\languagename}% \edef\previousencoding{\f@encoding}\bbl@activate{~}% } % \end{macrocode} %\end{macro} %\begin{macro}{\textLipsias} |\textLipsias| is a command that typesets its argument % with the |\Lipsiakostext| declaration in force; actually the external font encoding % and language are not memorized, because the pertinent Greek commands are just local. % \begin{macrocode} \DeclareRobustCommand\textLipsias[1]{{% \expandafter\select@language\expandafter{\GreekName}% \expandafter\fontencoding\expandafter{\GRencoding@name}% \itshape\let\~\GRcirc\let~\greek@tilde#1}% } % \end{macrocode} %\end{macro} %\begin{macro}{\textDidot} |\textDidot| is a similar macro where the common upright % Greek characters are selected; it goes by itself that if |\textit| is specified % within the |\textDidot| argument, the typesetting is or becomes identical with what % one can obtain with the |\textLipsias| command. % \begin{macrocode} \DeclareRobustCommand\textDidot[1]{{% \expandafter\select@language\expandafter{\GreekName}% \expandafter\fontencoding\expandafter{\GRencoding@name}% \upshape\let\~\GRcirc\let~\greek@tilde#1}% } % \end{macrocode} %\end{macro} %\begin{macro}{\textlatin} |\textlatin| is a redefinition 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. % \begin{macrocode} \DeclareRobustCommand\textlatin[1]{\edef\externalencoding{\f@encoding}{% \expandafter\select@language\expandafter{\previouslanguage}% \expandafter\fontencoding\expandafter{\previousencoding}% \bbl@activate{~}\upshape#1}% \expandafter\fontencoding\expandafter{\externalencoding}\selectfont} % \end{macrocode} %\end{macro} % % Now we start the specific additions introduced with this package. % % \begin{macro}{\numero} % We define a short macro |\numero| used to strip off the pt part of a dimension value % as displayed by \TeX\ itself; this service macro is going to be used quite a lot for % getting the font slant per point parameter so as to be able to put in their correct % position various signs over or under other signs. % \begin{macrocode} {% \catcode`p=12\catcode`t=12\gdef\numero#1pt{#1}% } % \end{macrocode} % \end{macro} % % With the help of such service macro we are going to define a certain number of % ``lift accent'' macros or ``put cedilla'' macros that work with both upright and % slanted fonts, although they contain different parameters for Latin compared to % Greek alphabets. % \begin{macro}{\lift@accent} The first ``lift accent'' macro just puts an accent over % a letter, without inserting any space between them; the first 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! % \begin{macrocode} \newcommand*\lift@accent[2]{\leavevmode {\edef\slant@{\expandafter\numero\the\fontdimen1\font}% \dimen@=\z@\setbox\z@\hbox{\char#1}\advance\dimen@-.5\wd\z@ \setbox\tw@\hbox{i}\setbox\z@\hbox{#2}% \ifdim\wd\z@>\wd\tw@\advance\dimen@ .5\wd\z@ \else\advance\dimen@ .3\wd\z@\fi \ifx#2a\advance\dimen@-.1\wd\z@\fi \ifx#2h\advance\dimen@.05\wd\z@\fi \@tempdima\ht\z@\advance\@tempdima-1ex\relax \advance\dimen@\slant@\@tempdima \raise\@tempdima\hbox to\z@{\kern\dimen@\char#1\relax\hss}\box\z@}} % \end{macrocode} % \end{macro} % % % \begin{macro}{\Lift@accent} The second ``lift accent'' macro behaves % as the first one except it interposes a small % vertical distance between the accent and the letter: % \begin{macrocode} \newcommand*\Lift@accent[2]{\leavevmode {\edef\slant@{\expandafter\numero\the\fontdimen1\font}% \dimen@=\z@\setbox\z@\hbox{\char#1}\advance\dimen@-.5\wd\z@ \setbox\tw@\hbox{i}\setbox\z@\hbox{#2}% \ifdim\wd\z@>\wd\tw@\advance\dimen@ .5\wd\z@ \else\advance\dimen@ .3\wd\z@\fi \ifx#2a\advance\dimen@-.1\wd\z@\fi \ifx#2h\advance\dimen@.05\wd\z@\fi \@tempdima\ht\z@\advance\@tempdima-1ex\advance\@tempdima.1ex\relax \advance\dimen@\slant@\@tempdima \raise\@tempdima\hbox to\z@{\kern\dimen@\char#1\relax\hss}\box\z@}} % \end{macrocode} % \end{macro} % % \begin{macro}{\LIFT@accent} The third ``lift accent'' macro behaves as the first one, % except it interposes a specified vertical space between the letter and the accent; % this space is specified as the second argument: % \begin{macrocode} \newcommand*\LIFT@accent[3]{\leavevmode {\edef\slant@{\expandafter\numero\the\fontdimen1\font}% \dimen@=\z@\setbox\z@\hbox{\char#1}\advance\dimen@-.5\wd\z@ \setbox\tw@\hbox{i}\setbox\z@\hbox{#3}% \ifdim\wd\z@>\wd\tw@\advance\dimen@ .5\wd\z@ \else\advance\dimen@ .3\wd\z@\fi \ifx#2a\advance\dimen@-.1\wd\z@\fi \ifx#2h\advance\dimen@.05\wd\z@\fi \@tempdima\ht\z@\advance\@tempdima-1ex\relax \def\@tempA{#2}\ifx\@tempA\undefined\else \advance\@tempdima#2\fi\let\@tempA\undefined \advance\dimen@\slant@\@tempdima \raise\@tempdima\hbox to\z@{\kern\dimen@\char#1\relax\hss}\box\z@}} % \end{macrocode} % \end{macro} % % 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 example, for % setting the Scandinavian ring (from a Latin font) over a Greek letter (from a Greek font). % % \begin{macro}{\cap@} The first such unusual diacritical mark is a small cap, % a small upside down breve sign, that is in position~1 of the Greek font table. % \begin{macrocode} \DeclareRobustCommand{\cap@}[1]{\leavevmode {\edef\slant@{\expandafter\numero\the\fontdimen1\font}% \setbox\tw@\hbox{\fontencoding{\GRencoding@name}\selectfont \char1}\dimen@-.5\wd\tw@ \setbox\z@\hbox{#1}% \advance\dimen@ .5\wd\z@ \@tempdima\ht\z@\advance\@tempdima.55ex\relax \advance\dimen@\slant@\@tempdima \ifx\cf@encoding\GRencoding@name\else \ifx#1k\advance\dimen@-.3\wd\tw@\fi\fi \raise\@tempdima\hbox to\z@{\kern\dimen@\box\tw@\relax\hss}\box\z@}} % \end{macrocode} % The |\ifx\cf@encoding\GRencoding@name| conditional construct shows that this % macro behaves differently with different 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 vowels. % \end{macro} % \begin{macro}{\cap} By means of the above |\cap@| macro we can define three equivalent % commands to be used either when the Greek encoding is in force, or when one of the % Latin encodings is in force: % \begin{macrocode} \DeclareTextCommand{\cap}{\GRencoding@name}{\cap@} \DeclareTextCommand{\cap}{OT1}{\cap@} \DeclareTextCommand{\cap}{T1}{\cap@} % \end{macrocode} % Probably one definition would be sufficient, 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 other encodings. % \end{macro} % % \begin{macro}{\cap@cedilla} Similarly a small cap can be put under another letter % as it was a cedilla; for this task another macro is defined, which makes use of % the same glyph in position~1 in the Greek font table: % \begin{macrocode} \newcommand*\cap@cedilla[1]{\leavevmode {\setbox4\hbox{\fontencoding{\GRencoding@name}\selectfont\char1}% \dimen@-.5\wd4 \setbox\z@\hbox{#1}% \ifx\cf@encoding\GRencoding@name \ifx#1i\advance\dimen@ .65\wd\z@\else\advance\dimen@ .6\wd\z@\fi \else \ifx#1i\advance\dimen@ .55\wd\z@\else\advance\dimen@ .5\wd\z@\fi \fi \hbox to\z@{\kern\dimen@\box4\hss}\unhbox\z@}} % \end{macrocode} % \end{macro} % % \begin{macro}{\ring@cedilla} Another cedilla like diacritical mark is the % Scandinavian ring put under a letter; the correct positioning requires % careful examination of the letter under which it is to be placed, distinguishing % the Greek from the Latin encodings: % \begin{macrocode} \newcommand*\ring@cedilla[1]{\leavevmode {\setbox4\hbox{\metricsfont\char26}% \edef\slant@{\expandafter\numero\the\fontdimen1\font}% \dimen@-.5\wd4\ifdim\slant@\p@>\z@\advance\dimen@-.04ex\fi \setbox\z@\hbox{#1}% \ifx\cf@encoding\GRencoding@name \advance\dimen@ .45\wd\z@ \ifx#1h\advance\dimen@-.13\wd\z@\fi \ifx#1a\advance\dimen@-.07\wd\z@\fi \ifx#1o\advance\dimen@-.07\wd\z@\fi \ifx#1u\advance\dimen@+.07\wd\z@\fi \ifx#1w\advance\dimen@+.03\wd\z@\fi \else \ifx#1i\advance\dimen@ .55\wd\z@\else \ifx#1r\advance\dimen@.38\wd\z@\else \ifx#1o\advance\dimen@.47\wd\z@\else \advance\dimen@ .5\wd\z@ \fi\fi\fi \fi \hbox to\z@{\kern\dimen@\box4\hss}\unhbox\z@}} % \end{macrocode} % \end{macro} % % \begin{macro}{\dot@cedilla} Even the standard \LaTeX\ macro |dot| must be redefined % with a cedilla like macro, so as to make use of a special dot from the % metric symbols font: % \begin{macrocode} \newcommand*\dot@cedilla[1]{\leavevmode {\setbox4\hbox{\metricsfont\char27}% \dimen@-.5\wd4 \setbox\tw@\hbox{i}\setbox\z@\hbox{#1}% \ifx\cf@encoding\GRencoding@name \advance\dimen@ .5\wd\z@ \ifx#1h\advance\dimen@-.13\wd\z@\fi \else \ifdim\wd\z@>\wd\tw@\advance\dimen@.55\wd\z@ \else\advance\dimen@.5\wd\tw@\fi \fi \setbox\tw@\hbox{o}\ifdim\wd\z@=\wd\tw@\advance\dimen@-.05\wd\z@\fi \hbox to\z@{\kern\dimen@\box4\hss}\unhbox\z@}} % \end{macrocode} %\end{macro} % % \begin{macro}{\tie@cedilla} \LaTeX\ 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: % \begin{macrocode} \newcommand*\tie@cedilla[1]{\leavevmode % mette un tie sotto l'argomento {\setbox4\hbox{\fontencoding{\GRencoding@name}\selectfont\char20}% \dimen@-.5\wd4 \setbox\tw@\hbox{i}\setbox\z@\hbox{#1}% \ifx\cf@encoding\GRencoding@name \advance\dimen@.5\wd\z@ \ifx#1h\advance\dimen@-.1\wd\z@\fi \ifx#1u\advance\dimen@.15\wd\z@\fi \else \ifdim\wd\z@>\wd\tw@\advance\dimen@ .55\wd\z@ \else\advance\dimen@ .5\wd\tw@\fi \fi \setbox\tw@\hbox{o}\ifdim\wd\z@=\wd\tw@\advance\dimen@-.05\wd\z@\fi \hbox to\z@{\kern\dimen@\box4\hss}\unhbox\z@}} % \end{macrocode} % \end{macro} % All these accent like and cedilla like macros will be extensively used in the following % definitions. % \begin{macrocode} % grave \DeclareTextCommand{\`}{\GRencoding@name}[1]{\lift@accent{96}{#1}} % acute \DeclareTextCommand{\'}{\GRencoding@name}[1]{\lift@accent{39}{#1}} % circumflex \DeclareTextCommand{\GRcirc}{\GRencoding@name}[1]{\lift@accent{126}{#1}} \DeclareTextCommand{\~}{\GRencoding@name}[1]{\lift@accent{126}{#1}} % \end{macrocode} % 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. % \begin{macrocode} % diaeresis \DeclareTextCommand{\"}{\GRencoding@name}[1]{\lift@accent{34v}{#1}} % breve \DeclareTextCommand{\u}{\GRencoding@name}[1]{\lift@accent{30}{#1}} % \end{macrocode} % Besides the normal |\u| command for setting a breve command, another ``big 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 typesetter's responsibility to input % the macro argument as made of two letters (possibly with their own accents) % \begin{macrocode} \DeclareTextCommand{\U}{\GRencoding@name}[1]{\lift@accent{151}{#1}} % macron \DeclareTextCommand{\=}{\GRencoding@name}[1]{\lift@accent{31}{#1}} % rough \DeclareTextCommand{\r}{\GRencoding@name}[1]{\lift@accent{60}{#1}} % smooth \DeclareTextCommand{\s}{\GRencoding@name}[1]{\lift@accent{62}{#1}} % acute+diaeresis \DeclareTextCommand{\Ad}{\GRencoding@name}[1]{\lift@accent{35}{#1}} % grave+diaeresis \DeclareTextCommand{\Gd}{\GRencoding@name}[1]{\lift@accent{36}{#1}} % circumflex+diaeresis \DeclareTextCommand{\Cd}{\GRencoding@name}[1]{\lift@accent{32}{#1}} % acute+rough \DeclareTextCommand{\Ar}{\GRencoding@name}[1]{\lift@accent{86}{#1}} % grave+rough \DeclareTextCommand{\Gr}{\GRencoding@name}[1]{\lift@accent{67}{#1}} % circumflex+rough \DeclareTextCommand{\Cr}{\GRencoding@name}[1]{\lift@accent{64}{#1}} % acute+smooth \DeclareTextCommand{\As}{\GRencoding@name}[1]{\lift@accent{94}{#1}} % grave+smooth \DeclareTextCommand{\Gs}{\GRencoding@name}[1]{\lift@accent{95}{#1}} % circumflex+smooth \DeclareTextCommand{\Cs}{\GRencoding@name}[1]{\lift@accent{92}{#1}} % \end{macrocode} % 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 \verb"<'a|", % or \verb"\Ar{a}|" or |\arai|; the advantage of using the first 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. 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 redefined % 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|. % \begin{macrocode} % cap cedilla \DeclareTextCommand{\c}{\GRencoding@name}[1]{\cap@cedilla{#1}} \DeclareTextCommand{\semiv}{\GRencoding@name}[1]{\cap@cedilla{#1}} \DeclareTextCommand{\semiv}{OT1}[1]{\cap@cedilla{#1}} \DeclareTextCommand{\semiv}{T1}[1]{\cap@cedilla{#1}} % ring cedilla \DeclareTextCommand{\ring}{\GRencoding@name}[1]{\ring@cedilla{#1}} \DeclareTextCommand{\ring}{OT1}[1]{\ring@cedilla{#1}} \DeclareTextCommand{\ring}{T1}[1]{\ring@cedilla{#1}} % dot cedilla \DeclareTextCommand{\Dot}{\GRencoding@name}[1]{\dot@cedilla{#1}} \DeclareTextCommand{\Dot}{OT1}[1]{\dot@cedilla{#1}} \DeclareTextCommand{\Dot}{T1}[1]{\dot@cedilla{#1}} % tie cedilla \DeclareTextCommand{\ut}{\GRencoding@name}[1]{\tie@cedilla{#1}} \DeclareTextCommand{\ut}{OT1}[1]{\tie@cedilla{#1}} \DeclareTextCommand{\ut}{T1}[1]{\tie@cedilla{#1}} % % Acute breve \DeclareTextCommand{\Ab}{\GRencoding@name}[1]% {\LIFT@accent{39}{-.15ex}{\lift@accent{30}{#1}}} % Grave breve \DeclareTextCommand{\Gb}{\GRencoding@name}[1]% {\LIFT@accent{96}{-.15ex}{\lift@accent{30}{#1}}} % Acute rough breve \DeclareTextCommand{\Arb}{\GRencoding@name}[1]% {\LIFT@accent{86}{-.15ex}{\lift@accent{30}{#1}}} % Grave rough breve \DeclareTextCommand{\Grb}{\GRencoding@name}[1]% {\LIFT@accent{67}{-.15ex}{\lift@accent{30}{#1}}} % Acute smooth breve \DeclareTextCommand{\Asb}{\GRencoding@name}[1]% {\LIFT@accent{94}{-.15ex}{\lift@accent{30}{#1}}} % Grave smooth breve \DeclareTextCommand{\Gsb}{\GRencoding@name}[1]% {\LIFT@accent{95}{-.15ex}{\lift@accent{30}{#1}}} % % Acute macron \DeclareTextCommand{\Am}{\GRencoding@name}[1]% {\Lift@accent{39}{\lift@accent{31}{#1}}} % Grave macron \DeclareTextCommand{\Gm}{\GRencoding@name}[1]% {\Lift@accent{96}{\lift@accent{31}{#1}}} % Circumflex macron \DeclareTextCommand{\Cm}{\GRencoding@name}[1]% {\Lift@accent{126}{\lift@accent{31}{#1}}} % Acute rough macron \DeclareTextCommand{\Arm}{\GRencoding@name}[1]% {\Lift@accent{86}{\lift@accent{31}{#1}}} % Grave rough macron \DeclareTextCommand{\Grm}{\GRencoding@name}[1]% {\Lift@accent{67}{\lift@accent{31}{#1}}} % Circumflex rough macron \DeclareTextCommand{\Crm}{\GRencoding@name}[1]% {\Lift@accent{64}{\lift@accent{31}{#1}}} % Acute smooth macron \DeclareTextCommand{\Asm}{\GRencoding@name}[1]% {\Lift@accent{94}{\lift@accent{31}{#1}}} % Grave smooth macron \DeclareTextCommand{\Gsm}{\GRencoding@name}[1]% {\Lift@accent{95}{\lift@accent{31}{#1}}} % Circumflex smooth macron \DeclareTextCommand{\Csm}{\GRencoding@name}[1]% {\Lift@accent{92}{\lift@accent{31}{#1}}} % smooth macron \DeclareTextCommand{\Sm}{\GRencoding@name}[1]% {\Lift@accent{62}{\lift@accent{31}{#1}}} % rough macron \DeclareTextCommand{\Rm}{\GRencoding@name}[1]% {\Lift@accent{60}{\lift@accent{31}{#1}}} % breve and dieresis \DeclareTextCommand{\bd}{\GRencoding@name}[1]% {\LIFT@accent{30}{-.1ex}{\lift@accent{34v}{#1}}} % % iota subscript \DeclareTextCommand{\iS}{\GRencoding@name}[1] {\ooalign{#1\crcr\hidewidth\char124\hidewidth}} % \end{macrocode} % % \begin{macro}{\d} The |\d| macro must be made available also with the Greek encoding % \begin{macrocode} \DeclareTextCommand{\d}{\GRencoding@name}[1]% {\leavevmode\bgroup\o@lign{\relax#1\crcr \hidewidth\sh@ft{10}.\hidewidth}\egroup} % \end{macrocode} % \end{macro} % % Some other philologist diacritical marks are needed. % \begin {macro}{\Open} The |\Open| macro sets a special sign under a letter in order % to mark it with an open pronunciation. % \begin{macrocode} \DeclareRobustCommand{\Open}[1]{\leavevmode {\setbox4\hbox{\raise-.33ex\hbox{\metricsfont\char14}}% \dimen@-.5\wd4 \setbox\tw@\hbox{i}\setbox\z@\hbox{#1}% \ifx\cf@encoding\GRencoding@name \advance\dimen@ .5\wd\z@ \setbox\tw@\hbox{h}\ifdim\wd\z@=\wd\tw@\advance\dimen@-.13\wd\z@\fi \else \ifdim\wd\z@>\wd\tw@\advance\dimen@ .55\wd\z@ \else\advance\dimen@ .5\wd\tw@\fi \fi \setbox\tw@\hbox{o}\ifdim\wd\z@=\wd\tw@\advance\dimen@-.05\wd\z@\fi \hbox to\z@{\kern\dimen@\box4\hss}\unhbox\z@}} % \end{macrocode} % \end{macro} % \begin {macro}{\nasal} The macro |\nasal| marks a letter for a nasal pronunciation. % \begin{macrocode} \DeclareRobustCommand{\nasal}[1]{\leavevmode {\setbox4\hbox{\raise-1.7ex\hbox{\GEcq}}% \dimen@-.5\wd4 \setbox\tw@\hbox{i}\setbox\z@\hbox{#1}% \ifx\cf@encoding\GRencoding@name \advance\dimen@ .5\wd\z@ \setbox\tw@\hbox{h}\ifdim\wd\z@=\wd\tw@\advance\dimen@-.13\wd\z@\fi \else \ifdim\wd\z@>\wd\tw@\advance\dimen@ .55\wd\z@ \else\advance\dimen@ .5\wd\tw@\fi \fi \setbox\tw@\hbox{o}\ifdim\wd\z@=\wd\tw@\advance\dimen@-.05\wd\z@\fi \hbox to\z@{\kern\dimen@\box4\hss}\unhbox\z@}} % \end{macrocode} % \end{macro} %\begin {macro}{\tenaspir} Similarly |\tenaspir| marks a ``tenuis aspiratio'' % \begin{macrocode} \DeclareRobustCommand{\tenaspir}[1]{#1\/% {\fontencoding{\GRencoding@name}\selectfont\z@ \do{\kern.4ex\d{v}\kern.4ex\advance\count255\m@ne}}} \newcommand\DOTS[1][1]{{\count255=#1\@whilenum\count255>\z@ \do{\kern.8ex\d{v}\kern.8ex\advance\count255\m@ne}}} \newcommand\Dashes[1][1]{{\count255=#1\@whilenum\count255>\z@ \do{\kern.4ex--\kern.4ex\advance\count255\m@ne}}} \newcommand\DASHES[1][1]{{\count255=#1\@whilenum\count255>\z@ \do{\kern.8ex--\kern.8ex\advance\count255\m@ne}}} % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} % %\begin{macro}{\:} %\begin{macro}{\;} %\begin{macro}{\?} %\begin{macro}{\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 (\textit{mutatio personae}). For |\:| % and |\;| it is necessary to preserve the mathematical meaning, while |\?| apparently does % not have any previous use in standard \LaTeX. The real macros are |\tw@dots|, |\thre@dots|, % and |\f@urdots|. % \begin{macrocode} \DeclareRobustCommand{\:}{\textormath{\tw@dots}{\mskip\medmuskip}} \DeclareRobustCommand{\;}{\textormath{\thre@dots}{\mskip\thickmuskip}} \DeclareRobustCommand{\?}{\f@urdots} \DeclareRobustCommand{\mutpers}{\makebox[1ex]{\:\hfill\:}\space} \let\MutPers\mutpers\let\antilabe\mutpers \def\tw@dots{\mbox{\kern1\p@\vbox to1ex{\hbox{.}\vss\hbox{.}}}} \def\thre@dots{\mbox{\kern1\p@\vbox to 2ex{\hbox{.}\vss \hbox{.}\vss\hbox{.}}}} \def\f@urdots{\mbox{\kern1\p@\vbox to 2ex{\hbox{.}\vss \hbox{.}\vss\hbox{.}\vss\hbox{.}}}} % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} % % \DeleteShortVerb{\|} %\begin{macro}{\|} % \MakeShortVerb{\|} %\begin{macro}{\dBar} %\begin{macro}{\tBar} % Similarly Greek text and poetry require certain \emph{cesurae} indicated with % vertical bars; we provided commands for one (\verb"\|"), two (|\dBar|), and % three (|\tBar|) vertical bars. % \begin{macrocode} \DeclareRobustCommand{\|}{\relax\ensuremath{\mskip2mu\vert}} \DeclareRobustCommand{\dBar}{\ensuremath{\vert\vert}} \DeclareRobustCommand{\tBar}{\ensuremath{\vert\vert\vert}} % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} % %\begin{macro}{\negthinspace} %\begin{macro}{\posthinspace} %\begin{macro}{\posthindspace} %\begin{macro}{\,} %\begin{macro}{\!} % The following are mostly service macros for adjusting the spacing within macro definitions. % Nevertheless they are available also to the typesetter, because sometimes 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. % \begin{macrocode} \def\negthinspace{\nobreak\hskip-0.07em} \def\posthinspace{\nobreak\hskip0.07em} \def\posthindspace{\nobreak\hskip0.14em} \renewcommand{\,}{\textormath{\posthinspace}{\mskip\thinmuskip}} \renewcommand{\!}{\textormath{\negthinspace}{\mskip-\thinmuskip}} % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} % %\begin{macro}{\lbrk} %\begin{macro}{\rbrk} %\begin{macro}{\lmqi} %\begin{macro}{\rmqi} %\begin{macro}{\lmqs} %\begin{macro}{\rmqs} %\begin{macro}{\mqi} %\begin{macro}{\mqs} %\begin{macro}{\Ladd} %\begin{macro}{\LLadd} %\begin{macro}{\ladd} %\begin{macro}{\lladd} %\begin{macro}{\lesp} %\begin{macro}{\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 modified 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 if 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 fare 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 \texttt{teubenr-doc.pdf} for samples of such commands. % \begin{macrocode} \DeclareRobustCommand{\lbrk}{{\metricsfont\posthindspace[\negthinspace}} \DeclareRobustCommand{\rbrk}{{\metricsfont]}} \DeclareRobustCommand\lmqi{{\metricsfont!}} \DeclareRobustCommand\rmqi{{\metricsfont:}} \DeclareRobustCommand\lmqs{{\metricsfont?}} \DeclareRobustCommand\rmqs{{\metricsfont;}} \DeclareRobustCommand\mqi[1]{\posthinspace\lmqi\negthinspace {#1\/}\rmqi}\let\mezzeq\mqi \DeclareRobustCommand\mqs[1]{\lmqs{#1\/}\rmqs} \DeclareRobustCommand{\Ladd}[1]{{\metricsfont<}{\!\!#1\/}% {\metricsfont>}}% litterae certe addendae \DeclareRobustCommand{\LLadd}[1]{{\metricsfont<\kern-.3ex<}%subst. \hskip with \kern {\!\!#1\/}{\metricsfont>\kern-.3ex>}}% litterae certe addendae \DeclareRobustCommand{\ladd}[1]{{\metricsfont\kern.15ex[\negthinspace}% {#1\/}{\metricsfont]\kern-.15ex}}% litterae addendae \DeclareRobustCommand{\lladd}[1]{{\metricsfont\kern.15ex[\kern-.3ex[% \negthinspace}{#1\/}{\metricsfont]\kern-.3ex]% \kern-.15ex}}% litterae addendae \DeclareRobustCommand{\lesp}[1]% {\mbox{$\{\kern-.20ex$#1\kern.16ex$\}$}}% litterae delendae \let\ldel\lesp % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} % %\begin{macro}{\itopenquotes} %\begin{macro}{\itclosedquotes} %\begin{macro}{\itoq} %\begin{macro}{\itcq} The following macros allow to set Italian\slash 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, different 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 define % his own macros, or he might clone the following definitions and change them % according to his country typographic traditions. If he decides to modify these % definitions he should either rename this file or he should put his redefinitions % in a private package to be input \emph{after} \texttt{teubner.sty}. % \begin{macrocode} \DeclareTextCommand{\itopenquotes}{\GRencoding@name}% {{\fontencoding{OT1}\selectfont\char92}}% \DeclareTextCommand{\itclosedquotes}{\GRencoding@name}% {{\fontencoding{OT1}\selectfont\char34}}% \let\itoq\itopenquotes \let\itcq\itclosedquotes % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} % %\begin{macro}{\GEodq} %\begin{macro}{\GEcdq} %\begin{macro}{\GEdqtext} %\begin{macro}{\GEoq} %\begin{macro}{\GEcq} %\begin{macro}{\GEqtext} %\begin{macro}{\ENodq} %\begin{macro}{\ENcdq} %\begin{macro}{\ENdqtext} 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 % remains fixed; 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. % \begin{macrocode} \newcommand\GEodq{\bgroup\futurelet\@tempA\GE@dq} \def\GE@dq{{\metricsfont\char18}\ifx\@tempA m\posthinspace\fi\egroup} \newcommand\GEcdq{{\metricsfont\char16}} \newcommand\GEdqtext[1]{\GEodq\posthinspace#1\/\posthinspace\GEcdq} \newcommand\GEoq{\bgroup\futurelet\@tempA\GE@q} \def\GE@q{{\metricsfont\char13}\ifx\@tempA m\posthinspace\fi\egroup} \newcommand\GEcq{{\metricsfont\char19}} \newcommand\GEqtext[1]{\GEoq\posthinspace#1\/\posthinspace\GEcq} \newcommand\ENodq{{\metricsfont\char16}} \newcommand\ENcdq{{\metricsfont\char17}} \newcommand\ENdqtext[1]{\ENodq\negthinspace#1\/\posthinspace\ENcdq} % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} % % \begin{macro}{\LitNil} % \begin{macro}{\litnil} The next synonymous macros indicate the \emph{littera nihil}. % \begin{macrocode} \DeclareRobustCommand\LitNil{\textbullet} \let\litnil\LitNil % \end{macrocode} %\end{macro} %\end{macro} % %\begin{macro}{\sva} %\begin{macro}{\shva} %\begin{macro}{\shwa} The CB fonts include also the letter ``shwa'', the glyph that % appears as a roman ``e'' rotated 180$^\circ$ 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 definitions have been given so that the % suitable CB font is changed behind the scenes without any intervention by the % typesetter. % \begin{macrocode} \DeclareTextSymbol{\sva}{\GRencoding@name}{26} \DeclareTextCommand\sva{OT1}{{\expandafter\fontencoding \expandafter{\GRencoding@name}\selectfont\sva}} \DeclareTextCommand\sva{T1}{{\expandafter\fontencoding \expandafter{\GRencoding@name}\selectfont\sva}} \let\shva\sva\let\shwa\sva % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} % %\begin{macro}{\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 first 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 philologist's symbols, but is readily available to the % typesetter both for direct use and for writing macros defining new symbols. % \begin{macrocode} \DeclareRobustCommand\skewstack[2]{{% \edef\slant@{\expandafter\numero\the\fontdimen1\font}% \setbox\z@\hbox{#1}\dimen@\ht\z@\box\z@ \kern-.045em\setbox\@ne\hbox{\scriptsize#2}% \ifdim\dimen@>1.2ex\advance\dimen@-\ht\@ne\else \dimen@1ex\advance\dimen@-.5\ht\@ne\fi \kern\slant@\dimen@\raise\dimen@\hbox{\box\@ne}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\hv} %\begin{macro}{\qw} %\begin{macro}{\gw} %\begin{macro}{\gusv} %\begin{macro}{\qusv} %\begin{macro}{\qu} Matter of fact some common Latin stacked symbols are defined here in % terms of |\skewstack|. As it may bee seen, the second argument (the first as well, % but here there are no examples) may in turn contain other macros for composite symbols. % \begin{macrocode} \DeclareRobustCommand\hv{{\fontencoding{OT1}\selectfont \skewstack{h}{v}}} \DeclareRobustCommand\qw{{\fontencoding{OT1}\selectfont \skewstack{q}{w}}} \DeclareRobustCommand\gw{{\fontencoding{OT1}\selectfont \skewstack{g}{w}}} \DeclareRobustCommand\gusv{{\fontencoding{OT1}\selectfont \skewstack{g}{\semiv{u}}}} \DeclareRobustCommand\qusv{{\fontencoding{OT1}\selectfont \skewstack{q}{\semiv{u}}}} \DeclareRobustCommand\qu{{\fontencoding{OT1}\selectfont \skewstack{q}{u}}} % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} % %\begin{macro}{\dz} Without using |\skewstack| other symbols may be defined; % 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 other kernings % are necessary. % \begin{macrocode} \DeclareRobustCommand\dz{{\fontencoding{OT1}\selectfont d\kern-.33ex z}} % \end{macrocode} %\end{macro} % % Now we come to another set of commands like the ones needed to mark the syneresis % or the zeugma and other similar marks. %\begin{macro}{\Utie} This first macro sets a ``smile'' symbol under a couple of % letters. The glyph is fine but is good only for two adjacent letters, therefore % it is necessary to have a stretchable symbol. % \begin{macrocode} \DeclareRobustCommand\Utie[1]{% \mbox{\vtop{\ialign{##\crcr \hfil#1\hfil\crcr \noalign{\kern.3ex\nointerlineskip}% \hfil$\smile$\hfil\crcr}}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\siner} %\begin{macro}{\siniz} This is why the |\siner| and |\siniz| synonymous commands % have been defined; in place of the ``smile'' symbol they contain a stretchable % filler |\upfill| that behaves almost as the stretchable horizontal brace that is % used in the definition of the \LaTeX\ commands |\underbrace| or |\overbrace|. % \begin{macrocode} \DeclareRobustCommand{\siner}[1]{% \mbox{\vtop{\ialign{##\crcr \hfil#1\hfil\crcr \noalign{\kern.6ex\nointerlineskip}% \upfill\crcr}}}} \let\siniz\siner % \end{macrocode} %\end{macro} %\end{macro} %\begin{macro}{\upfill} The |\upfill| is defined as a leader, the same way as the % corresponding \LaTeX\ stretchable horizontal brace; but as mentioned before we % introduce a correction in case we are typesetting with pdf\LaTeX, because the % pfb extensible math fonts, from wich the curved extremities are taken from, apparently % do not have the actual dimension declared in the tmf files. % \begin{macrocode} \def\upfill{$\m@th \scriptstyle\setbox\z@\hbox{$\scriptstyle\bracelu$}% \kern.16ex\bracelu\ifPDF\kern-.15ex\fi \leaders\vrule \@height\ifPDF.85\fi\ht\z@ \@depth\z@\hfill \braceru\kern.16ex$} % \end{macrocode} %\end{macro} %\begin{macro}{\downfill} The down fill arc is totally similar to the up fill one, except % for its terminating elements that change the shape of the arc from ``up'' to ``down''; we % introduce the same correction as in |\upfill| for the same reasons. % \begin{macrocode} \def\downfill{$\m@th\scriptstyle\setbox\z@\hbox{$\scriptstyle\braceld$}% \kern.16ex\braceld\ifPDF\kern-.15ex\fi \leaders\vrule \@height\ifPDF.85\fi\ht\z@ \@depth\z@\hfill \bracerd\kern.16ex$} % \end{macrocode} %\end{macro} % With both macros we could have edited the pfb files, but this would have required % to distribute the corrected |cmex10.pfb| file together with the bundle, causing possible users % to mess up their map of PostScript fonts. Of course the chosen solution has the % opposite draw back: when and if the corrected pfb files will be distributed with each % more or less complete \TeX\ bundle, then this file will require to be corrected again. But % this is simple because it suffices to eliminate the whole |\ifPFB| business. % %\begin{macro}{\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. % \begin{macrocode} \newcommand*\zeugma[1]{{\vbox{\setbox\z@\hbox{#1}\dimen@=\ht\z@ \edef\@slant{\expandafter\numero\the\fontdimen1\font}% \dimen\tw@=\wd\z@ \dimen@=\@slant\dimen@\ifmetricsfont\dimen@=\z@ \advance\dimen\tw@-.5ex\fi \kern-.2ex\ialign{##\crcr \hbox to\z@{\ifmetricsfont\kern.25ex\fi\kern\dimen@ \hbox to\dimen\tw@{\hss\downfill\kern.2\dimen@\hss}\hss}\crcr \noalign{\ifmetricsfont\kern.6ex \else\kern.4ex\fi\nointerlineskip}% \hfil{#1}\hfil\crcr}}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\slzeugma} %\begin{macro}{\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 defined 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. % \begin{macrocode} \newcommand*\slzeugma[1]{{\leavevmode \setbox\tw@\hbox{\metricsfont\char120}% \setbox\z@\hbox{#1}\dimen@.5\wd\z@\advance\dimen@-.5\wd\tw@ \edef\@slant{\expandafter\numero\the\fontdimen1\font}% \advance\dimen@\@slant\ht\z@ \hbox to\z@{\kern\dimen@\box\tw@\hss}\box\z@ }% } \newcommand*\rszeugma[1]{{\leavevmode \setbox\tw@\hbox{\metricsfont\char122}% \setbox\z@\hbox{#1}\dimen@.5\wd\z@\advance\dimen@-.5\wd\tw@ \edef\@slant{\expandafter\numero\the\fontdimen1\font}% \advance\dimen@\@slant\ht\z@ \hbox to\z@{\kern\dimen@\box\tw@\hss}\box\z@ }% } % \end{macrocode} %\end{macro} %\end{macro} % %\begin{macro}{\nexus} %\begin{macro}{\nesso}The same line of reasoning leads us to define two different % commands for marking nexus relationships; since such commands are not synonymous % we had to use the Latin and (arbitrarily) the Italian name to distinguish them. % The difference is that |\nesso| covers the nexus with a leader made of ``Latin'' % circumflex signs (hats), while |\nexus| covers the nexus with a stretchable trapeze. % \begin{macrocode} \newcommand*{\nexus}[1]{{\setbox\tw@\hbox{#1}% \edef\slant@{\expandafter\numero\the\fontdimen1\font}% \@tempdima=\slant@\ht\tw@\advance\@tempdima.45ex \setbox4\hbox to\wd\tw@{\hss\nexusfill\hss} \vbox{\ialign{##\crcr% \kern\@tempdima\box4 \crcr \noalign{\kern.15ex\nointerlineskip}% \hfil{#1}\hfil\crcr}}}} \newcommand*\nesso[1]{{\setbox\tw@\hbox{#1}% \edef\slant@{\expandafter\numero\the\fontdimen1\font}% \@tempdima=\slant@\ht\tw@\advance\@tempdima.9ex \ifdim\wd\tw@<1ex \setbox4\hbox{\metricsfont\kern-.5ex\Hat}% \else \setbox4\hbox to\wd\tw@{\hss\nexfill\hss}% \fi \vbox{\ialign{##\crcr% \kern\@tempdima\box4 \crcr \noalign{\kern.15ex\nointerlineskip}% \hfil\box\tw@\hfil\crcr}}}} % \end{macrocode} %\end{macro} %\end{macro} %\begin{macro}{\nexfill} %\begin {macro}{\nexusfill}|\nexfill| is a leader made up of ``Latin'' circumflex % signs; since the sign has a special meaning in mathematics, the definition % of |\nexfill| requires the temporary change of the circumflex catcode. The % command |\nexus|, on the opposite, requires another leader definition that % contains the oblique sides of the trapeze. The latter were defined as glyphs % in the Greek fonts. |\nexus| is supposed to be used \emph{only} while % typesetting Greek text or poetry. % \begin{macrocode} {\catcode`\^=12\relax\global\chardef\Hat`\^ \gdef\nexfill{{\metricsfont\leaders\hbox{^}\hfill}}} % \newdimen\Uunit \def\nexusfill{\setbox\z@\hbox{\char16}% \Uunit=0.83333\p@ \kern.16ex\char16\kern-.08ex \leaders\vrule\@height\z@\@depth\Uunit\hfill \kern.08ex\char17\kern.16ex} % \end{macrocode} %\end{macro} %\end{macro} % %\begin{macro}{\coronis} %\begin {macro}{\Coronis} %\begin {macro}{\paragr} % \begin {macro}{\dpar} 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 differs 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 \emph{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. % \begin{macrocode} \def\C@rule{\vrule\@height.45ex\@depth-.35ex\@width1.5em} \def\coronis@rule{\hbox to\z@{\hss\C@rule\hss}} \def\Coronis@rule{\hbox to\z@ {\hss\hbox to\z@{\hss$\scriptstyle)$\kern-1.5\p@}\C@rule\hss}} \DeclareRobustCommand\paragr{\raisebox{-1ex}[\z@][\z@]{\coronis@rule}} \let\coronis\paragr \DeclareRobustCommand\Coronis{\raisebox{-1ex}[\z@][\z@]{\Coronis@rule}} \DeclareRobustCommand{\dparagr}% {\raisebox{-1.3ex}[\z@][\z@]{\coronis@rule}% \raisebox{-1.6ex}[\z@][\z@]{\coronis@rule}} % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} % %\begin{macro}{\sinafia} %\begin {macro}{\crux} %\begin {macro}{\FinisCarmen} %\begin {macro}{\apici} %\begin {macro}{\positio} %\begin {macro}{\Int} %\begin {macro}{\star} %\begin {macro}{\dstar} %\begin {macro}{\tstar} %\begin {macro}{\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 shorter alias |\FinCar| has been defined. |\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 standard \LaTeX\ math command, the original definition is saved in the service % macro |\m@thst@r| and the command is redefined so as to perform as it should both in % text and in math mode. The symbol $\int$, on the contrary, was redefined so as not % to mix math with text, even if its rendering resorts to mathematics. % \begin{macrocode} \DeclareRobustCommand*\sinafia{{\metricsfont s}} \DeclareRobustCommand*{\crux}{{\metricsfont\char'171}} \DeclareRobustCommand*{\FinisCarmen}{\ensuremath{\otimes}} \let\FinCar\FinisCarmen \DeclareRobustCommand*{\apici}[1]% {\posthinspace{\metricsfont\char96}\negthinspace#1% \posthinspace{\metricsfont\char39}\negthinspace} \DeclareRobustCommand*{\apex}% {\/\hskip.5ex\vrule\@height1.7ex\@depth-1ex\hskip.2ex} \let\positio\apex \DeclareRobustCommand*{\Int}{\ensuremath{\int}} \let\m@thst@r\star \DeclareRobustCommand*{\star}{\textormath{{{\upshape *}}}{\m@thst@r}} \DeclareRobustCommand*{\dstar}{{\upshape **}} \DeclareRobustCommand*{\tstar}{{\upshape ***}} \DeclareRobustCommand*{\responsio}{{\boldmath\ensuremath{\sim}}} % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} % %\begin{macro}{\thorn} %\begin{macro}{\Thorn} |\thorn| and |\Thorn| are the exact equivalents of |\th| and |\Th| % that ere defined only for the T1 encoding. Therefore such encoding is selected % in an implicit way. % \begin{macrocode} \DeclareRobustCommand{\thorn}{{\fontencoding{T1}\selectfont\th}} \DeclareRobustCommand{\Thorn}{{\fontencoding{T1}\selectfont\TH}} % \end{macrocode} %\end{macro} %\end{macro} % %\begin{macro}{\dracma} %\begin {macro}{\hemiobelion} %\begin {macro}{\tetartemorion} %\begin {macro}{\stater} %\begin {macro}{\denarius} %\begin {macro}{\etos} This set of symbols, taken from the metrics symbol font % (which by this time is evident does not contain only metrics symbols) represent % the unit symbols of some coins of ancient Greece, as they were found on many % ``ostraka'' in many archeological sites. % \begin{macrocode} \DeclareRobustCommand{\dracma}{{\metricsfont D}} \DeclareRobustCommand{\hemiobelion}{{\metricsfont A}} \DeclareRobustCommand{\tetartemorion}{{\metricsfont B}} \DeclareRobustCommand{\stater}{{\metricsfont C}} \DeclareRobustCommand{\denarius}{{\metricsfont E}} \DeclareRobustCommand{\etos}{{\metricsfont G}} % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} % %\begin{macro}{\cut} %\begin{macro}{\dcutbar} %\begin{macro}{\bcutbar} %\begin{macro}{\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, specifically `d', `b', and `g'; due to their different shapes, such % bars are of different length and located at different 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 different circumstances. % It merely checks its argument (it must be \emph{one} letter and unpredictable results % are obtained if more that one token is passed as argument to |\cut|) and selects the % proper bar. The specific bar commands |\dcutbar|, |\bcutbar|, and |\gcutbar|, are % defined in such a way as to cope only with the their initial letter. % \begin{macrocode} \DeclareRobustCommand{\cut}[1]{% \ifx#1d\dcutbar\else \ifx#1b\bcutbar\else \ifx#1g\gcutbar \fi \fi \fi} % \def\dcutbar{{\edef\slant@{\expandafter\numero\the\fontdimen1\font}% d\dimen@1.2ex\kern\slant@\dimen@ \llap{\vrule\@height1.3ex\@depth-\dimen@ \ifdim\slant@\p@>\z@\@width.35em\else\@width.4em\fi\kern.03em}}} \def\bcutbar{{\edef\slant@{\expandafter\numero\the\fontdimen1\font}% \rlap{\dimen@1.2ex\kern\slant@\dimen@ \ifdim\slant@\p@=\z@\kern.03em\fi \vrule\@height1.3ex\@depth-\dimen@ \ifdim\slant@\p@>\z@\@width.3em\else\@width.4em\fi}b}} \def\gcutbar{{\edef\slant@{\expandafter\numero\the\fontdimen1\font}% \ifdim\slant@\p@>\z@ g\kern-.55ex\dimen@.2ex\kern-\slant@\dimen@ \vrule\@height-.1ex\@depth\dimen@\@width.6ex \else \dimen@.2ex\kern\slant@\dimen@\vrule\@height.3ex\@depth-\dimen@ \@width.6ex\kern-.55ex\relax g \fi}} % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} % %\begin{macro}{\OSN} The next macro is just a shortcut instead of using % |\oldstylenums|. We do not remember why we defined a whole command, instead % of just |\let|ting the new control sequence be a synonym for the existing % one. % \begin{macrocode} \newcommand*{\OSN}[1]{\oldstylenums{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\splus} %\begin{macro}{\stimes} %\begin{macro}{\kclick} % The next three macros are used in glottology; the first 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''. %\begin{macrocode} \newcommand\splus{\leavevmode{% \edef\slant@{\expandafter\numero\the\fontdimen1\font}% \setbox\z@\hbox{s}% \dimen@=\wd\z@ \setbox\tw@\hbox{$\scriptscriptstyle+$}% \advance\dimen@.35\ht\tw@ \raisebox{\dimen@}[\z@][\z@]{% \makebox[\z@][l]{\kern.5\wd\z@ \kern\slant@\dimen@\kern-.5\wd\tw@\box\tw@}}% \box\z@}}% \newcommand\stimes{\leavevmode{% \edef\slant@{\expandafter\numero\the\fontdimen1\font}% \setbox\z@\hbox{s}% \dimen@=\wd\z@ \setbox\tw@\hbox{$\scriptscriptstyle\times$}% \advance\dimen@.2\ht\tw@ \raisebox{\dimen@}[\z@][\z@]{% \makebox[\z@][l]{\kern.5\wd\z@ \kern\slant@\dimen@\kern-.5\wd\tw@\box\tw@}}% \box\z@}}% \newcommand\kclick{\leavevmode{% \edef\slant@{\expandafter\numero\the\fontdimen1\font}% \setbox\z@\hbox{k}% \setbox\tw@\hbox{\fontencoding\GRencoding@name\selectfont\s{v}}% \dimen@\wd\z@ \ifdim\slant@\p@=\z@ \advance\dimen@-.1\wd\z@\else\advance\dimen@\wd\tw@ \fi k\makebox[\z@][r]{\unhcopy\tw@\kern.5\dimen@}% }}% % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} % %\begin {macro}{\verso} %\begin{environment}{versi} Here we start with verse environments; we already explained % we defined three new verse environments that typeset verses in ``in-line'' verses, % ``numbered by five'' verses, and ``numbered by five and subnumbered'' verses. % For the environment |versi| we first need a counter and a little macro for % generating the short bar that has to receive the verse number as a ``limits'' % superscript. % \begin{macrocode} %%%%%%%%%%%%%%%%%%%%%%%%%% verse environments \newcounter{verso}\setcounter{verso}{0} \newcommand{\smallvert}{\vrule\@height1ex} % \end{macrocode} % Next we define the macro |\verso| that sets the small bar with the verse number on top. % Since the initial numbering might be different from~1, |\verso| accepts an optional % argument, which is intended to be the initial counter value. Since |\verso| steps up % the counter a different 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 specified. % \begin{macrocode} \DeclareRobustCommand\verso[1][]{% \def\@tempA{#1}\ifx\@tempA\empty \else \setcounter{verso}{#1}\addtocounter{verso}{\m@ne}% \fi \refstepcounter{verso}% \ensuremath{\mathop{\smallvert}\limits^{\theverso}}% \space\ignorespaces } % \end{macrocode} % Now that the verse separation macro is ready we can define 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 \texttt{list} one, and the left % margin variable width is totally similar to the one used in |thebibiography| environment. % Also the |\makelabel| command has been modified accordingly. % \begin{macrocode} \newenvironment{versi}[1]{% \def\makelabel##1{##1} \list{}{\settowidth\labelwidth{#1}\leftmargin\labelwidth \advance\leftmargin\labelsep}% }{% \endlist } % \end{macrocode} %\end{environment} %\end{macro} % %\begin{environment}{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 \LaTeX\ |verse| environment (with one minor difference) % except they are numbered in the left margin with a progression of five; only verse numbers % that are integer multiples of five are displayed. The minor difference is that stanzas % cannot be marked with a blank line in the input |.tex| file, 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 specified % to the |\\| command. This environment uses the same verse counting counter, defined for % use with the |versi| environment. %\begin{macro}{\BreakVersotrue} %\begin{macro}{\BreakVersofalse} % For specific 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. % \begin{macrocode} \newif\ifBreakVersi \BreakVersifalse \newenvironment{Versi}[1][1]{% \setcounter{verso}{#1}% % \end{macrocode} % 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 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. %\end{macro} %\end{macro} % \begin{macrocode} \def\writ@verso{% \count255=\value{verso}\divide\count255by5\relax \multiply\count255by5\relax \advance\count255-\value{verso}% \ifnum\count255=\z@ {\small\expandafter\oldstylenums\expandafter{\the\c@verso}}% \else \empty \fi}% % \end{macrocode} % Since the |\\| command should provide the same functionality as the regular \LaTeX\ % command, while in this environment it should provide other functionalities, such as % triggering the display of the verse number, It is necessary to define an intermediate % command |\v@rscr|, that examines the possible optional arguments, such as the optional % star or the brackets enclosing vertical spacing % \begin{macrocode} \def\\{\@ifstar{\v@rscr{\@M}}{\v@rscr{\z@}}}% \def\v@rscr##1{\@ifnextchar[{\wr@teverse{##1}}% {\wr@teverse{##1}[\z@]}}% % \end{macrocode} % 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 first % 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 happens in the |verse| % standard \LaTeX\ environment. Even in this environment the actual typesetting is done % within a |list| environment, whose parameters are set differently 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 \texttt{VERSI} that has a secondary % verse numbering, therefore it can't 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 off 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. % \begin{macrocode} \def\wr@teverse##1[##2]{\egroup \makebox[3em][r]{% \writ@verso\refstepcounter{verso}\kern1.5em} \ifBreakVersi \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 }{% % \end{macrocode} % 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. % \begin{macrocode} \\% \egroup \endlist } % \end{macrocode} %\end{environment} % %\begin{environment}{VERSI} The third environment |VERSI| set verses in the traditional % way, but numbers them with two different enumerations; the principal one is by % multiples of five, while the secondary one counts by units, and may be turned on and off, % or reset at will. We therefore need another counter for the secondary enumeration % and commands for turning it on and off 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 \texttt{VERSI} % there is the same possibility of turning on and off the possibility of breaking verses % at the end of line as it happens for the environment \texttt{Versi}. % \begin {macro}{\SubVerso} % \begin {macro}{\NoSubVerso} Macro |\NoSubVerso| turns off 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 specified, 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 first use of |\SubVerso| does not contain the optional % argument, the secondary enumeration keep 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 first time he uses it in this environment. % \begin{macrocode} \newcounter{subverso} \setcounter{subverso}{0} \newif\ifSubVerso \newlength{\versoskip} \newcommand*\NoSubVerso{\global\SubVersofalse \global\versoskip1.3em\ignorespaces} \newcommand*\SubVerso[1][0]{\global\SubVersotrue \ifnum#1=0\else \setcounter{subverso}{#1}% \global\protected@edef\@currentlabel{\the\c@subverso}% \fi \global\versoskip.3em\ignorespaces} % \end{macrocode} %\end{macro} %\end{macro} % The opening environment statement accepts an optional argument (default equals~1) % which represents the primary enumeration starting number % \begin{macrocode} \newenvironment{VERSI}[1][1]{% \setcounter{verso}{#1}% % \end{macrocode} % We need two macros |\writ@verso| and |\writ@subverso|, that typeset the primary and % secondary enumeration; the first 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. % \begin{macrocode} \def\writ@verso{% \count255=\value{verso}\divide\count255by5\relax \multiply\count255by5\relax \advance\count255-\value{verso}% \ifnum\count255=0\relax {\small\expandafter\oldstylenums\expandafter{\the\c@verso}}% \else \empty \fi}% \NoSubVerso \def\writ@subverso{% \ifSubVerso {\scriptsize\expandafter\oldstylenums \expandafter{\the\c@subverso}}% \fi}% % \end{macrocode} % Similarly to the previous environment, the |\\| command must be redefined % 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| that does the actual job; actually it passes control to a third macro % |\writ@verse| that effectively outputs the current verse. % \begin{macrocode} \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}% % \end{macrocode} % For the remaining part, the environment is a normal |list| environment with specific % initial parameters. % \begin{macrocode} \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 }{% % \end{macrocode} % 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 significance now, can be lost upon closing the environment group. % \begin{macrocode} \\% \egroup\endlist } % \end{macrocode} %\end{environment} % % Now we start defining many things concerned with metrics; the metric symbol font % has been developed mainly for this purpose. We start defining some macros for % inputting specific symbols; many such macros have their own aliases in Latin. % %\begin{macro}{\lunga} %\begin{macro}{\longa} %\begin{macro}{\breve} %\begin{macro}{\brevis} %\begin{macro}{\bbreve} %\begin{macro}{\bbrevis} %\begin{macro}{\barbreve} %\begin{macro}{\barbrevis} %\begin{macro}{\barbbrev} %\begin{macro}{\barbbrevis} %\begin{macro}{\ubarbreve} %\begin{macro}{\ubarbrevis} %\begin{macro}{\ubarbbreve} %\begin{macro}{\ubarbbrevis} %\begin{macro}{\ubarsbreve} %\begin{macro}{\ubarsbrevis} %\begin{macro}{\ubrevelunga} %\begin{macro}{\ubrevislonga} The following definitions are straightforward; a small % comment on |\breve|: since it is also a math command in standard \LaTeX, its meaning % is saved in a service macro |\br@ve| and the |\breve| macro is redefined taking into % account whether the typesetting is being done in text or in math mode. The unusual % letters that appear in the definitions of the various metric symbols have no mysterious % meaning; they might have been specified by |\char|\meta{number}, but it seemed shorter % to specify the corresponding letters that would occupy the same slots in literal fonts. % \begin{macrocode} \DeclareRobustCommand\lunga{{\metricsfont l}} \let\longa\lunga \let\br@ve\breve \DeclareRobustCommand\breve{\textormath{{{\metricsfont b}}}{\br@ve}} \let\brevis\breve \DeclareRobustCommand\bbreve{{\metricsfont c}} \let\bbrevis\bbreve \DeclareRobustCommand\barbreve{{\metricsfont i}} \let\barbrevis\barbreve \DeclareRobustCommand\barbbreve{{\metricsfont j}} \let\barbbrevis\barbbreve \DeclareRobustCommand\ubarbreve{{\metricsfont d}} \let\ubarbrevis\ubarbreve \DeclareRobustCommand\ubarbbreve{{\metricsfont e}} \let\ubarbbrevis\ubarbbreve \DeclareRobustCommand\ubarsbreve{{\metricsfont f}} \let\ubarsbrevis\ubarsbreve \DeclareRobustCommand{\ubrevelunga}{{\metricsfont\char107}} \let\ubrevislonga\ubrevelunga % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} % %\begin {macro}{\corona} %\begin {macro}{\ElemInd} %\begin {macro}{\coronainv} %\begin {macro}{\catal} %\begin {macro}{\ipercatal} %\begin {macro}{\hiatus} %\begin {macro}{\Hiatus} %\begin {macro}{\X} %\begin {macro}{\anceps} %\begin {macro}{\banceps} %\begin {macro}{\ancepsdbrevis} %\begin {macro}{\aeolicbii} %\begin {macro}{\aeolicbiii} %\begin {macro}{\aeolicbiv} Similarly the following symbols have straightforward % definitions. Only |\hiatus| and |\Hiatus| require a small explanation; |\hiatus| % inserts a small capital `H' in superscript position; in a first moment it was % chosen the solution of designing a specific sans serif glyph in superscript position % directly in the metric symbol font (actually this symbol is still part of the font) % but while testing it, Paolo Ciacchi observed that a regular `H' with serifs was % better looking than the sans serif counterpart. Therefore the definition was % changes in order to use the current font upright shape; by specifying `H', it is % irrelevant if the current one is a Latin font, and the letter is a capital 'h', or % if the current one is a Greek font and the letter is a capital `eta'. |\Hiatus| % displays the same symbol in a zero width box so that it does not occupy any % horizontal space; it is useful wile writing down complicated metric sequences. % Macro|\X| may be considered, thanks to its shape, a shortcut in place of the % full name |\anceps|. % \begin{macrocode} \DeclareRobustCommand\corona{{\metricsfont\char20}} \let\ElemInd\corona \DeclareRobustCommand\coronainv{{\metricsfont\char21}} \DeclareRobustCommand\catal{{\metricsfont g}} \DeclareRobustCommand\ipercatal{{\metricsfont h}} \DeclareRobustCommand\hiatus{\textsuperscript{\upshape H}} \DeclareRobustCommand\Hiatus{\makebox[\z@]{\hiatus}} \DeclareRobustCommand\X{{\metricsfont X}} \let\anceps\X \DeclareRobustCommand\banceps{{\metricsfont Y}} \DeclareRobustCommand\ancepsdbrevis{{\metricsfont Z}} \DeclareRobustCommand{\aeolicbii}{{\metricsfont I}} \DeclareRobustCommand{\aeolicbiii}{{\metricsfont J}} \DeclareRobustCommand{\aeolicbiv}{{\metricsfont K}} % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} % %\begin{macro}{\stripsl@sh} %\begin{macro}{\2} %\begin{macro}{\3} %\begin{macro}{\4} Here we prepare for the definition of a very useful macro, |\newmetrics| % that should ease quite a lot writing complicated and repetitive metric sequences. % We shall define |\newmetrics| by means of the internal \LaTeX\ 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 \TeX{}book where there is an example for the definition of |\\TeX|). % Therefore we need a service macro |\stripsl@sh|that strips the first token from the control sequence, so that % the na\"{\i}f user does not have to treat the new metrics control sequence differently % from the control sequences it uses for example with |\newcommand|. Next we define % three numeric control sequences that should be followed by the rest of the macro name. % The na\"{\i}f user then can type in something like \verb*+\2iamb + in order to activate % a macro whose name is formed by the tokens |2iamb|, which is normally impossible in % \LaTeX. Notice, though, the compulsory space after the macro name. % \begin{macrocode} \newif\ifmetricsfont\metricsfontfalse \def\stripsl@sh#1{\expandafter\@gobble\string#1} \def\2#1 {\csname2#1\endcsname} \def\3#1 {\csname3#1\endcsname} \def\4#1 {\csname4#1\endcsname} % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\begin {macro}{\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. % \begin{macrocode} \newcommand\newmetrics[2]{% \expandafter\@namedef\expandafter{\stripsl@sh#1}% {{\metricsfonttrue#2}}% } % \end{macrocode} %\end{macro} %\begin {macro}{\iam} %\begin {macro}{\chor} %\begin {macro}{\enopl} %\begin {macro}{\4MACRO} %\begin {macro}{\aeolchorsor} %\begin {macro}{\hexam} %\begin {macro}{\pentam} %\begin {macro}{\2tr} Here some common metric sequences are defined; some define single % measures, such as the `iambus' or the `choriambus', while some define complete verses such as the % `hexameter' or the `pentameter' % \begin{macrocode} \newmetrics\iam{\barbreve\lunga\breve\lunga} \newmetrics\chor{\lunga\breve\breve\lunga} \newmetrics\enopl{\breve\lunga\breve\breve\lunga\breve\breve\lunga} \newmetrics{\4MACRO}{\lunga\lunga\lunga\lunga} \newmetrics{\aeolchorsor}{\lunga\zeugma{\breve\breve}\breve \breve\zeugma{\breve\breve}} \newmetrics{\hexam}{\lunga\breve\breve\lunga\breve\breve \lunga\breve\breve\lunga\breve\breve\lunga\breve\breve \lunga\lunga} \newmetrics{\pentam}{\lunga\barbbreve\lunga\barbbreve\lunga\dBar \lunga\breve\breve\lunga\breve\breve\lunga} \newmetrics{\2tr}{\lunga\breve\lunga\X\ \lunga\breve\lunga\X\ } % \end{macrocode} % As it may be seen the definition of such metric sequences may contain almost % anything; here |\zeugma| was used as well as \verb*+\ +, but almost every % macro defined in the previous parts may be freely used. %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} % %\begin{macro}{\metricstack} |\metricstack| is a command similar to |\shortstack| % used to stack something over something else; specifically the second argument % over the third one; it was specifically 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 script--script style, not % in script style, as it happens with |\shortstack|. % \begin{macrocode} \DeclareRobustCommand*{\metricstack}[2]% {$\mathord{\mathop{\hbox{#1\rule{\z@}{1ex}}}% \limits^{\scriptscriptstyle\relax#2\relax}}$% } % \end{macrocode} %\end{macro} % %\begin{macro}{\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. % \begin{macrocode} \newcommand*{\svert}{\vrule\@height.8ex\@depth.2ex\relax} % \end{macrocode} %\end{macro} % %\begin{macro}{\textoverline} \LaTeX\ has macro |\underline| that can be used in both % text and math mode; there is nothing similar for overlining, therefore we defined % a new command for this task. % \begin{macrocode} \DeclareRobustCommand*{\textoverline}[1]{% \leavevmode\vbox{\setbox\z@\hbox{#1} \ialign{##\crcr \hbox to\wd\z@{\hrulefill}\crcr \noalign{\kern.4ex\nointerlineskip}% \hfil\box\z@\hfil\crcr}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\verseskip} %\begin {environment}{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 file \texttt{teubner-doc.pdf} % for examining some examples. % \begin{macrocode} \newlength{\br@cedmetrics} \newcommand*{\verseskip}[1]{{% \setbox\z@\hbox{\longa}\dimen@\wd\z@\leavevmode\hbox to#1\dimen@{}}% } \newenvironment{bracedmetrics}[1]{\def\Hfill{\leavevmode\hfill}% \settowidth{\br@cedmetrics}{#1}% \ifvmode\vskip1ex\fi $\displaystyle\left.% \vcenter\bgroup\hsize\br@cedmetrics\parindent\z@\parskip\z@ }{\egroup\right\}$} % \end{macrocode} %\end{environment} %\end{macro} % %\begin{macro}{\TRON} %\begin{macro}{\GTRON} %\begin{macro}{\TROF} %\begin{macro}{\GTROF} Here there are some macros for turning on and off 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 off 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| file receives a lot of material, and the % file gets very large. % \begin{macrocode} \def\GTRON{\global\tracingcommands=\tw@ \global\tracingmacros=\tw@} \def\GTROF{\global\tracingcommands=\z@ \global\tracingmacros=\z@} \def\TRON{\tracingcommands=\tw@ \tracingmacros=\tw@} \def\TROF{\tracingcommands=\z@ \tracingmacros=\z@} % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} % % When typesetting Greek it may occur to specify numbers written out as Milesian numerals; % the \texttt{greek} option to the \babel\ package defines a couple of macros for transforming % explicit arabic numerals or counter contents as Milesian numerals. Since this package % offers more possibilities in the choice of those ``non alphabetic'' characters used in the % Milesian notation, such macros have to be redefined. On the occasion we changed some % little internal details so as to make such macros a little faster and more robust. %\begin{macro}{\Greeknumeral} %\begin{macro}{\greeknumeral} %\begin{macro}{\@ifStar} %\begin{macro}{\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 definition 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 of converting 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 redefinition command |\renewcommand| produced fragile % commands that broke out when used as arguments of other commands, specifically the Greek date % was broken when it was passed as the argument to the |\date| command of the class \textsf{memoir}; % therefore I decided to redefine the |\@ifstar| macro into another |\@ifStar| one so as not to % fiddle with \LaTeX\ kernel commands. I defined 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 redefined % |\greeknumeral| macro. % \begin{macrocode} \def\@ifStar#1#2{\def\@tempA{#1}\def\@tempB{#2}\futurelet\@tempC\@testStar} \def\@testStar{\ifx\@tempC*\bbl@afterelse\expandafter\@tempA\@gobble\else \bbl@afterfi\@tempB\fi} \DeclareRobustCommand*{\Greeknumeral}{% \let\n@vanta\Coppa\let\n@vecento\Sampi \@ifStar{\Gr@@kn@meral}{\Gr@@knum@ral}} \DeclareRobustCommand*{\greeknumeral}{% \let\n@vanta\varkoppa\let\n@vecento\sampi \@ifStar{\let\s@i\stigma\gr@@numeral}{\let\s@i\fLow\gr@@numeral}} \def\Gr@@kn@meral#1{\let\s@i\Stigma \expandafter\MakeUppercase\expandafter{\gr@@numeral{#1}}} \def\Gr@@knum@ral#1{\let\s@i\Digamma \expandafter\MakeUppercase\expandafter{\gr@@numeral{#1}}} \def\grtoday{{\expandafter\greeknumeral\expandafter{\the\day}} % keep the space \gr@c@month \space {\expandafter\greeknumeral\expandafter{\the\year}}} % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\begin{macro}{\gr@@numeral} |\gr@@numeral| must do most of the processing; it must check % that the argument is within the allowable range $1\sim999\,999$ and issue suitable % warnings if not. On the other end 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~$\leftrightarrow$ Milesian symbol. Six such macros are needed because the % allowable range 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 redefined from % Apostolos Syropoulos' \babel\ definition; it simply issues a warning message about % the 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 significant % position; of course this means that the decimal zero is treated correctly even % if Milesian symbols do not have the equivalent of a zero. % \begin{macrocode} \def\gr@@numeral#1{% \ifnum#1<\@ne\space\gr@ill@value{#1}% \else \ifnum#1<10\relax\expandafter\gr@num@i\number#1% \else \ifnum#1<100\relax\expandafter\gr@num@ii\number#1% \else \ifnum#1<\@m\relax\expandafter\gr@num@iii\number#1% \else \ifnum#1<\@M\relax\expandafter\gr@num@iv\number#1% \else \ifnum#1<100000\relax\expandafter\gr@num@v\number#1% \else \ifnum#1<1000000\relax\expandafter\gr@num@vi\number#1% \else \space\gr@ill@value{#1}% \fi \fi \fi \fi \fi \fi \fi } % \end{macrocode} %\end{macro} %\begin{macro}{\gr@num@i} %\begin{macro}{\gr@num@ii} %\begin{macro}{\gr@num@iii} %\begin{macro}{\gr@num@iv} %\begin{macro}{\gr@num@v} %\begin{macro}{\gr@num@vi} 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 macro that invokes a different transformation routine for every position. % To the right of the least significant 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 as to be the % correct lower or upper case `qoppa' or sampi' respectively. % \begin{macrocode} \def\gr@num@i#1{% \ifcase#1\or a\or b\or g\or d\or e% \or \s@i\or z\or h\or j\fi \ifnum#1=\z@\else\anw@true\fi\anw@print} \def\gr@num@ii#1{% \ifcase#1\or i\or k\or l\or m\or n% \or x\or o\or p\or \n@vanta\fi \ifnum#1=\z@\else\anw@true\fi\gr@num@i} \def\gr@num@iii#1{% \ifcase#1\or r\or s\or t\or u\or f% \or q\or y\or w\or \n@vecento\fi \ifnum#1=\z@\anw@false\else\anw@true\fi\gr@num@ii} \def\gr@num@iv#1{% \ifnum#1=\z@\else\katwtonos\fi \ifcase#1\or a\or b\or g\or d\or e% \or \s@i\or z\or h\or j\fi \gr@num@iii} \def\gr@num@v#1{% \ifnum#1=\z@\else\katwtonos\fi \ifcase#1\or i\or k\or l\or m\or n% \or x\or o\or p\or \n@vanta\fi \gr@num@iv} \def\gr@num@vi#1{% \katwtonos \ifcase#1\or r\or s\or t\or u\or f% \or q\or y\or w\or \n@vecento\fi \gr@num@v} % \end{macrocode} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} %\end{macro} % \begin{macrocode} % % \end{macrocode} % % \Finale \endinput