From 368e39ec4ee1a290bca0bb81c09847bfb1d33a6e Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 28 Jan 2015 22:28:31 +0000 Subject: begingreek (27jan15) git-svn-id: svn://tug.org/texlive/trunk@36158 c570f23f-e606-0410-a88d-b1316a301751 --- .../source/latex/begingreek/begingreek.dtx | 439 +++++++++++++++++++++ 1 file changed, 439 insertions(+) create mode 100644 Master/texmf-dist/source/latex/begingreek/begingreek.dtx (limited to 'Master/texmf-dist/source/latex/begingreek') diff --git a/Master/texmf-dist/source/latex/begingreek/begingreek.dtx b/Master/texmf-dist/source/latex/begingreek/begingreek.dtx new file mode 100644 index 00000000000..6c5e75b4844 --- /dev/null +++ b/Master/texmf-dist/source/latex/begingreek/begingreek.dtx @@ -0,0 +1,439 @@ +% \iffalse meta comment +% !TEX encoding = UTF-8 Unicode +%<*internal> +\begingroup +\input docstrip.tex +\keepsilent +\preamble +Copyright 2015 Claudio Beccari All rights reserved. + + This system is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +This file is distributed under the LPPL licence, version 1.3c +dated 2008-05-04 or later as it appears in +CTAN/macros/latex/base/lppl.tex. + +IMPORTANT NOTICE: + +You are not allowed to change this file. + +You are allowed to distribute this file under the condition that it is +specified in the source file begingreek.dtx. + +If you receive only some of these files from someone, complain! + +You are NOT ALLOWED to distribute this file alone. You are NOT +ALLOWED to take money for the distribution or use of either this +file or a changed version, except for a nominal charge for copying +etc. +\endpreamble +\askforoverwritefalse + +\generateFile{begingreek.sty}{f}{\from{begingreek.dtx}{package}} +\def\tmpa{plain} +\ifx\tmpa\fmtname\endgroup\expandafter\bye\fi +\endgroup +% +%\fi +% \iffalse +%<*dtx> +\ProvidesFile{begingreek.dtx}[2015/01/26 v.1.4 describes environment greek (CB)] +% +%\NeedsTeXFormat{LaTeX2e}[2011/06/27] +%\ProvidesPackage{begingreek}[2015/01/26 v.1.4 defines environment greek (CB)] +% +%<*driver> +\documentclass{ltxdoc} +\GetFileInfo{begingreek.dtx} + \title{The \textsf{begingreek} package% +% \thanks{This file +% has version number \fileversion, last +% revised on \filedate.}% +} + \author{Claudio Beccari -- \texttt{claudio dot beccari at gmail dot com}} + \date{Version \fileversion\ of \filedate} + \providecommand\babel{\textsf{babel}} + \newcommand\pack[1]{\textsf{#1}} + \renewcommand\meta[1]{{\normalfont$\langle$\textit{#1}$\rangle$}} + \renewcommand\oarg[1]{{\normalfont\texttt{[}\meta{#1}\texttt{]}}} + \renewcommand\marg[1]{{\normalfont\texttt{\{}\meta{#1}\texttt{\}}}} + \newcommand\Arg[1]{{\normalfont\texttt{\{#1\}}}} + \renewcommand\cs[1]{{\normalfont\texttt{\char92#1}}} + \newcommand\lbr{\char123\relax}\newcommand\rbr{\char125\relax} + \newenvironment{sintassi}{% + \begin{quote}\parskip0pt\hfuzz10pt\obeylines + }{% + \end{quote}\ignorespaces + } + \newcommand*\acro[1]{\expandafter\textsc\expandafter{\MakeLowercase{#1}}} + \usepackage[greek.polutoniko,english]{babel} + \usepackage[utf8]{inputenc} + \usepackage[T1]{fontenc} + \usepackage{lmodern,textalpha} + \usepackage{multicol,booktabs}\renewcommand\columnseprule{0.4pt} + \usepackage{begingreek} + \def\alfabeto{abgdezhjiklmnxoprsctufqyw} + + +\begin{document} + \maketitle + \DocInput{begingreek.dtx} +\end{document} +% +% \fi +% \CheckSum{82} +%\begin{multicols}{2}\tableofcontents\end{multicols} +% +% \begin{abstract} +% This small extension module defines the environment |greek| to be used with +% |pdfLaTeX| so as to imitate the similar environment defined in |polyglossia|. +% A corresponding command, |\greektxt|, is also defined. +% Of course there are some differences, but it has been used extensively and +% it is useful. +% \end{abstract} + +% \section{Introduction} +% When using |pdfLaTeX| and |babel|, language changes are done with |babel|'s +% language switching commands |\selectlanguage|, |\foreignlanguage| or with the +% environments |otherlanguage| and |otherlanguage*|. They work fine, but +% sometimes it is better to have a more ``agile'' command or environment +% that can be used at least in place of the last three commands or +% environments. Some more extra functionalities may be desirable, such +% as the possibility of specifying a different default font family or to +% switch font family for a particular stretch of Greek text. +% +% This small module does exactly what is described above; it has been created +% only to be used with |pdfLaTeX|, therefore if it gets loaded with a package that +% will be run with |XeLaTeX| or |LuaLaTex| it will complain loudly and its +% loading will be aborted; no, not simply that: the only way to exit from +% this wrong situation is to quit compilation. The strong error message is +% such that the user is forced to quit and either change compiler or comment +% out the call to this module. +% +% \section{Usage} +% This module is loaded in the preamble in the usual way: +%\begin{sintassi} +%|\usepackage|\oarg{greek font family}\Arg{begingreek} +%\end{sintassi} +% +% The \meta{greek font family} must be specified with the exact name that +% appears in the \emph{font definition file} with file extension |.fd|; for +% example, if the Didot fonts produced by the Greek Font Society (GFS) are +% desired, it must be specified as |udidot| because the |.fd| file is named +% |lgrudidot.fd|; we recall that the names of the |.fd| files result from +% the agglutination of the encoding code and the family name, everything in +% lower case: |lgr| is the lower case code of the LGR encoding, and |udidot| +% is the family name. As another example, if the Greek +% Baskerville font, also distributed by the same GFS, is required, the font family +% name is |gfsbaskerville| as it can be deduced from the name of the |.fd| file. +% The same similar attention must be paid for the other available Greek +% fonts. Table~\ref{tab:greek-fonts} gives an overview of the correspondence +% between font names, font families, and their appearance. +% +% If no optional \meta{greek font family} is specified, the default Latin +% Modern compatible LGR encoded Greek fonts are selected. +% +% Please notice that among the LGR encoded Greek fonts there are many +% collections, not only those distributed by the Greek Font Society; +% table~\ref{tab:greek-fonts} displays some families already available at +% the time of writing this documentation. This table shows only the normal +% upright shape of each listed family, but each collection may contain also +% other families, other shapes and the matching Latin fonts in encodings +% T1 and/or~OT1. +% +%\begin{table} +%\centering +%\begin{tabular}{*3l} +%\toprule +%Font & Family name & Sample text \\ +%\midrule +%Artemisia & |artemisia| &\begin{greek}[artemisia]\alfabeto\end{greek}\\ +%Baskerville & |gfsbaskerville|&\begin{greek}[gfsbaskerville]\alfabeto\end{greek}\\ +%Bodoni & |bodoni| &\begin{greek}[bodoni]\alfabeto\end{greek}\\ +%Complutum & |complutum| &\begin{greek}[complutum]\alfabeto\end{greek}\\ +%Didot & |udidot| &\begin{greek}[udidot]\alfabeto\end{greek}\\ +%Neohellenic & |neohellenic| &\begin{greek}[neohellenic]\alfabeto\end{greek}\\ +%Porson & |porson| &\begin{greek}[porson]\alfabeto\end{greek}\\ +%Solomos & |solomos| &\begin{greek}[solomos]\alfabeto\end{greek}\\ +%\midrule +%Greek Times & |txr| & \begin{greek}[txr]\alfabeto\end{greek}\\ +%Kerkis & |mak| & \begin{greek}[mak]\alfabeto\end{greek}\\ +%LX & |llcmss| & \begin{greek}[llcmss]\alfabeto\end{greek}\\ +%\midrule +%Default & |lmr| &\begin{greek}\alfabeto\end{greek}\\ +%\bottomrule +%\end{tabular} +% +%\caption{Some greek font families available with \TeX\ Live 2014; the first font group is made available by the Greek Font Society; the second group is made available by different authors. The last font is just the default.} +%\label{tab:greek-fonts} +%\end{table} +% +% Another point should be stressed; the fonts distributed by the Greek Font +% Society are pretty good but, please, do not expect that they are complete as the +% Latin Modern compatible ones; the latter were built in order to satisfy +% the most stringent requirements of the Hellenists; while the former were +% designed to satisfy the every day needs of Greek typesetting. +% I don't claim that the default fonts are better than the ones +% provided by other groups; it is just a caveat that with some fonts certain +% glyphs are available which are not available with other fonts. +% +% \section{Incomplete fonts and different encoding} +% I would like to stress even more the necessity of reading the documentation +% relative to each Greek font collection you want to use in your document. Some +% fonts, such as Epigrafica, have been designed just for the monotonic +% Greek spelling (unfortunately the Epigrafica documentation is not so clear +% about this point); but these fonts have their |.fd| files with the family +% name |epigrafica|; everything appears normal, but as soon you typeset +% even the shortest text with the polytonic spelling, you +% find out that most diacritics are missing; the |.log| file reports missing +% glyphs, but the warning is not so easy to decipher; this is due to the way +% \LaTeX\ writes out messages to the |.log| file. +% +% Other non LGR encoded fonts may be used to typeset Greek text, +% for example Ibycus, Yannis Harambous' Greek fonts, Sylvio Levi's +% fonts; they may be used with Plain \TeX\ and therefore don't use |.fd| files; +% or they have their own package, for example |ibycus.sty|, to make the fonts +% accessible to \LaTeX\ users. Therefore don't use this extension module +% |begingreek| with these fonts; if you do and specify the names of these fonts +% as if they were their font family names, you get a warning message and the +% Greek text gets typeset with the default fonts (see the next paragraph). +% +% \section{Default font control} +% It may happen to misspell the Greek font family name to be specified as +% an option to the module loading statement. This specified +% name is used to create the corresponding |.fd| file name and it is checked +% if this |.fd| actually exists. If it does not exist, a warning message +% is output and the default Greek font is used in its place. +% +% The |.fd| might be missing also if a basic incomplete \TeX\ system +% distribution is installed; in this case the user should provide to +% complete the installation or refrain from using a Greek font family +% that is not available or that misses the companion |.fd| file. +% +% \section{The new \texttt{greek} environment} +% With this package loaded, the user has a new environment available; this +% environment has the following syntax: +%\begin{sintassi} +%|\begin|\Arg{greek}\oarg{other Greek font family} +%\meta{Greek text} +%|\end|\Arg{greek} +%\end{sintassi} +% where the \meta{Greek text} may be as short as a single word or as long +% as several paragraphs. +% +% This Greek text may be input in three different ways: in order to get +% \greektxt{αὐτῇ}, it is possible to write the source file as \verb+a>ut~h|+, +% or \verb+a\>t\~h|+, or |αὐτῇ|. The third way looks much better to a +% Hellenist, but it may be difficult to type-in without a suitable +% keyboard and/or operating system; it also requires loading the +% \pack{textalpha} package. Notice that the first form, characteristic +% of the LGR encoded Greek fonts, relies on the font ligature functionality, +% but in certain cases it lets some kerning failures become visible; +% the second form relies on the internal LICR definitions (LICR: +% LaTeX Internal Character Representation) and no kerning failures +% take place; the direct Greek input relies on a special extended LICR +% when used with |pdfLaTeX|. The LICR definitions have been part of any +% modern \TeX\ Live distribution since December~2013. +% +% The optional argument \meta{other Greek font family} is just another +% family; the less you have to type, the less error-prone is your source code. +% Nevertheless the family name that is being specified is tested for +% the existence of its corresponding font |.fd| file, and if this file +% does not exist or the family name is misspelt, the default Greek font is used. +% +% \section{The command \texttt{\char92greektxt}} +% For very short Greek texts an even simpler approach may be defined. +% With a single command |\greektxt| it is possible to typeset a Greek +% text as short as one word or containing a short phrase, with a font +% of an optionally specified family. The syntax is the following one: +%\begin{sintassi} +%|\greektxt|\oarg{other Greek font family}\marg{Greek short text} +%\end{sintassi} +% where \meta{other Greek font family} behaves as described for the |greek| +% environment, while \meta{Greek short text} stresses the fact that the +% Greek text must be short, a fraction of a paragraph; should it contain +% a paragraph terminator (command |\par| or a blank line) an error flag is +% raised. +% +% +% \section{Font shapes and series} +% For both the environment |greek| and the command |\greektxt| the font +% shape and/or series are specified with the usual shape and/or font +% declarations such as |\bfseries|, |\itshape|, and so on. Some families +% have non standard shapes; the default Latin Modern +% compatible Greek fonts extra shapes are already defined in their +% specific |.fd| font file; the same is true with other families; in +% general the medium and bold extended series and the upright and +% italic/slanted shapes are always available; although +% table~\ref{tab:greek-fonts} displays some families where the \emph{normal} +% shape is already oblique, those families miss another italic or slanted +% shape. +% +% The user therefore should control the documentation of the extension module +% relative to each family; should this documentation be missing, the user +% should fetch the font |.fd| file, open it with a text editor, and read +% inside the file which shapes are available; this does not necessarily +% imply that the specific font extension module has a special command to choose +% that shape, but the user can define himself one. This is not unusual: +% even the standard Computer Modern (CM) Latin fonts have available the +% {\fontshape{ui}\selectfont upright italic shape,} but the \LaTeX\ kernel +% and all standard classes miss the |\uishape| declaration and the |\textui| +% command, in spite that the |ui| internal shape code is defined and the +% font is available. +% +% +% \section{Examples} +% The following examples are carried on with the |\greektxt| command, but +% of course they produce the same results if the Greek text is enclosed +% in a corresponding environment. Here we assume that the command +% |\alphabet| contains the lowercase Greek alphabet and |\lishape| has +% been defined as |\fontshape{li}\selectfont|. +% Table~\ref{tab:examples} displays some results in order to show some +% family, series and shape selection. +% +% \begin{table}\tabcolsep=2pt\relax +%\makebox[\textwidth]{\begin{tabular}{ll} +%^^A\toprule +%\multicolumn2c{Latin Modern}\\\midrule +% \multicolumn1c{Command} & \multicolumn1c{Result} \\ +% \cs{greektxt}\Arg{\cs{alphabet}} & \greektxt{\alfabeto} \\ +% \cs{greektxt}\Arg{\cs{bfseries}\cs{alphabet}} & \greektxt{\bfseries\alfabeto}\\ +% \cs{greektxt}\Arg{\cs{lishape}\cs{alphabet}}& \greektxt{\fontshape{li}\selectfont\alfabeto}\\[2ex] +%\multicolumn2c{Bodoni}\\\midrule +% \multicolumn1c{Command} & \multicolumn1c{Result} \\ +% \cs{greektxt[bodoni]}\Arg{\cs{alphabet}} &\greektxt[bodoni]{\alfabeto}\\ +% \cs{greektxt[bodoni]}\Arg{\cs{bfseries}\cs{alphabet}}&\greektxt[bodoni]{\bfseries\alfabeto}\\ +% \cs{greektxt[bodoni]}\Arg{\cs{itshape}\cs{alphabet}}&\greektxt[bodoni]{\itshape\alfabeto}\\ +%\bottomrule +%\end{tabular}} +% \caption{Some examples of family, series and shape selection} +% \label{tab:examples} +% \end{table} +% +% \section{Acknowledgements} +% I should acknowledge the collaboration of a person, whose name I can't +% remember, whom a couple of years ago I developed the first embryo of +% this module with; the project was abandoned, I don't remember why. I must +% thank also Mauro Sacchetto whose questions posted in the forum of the +% Italian TUG forced me to resume the project; he also tested the +% environment and the command, and gave me a very important feedback. +% +%\StopEventually{} +% +%\section{The code} +% The identification lines have already been written to the |.sty| file; +% here we describe the real code. +% +% First we load the module \pack{iftex} in order to test if the typesetting +% engine is |pdfTeX|; if it is not, we provide an error message and force the +% user to quit the job. +%\iffalse +% +%\fi +% \begin{macrocode} +\usepackage{iftex} +\unless\ifPDFTeX +\PackageError{begingreek}{\MessageBreak +Package `begingreek' works only with `pdfLaTeX'\MessageBreak +Nothing done\MessageBreak +\MessageBreak +Type X to quit}{\@ehd} +\expandafter\endinput +\fi +% \end{macrocode} +% At this point we know we are typesetting with the |pdfTeX| engine; now +% we test if the |greek| language has been specified to \babel. It does +% not matter which attributes or modifiers of the language have been specified, +% but any Greek variant is valid. We use the $\varepsilon$-\TeX\ command +% |\ifcsname| so that we do not produce any trace in memory and in particular +% we do not need to test the macro with |\ifx| against |\relax|. +% If the language |greek| has not been specified to \babel\ or if this +% module has been loaded before \babel\ itself, an error flag is raised and the +% user is forced to quit the job. +% \begin{macrocode} +\unless\ifcsname captionsgreek\endcsname +\PackageError{begingreek}{\MessageBreak +Package `begingreek' may be used only\MessageBreak +if language `greek' is already defined\MessageBreak +Check that `begingreek' is loaded after\MessageBreak +`babel' and that the language `greek'\MessageBreak +has been specified\MessageBreak\MessageBreak +Type X to quit}{\@ehd} +\expandafter\endinput +\fi +% \end{macrocode} +% Now we can define the package option with the standard facilities +% provided by the \LaTeX\ kernel. First we set some the default Greek +% font family to the |lmr| one (Latin Modern compliant ``serifed'' +% Greek fonts). Then we define a generic option that uses the +% |\CurrentOption| macro for setting another default Greek font family. +% Of course it is necessary to test if the generic option passed as an +% optional argument to the \pack{begingreek} package is a valid one; +% to be a valid one there must exist a file named |lgr\CurrentOption.fd|; +% if this file does exist, the proper (expanded) definition is made, +% otherwise a warning message is issued and the default greek font family +% is used. Eventually the |\ProcessOptions| command is given so that +% the generic option becomes the new default Greek font family; within +% the document body it is possible to change the current Greek font family, +% so that the whole process can work to fit the user needs. +% \begin{macrocode} +\def\greekfontfamily{lmr} + +\DeclareOption*{\IfFileExists{lgr\CurrentOption.fd}{% +\edef\greekfontfamily{\CurrentOption}}{% +\PackageWarning{begingreek}{% +The file lgr\CurrentOption.fd does not exist\MessageBreak +Either provide such a file, or specify a\MessageBreak +valid Greek font family to the\MessageBreak +\string\begin\string{greek\string} package\MessageBreak +I continue with the default font family\MessageBreak}}} +\ProcessOptions\relax + +% \end{macrocode} +% +% Now we can define the new environment |greek|. Notice that we use +% the default Greek font family to specify the environment optional argument, +% but we have to test the validity of the font family name; we cannot +% use the same name |\greekfontfamily| in the internal definitions +% otherwise we'd produce an infinite loop; so we have to change the name +% of the macro that holds the specified family name; if it is an +% invalid name, either misspelt or inexistent, we reset it to the default, +% either the overall default or the package defined default (saved +% in |\greekfontfamily|) so we can proceed without further problems. +% \begin{macrocode} +\newenvironment{greek}[1][\greekfontfamily]{\begin{otherlanguage}{greek}% +\edef\Greekfontfamily{#1}% +\IfFileExists{lgr\Greekfontfamily.fd}{}% +{\PackageWarning{begingreek}{% +Font family lgr\Greekfontfamily.fd does not exist\MessageBreak +Default fonts used}\def\Greekfontfamily{\greekfontfamily}}% +\fontfamily{\Greekfontfamily}\selectfont +}{\end{otherlanguage}} + +% \end{macrocode} +% The corresponding command definition is almost equal. The optional +% Greek font family name is subject to the same tests as for the +% corresponding optional argument of the |greek| environment. +% \begin{macrocode} +\newcommand*\greektxt[2][\greekfontfamily]{% +\edef\Greekfontfamily{#1} +\foreignlanguage{greek}{% +\IfFileExists{lgr\Greekfontfamily.fd}{}% +{\PackageWarning{begingreek}{% +Font family lgr\Greekfontfamily.fd does not exist\MessageBreak +Default fonts used}\def\Greekfontfamily{\greekfontfamily}}% +\fontfamily{\Greekfontfamily}\selectfont#2}} + +% \end{macrocode} +% +% And this definition ends this small package. +% +%\iffalse +% +%\fi +% \Finale +% +%\endinput + -- cgit v1.2.3