% \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/02/16 v.1.5 describes environment greek (CB)] % %\NeedsTeXFormat{LaTeX2e}[2011/06/27] %\ProvidesPackage{begingreek}[2015/02/16 v.1.5 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