% \iffalse %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% ogonek package %% %% Purpose: to provide best possible ogonek in every situation %% %% The copyright holder of this file is Janusz S. Bie\'n %% (JSBien@plearn.edu.pl) %% %% The code consists of parts written by J. S. Bie\'n, L. Holenderski, %% D. H\"ubel and Igor Moo, who finally assembled this file. Any bugs %% can (and should) be attributed to him. %% %% Note: you are not allowed to modify this file. %% Note: I don't make any changes in T1 definitions so aAeE(iIuU) %% checking does not work there. %% % \fi % \iffalse % Since I hate the presence of section `Printing the documentation' % in every DOCed package my driver is put into a metacomment. % To print documentation LaTeX this file. If you need to change % the driver run DOCSTRIP and ask it to make ogonek.drv by % stripping ogonek.dtx with option `driver'. Do *not* modify this file. %<*driver> \documentclass{ltxdoc} \DisableCrossrefs % \OnlyDescription % \EnableCrossrefs % \CodelinesIndex \begin{document} \DocInput{ogonek.dtx} \end{document} % % \fi \def\fileversion{v0.51} \def\filedate{95/07/17} \def\docdate {94/12/21} % \CheckSum{236} % \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 \~} % % \def\ogon/{\texttt{ogonek}} % % \title{The \ogon/ package\thanks{Version \fileversion\ dated \filedate.}} % \author{Janusz Stanis\l aw Bie\'n} % \date{\docdate} % % \maketitle % \begin{abstract} % This \LaTeXe\ package provides a command to typeset letters with the % ogonek diacritic mark; they are used in Polish and Lithuanian. The % command is named |\k| in accordance with the recommendation of the % Technical Working Group on Multiple Language Coordination of the \TeX\ % Users Group. The principal purpose of the command is to provide the % high quality ogonek with CM fonts, although for Polish the best % results are obtained with the special Polish PL fonts; the command % can be also used with DC fonts. % \end{abstract} % % \section{Introduction} % The ogonek diacritic mark (|\k|) is absent in the original Computer % Modern font (\cite{CM}), probably because it was not needed for % Donald Knuth's Art of Computer Programming. The % ogonek was included in the extended \TeX\ layout agreed in 1990 at the % \TeX\ conference in Cork in Ireland and therefore often called simply % the Cork layout; however, there was still no standard command to % typeset it. This was remedied in 1992, when the \TeX\ Users Group % Technical Working Group on Multiple Language Coordination % WG-92-03\footnote {The group was described in \cite{Council}} % recommended a set of \TeX\ conventions concerning languages (cf. % \cite{Conv}). In particular, the command names were proposed for % typesetting letters and accents introduced in the extended layout; % the command |\k| was assigned to the ogonek and the name justified as % the last letter of the word {\it ogonek}\footnote {Actually J\"org % Knappen wrote in \cite{summary} that \texttt{\string\k} stands also % for the first letter % of the Scandinavian {kvist}. It can be viewed also as the first % letter of the German word {Krummhaken}} % % In \cite{Conv} WG-92-3 proposed also a set of two-letter names for % the language-switching macros. We use the two names from this list % (but without the preceeding backslash) as the option names in our % package: PL for Polish and LT for Lithuanian. % % The lack of a standard way to typeset ogonek with Computer Modern % fonts and its predecessors (including AM, i.e. Almost Computern % Modern fonts) was from the very beginning a very serious obstacle for % high quality typesetting of Polish texts. Several various techniques % were developed independently to circumvent this problem; in the % present package we use the method developed at the Faculty of % Mathematics, Informatics and Mechanics of the Warsaw University and % used in \LaTeX\ styles plfonts and plhb.\footnote {Thanks to the % contribution of Piotr Filip Sawicki, the support of these styles is a % standard feature of AUC \TeX, a sophisticated (La)\TeX\ environment for % Emacs, since the release 9.0 of May 1994.} % % The primary problem was to find a CM character which bears sufficient % ressemblance to ogonek. Several characters (including e.g. comma) % were tried till 1988, when Jerzy Ryll suggested to use |\lhook| (left % hook) symbol available in Plain \TeX\ as a part of the |\hookrightarrow| % ($\hookrightarrow$) symbol; this is the character \texttt{'54} in math italics % fonts. Ryll's idea was described in the note \cite{TeXline} and % Janusz S. Bie\'n's \texttt{pl.sty} style using this technique was sent to the % \TeX line editor to be included in the Aston \TeX\ archive; % unfortunately, it seems that it never managed to get there. The % idea was also presented in a paper written in Polish in 1988, which % however appeared much later (\cite{cttex90}). % % The remaining problem was to achieve proper positioning of the left % hook character with the appropriate letters for every fonts size and % shape; as ogonek accompanies such different letters as a, A, e and E, % this was not an easy task. At first it was done simply by hand, as in % Janusz S.~Bie\'n's \texttt{plfonts.tex} file loaded during the \LaTeX\ format % generation. The credit for solving this problem is due to Leszek % Holenderski, who in 1989 created his \texttt{plfonts.sty}, which patched the % standard \LaTeX\ font switching mechanism with the code for adjusting % the placing of ogonek. We use his code here without any substantial % changes.\footnote {Bie\'n's notes say that he started to use Ryll's % technique on 22nd June 1988 and created a version of Holenderski's % style on 17th October 1999 (the version was called \texttt{plhb.sty}, % where \texttt{hb} % stands for {Holenderski's style as modified by Bie\'n} and \texttt{pl} stands % both for Polish and the earlier \texttt{pl} style; it used a different input % convention than the original Holenderski's style)} % % In the extended \TeX\ layout used at present practically only in % Norbert Schwarz's DC fonts (cf. \cite{DC1}, \cite{DC2}) but envisaged % as the future \TeX\ standard and therefore recommended for \LaTeXe\ % users the slots are assigned for both Polish letters with ogonek and % the ogonek itself; typeseting all Polish letters and some Lithuanian % ones causes therefore no problem and requires only referencing the % appropriate characters; the remaining Lithuanian characters have to % be typeset using by the composition of the appropriate chcaracters % (the |\accent| primitive cannot be used for this purpose because it % placed the accent {over} the letter). % % The primary problem with the extended \TeX\ font layout was (at to some % measure still is) its incompatibility with the standard CM layouts, % which for many users makes the migration to the new layout % prohibitively difficult. For many applications a good solution was a % mixed layout, with the lower part (character codes from 0 to 127) % fully compatible with CM fonts and the higher part more or less % compatible with the Cork layout. We will call this layout % {Cork-extended CM layout}\footnote {It seems to be little known that % the layout should be coded in the TFM and PK files by means of the % Metafont \textbf{font\_coding\_scheme} command; to the best of our knowledge, % the only program which takes advantage of this fact is Eberhard % Mattes' dvispell}. % % The PL fonts, developed by Bogus{\l}aw Jackowski and Marek Ry\'cko with % some advice of a professional typographer Roman Tomaszewski and % included in the MeX distribution\footnote{available e.g. from % Comprehensive \TeX\ Archive Network in the directory % tex-archive/languages/polish }, are a special % case of Cork-like extended Computer Modern fonts---in the higher % part they contain Polish letters with ogonek placed in the same slots % as in the Cork layout; however, they contain also the Polish double % opening quote moved from its Cork position in the lower part to the % higher part of the font. This layout can be called PL-extended CM % fonts\footnote {At present (i.e. in all MeX releases including 1.5) a % PL font have the \textbf{font\_coding\_scheme} identical with the CM font it is % compatible with. For example, both plr10 and cmr10 have the coding % scheme {TeX text}, pltt10 and cmtt10 {TeX typewriter text} etc. % Dvispell users would appreciate very much if the PL fonts were % distinguishable from CM fonts by the coding scheme field, which can % be asigned such values as {PL-extended TeX text}, {PL-extended TeX % typewriter text} etc.} % % The PL fonts provide the best quality for Polish texts; however, for % those Lithuanian letters with ogonek which do not coincide with Polish % ones it is necessary to use the same technique as for CM fonts. In % consequence, for Lithuanian texts the use of DC fonts is probably an % optimal solution. % % % \section{Usage} % The package is loaded in the standard way with the % |\usepackage{ogonek}| command. % % As the fonts called by us the PL-extended CM fonts are not widely % used, they do not have also a generally accepted symbol for their % layout. Mariusz Olko in his preliminary version of polski package % referes to them as OT1P, while W{\l}odzimierz Bzyl in his LaMeXe uses % the OT4 symbol. % In consequence \ogon/ works with the following % font encodings: % OT1 (standard meaning) % OT1P (PL fonts with Olko's package) % OT4 (PL fonts with LaMeX2e and later versions of Olko's package) % T1 (standard meaning) % % The package accepts two language options: % % \begin{tabular}{cl} % PL & only Polish letters with ogonek\\ % LT & Lithuanian letters --- which subsume the Polish ones --- with ogonek % \end{tabular} % % Omitting the language option allows to use any letter with ogonek. % % \section{Hyphenation of words with ogonek accent} % The full and correct hyphenation of words with ogonek (and other Polish % letters) is possible with DC and PL fonts; details to be written later. % % \StopEventually{ % \begin{thebibliography}{8} % \bibitem{TeXline} % Janusz S. Bie\'n. Polish Language and {\TeX}. \TeX line 8, January 1989, % p.~2. % % \bibitem{cttex90} Janusz S. Bie\'n. Co to jest {\TeX}. Available by % anonymous FTP from ftp.mimuw.edu.pl in pub/users/jsbien/tex as % cttex90.tar.Z or from LISTSERV@PLEARN.edu.pl as CTTEX90 PACKAGE. % % \bibitem{Cork} % Michael J. Ferguson. Report on Multilingual Activities. % TUGboat Vol. 11, No 4, November 1990, pp 514--516 % % \bibitem{Council} % Michael J. Ferguson. The Technical Council. % {\it \TeX\ and TUG News} Vol. 1, No. 3, November 1992, pp 5--8. % % \bibitem{Conv} % Yannis Haralambous. \TeX\ Convention Concerning Languages. % {\it \TeX\ and TUG News} Vol. 1, No. 4, December 1992, pp 3--10. % % \bibitem{DC1} % Yannis Haralambous. DC fonts---questions and answers (I). % {\it \TeX\ and TUG News} Vol. 1, No. 4, December 1992, pp 15--17. % % \bibitem{DC2} % Yannis Haralambous. DC fonts---questions and answers (II). % {\it \TeX\ and TUG News} Vol. 2, No. 1, February 1993, pp 10--12. % % \bibitem{summary} % J\"org Knappen. Summary on Polish (La)\TeX. Info-TeX@SHSU.edu and % TeX-Euro@vm.urz.uni-heidelberg.de, 20th Novemebr 1992. % % \bibitem{CM} % Donald E. Knuth. Computer Modern Typefaces. Computers and Typesetting % Vol. E. Addison-Wesley, Reading, Massachusetts 1986. % \end{thebibliography} % } % % % \section{Implementation} % {\small Beware: comments in this section were written by Igor Moo.} % \subsection{Identification} % We start the code with standard identification of the package % \begin{macrocode} %<*style> \NeedsTeXFormat{LaTeX2e}[95/06/01] \ProvidesPackage{ogonek}[\filedate\space\fileversion\space Provides macro `\string\k' for ogonek] % \end{macrocode} % \subsection{Processing options} % \subsubsection{Encoding selection options} % \begin{macro}{\ogonek@obsolete} % In previous versions of \ogon/ options were present for selection of % font encoding(s) used in a document. Now they are no longer needed since % we try to guess what encodings are really used. % \begin{macrocode} \newcommand\ogonek@obsolete[1]{% \PackageWarningNoLine{ogonek}{Option #1 is now obsolete \MessageBreak due to dynamic encodings testing} } \DeclareOption{T1}{\ogonek@obsolete{T1}} \DeclareOption{OT1}{\ogonek@obsolete{OT1}} \DeclareOption{OT1P}{\ogonek@obsolete{OT1P}} \DeclareOption{OT4}{\ogonek@obsolete{OT4}} % \end{macrocode} % \end{macro} % % \subsubsection{Language selection options} % \begin{macro}{\@testogonekletter} % Here we define macro that will be used below to test if a ogonked % letter is `legal'. Primarily we define it just to gobble it's % argument. % % If option \texttt{PL} is specified the macro is redefined to accept % only Polish ogonked letters. Option \texttt{LT} redefines it to allow % only Lithuanian letters. % % If both options were specified all aAeEiIuU letters will be allowed % since in \LaTeXe\ options are processed in order of % declaration and LT overwrites PL. % \begin{macrocode} \let\@testogonekletter\@gobble \DeclareOption{PL}{ \def\@testogonekletter#1{% \ifx a#1\else \ifx A#1\else \ifx e#1\else \ifx E#1\else \PackageWarning{ogonek}% {Unusual Polish letter #1 with ogonek}\fi \fi \fi \fi } } \DeclareOption{LT}{ \def\@testogonekletter#1{% \ifx a#1\else \ifx A#1\else \ifx e#1\else \ifx E#1\else \ifx i#1\else \ifx I#1\else \ifx u#1\else \ifx U#1\else \PackageWarning{ogonek}% {Unusual Lithuanian letter #1 with ogonek}\fi \fi \fi \fi \fi \fi \fi \fi } } % \end{macrocode} % \end{macro} % Now we're ready to process the options % \begin{macrocode} \ProcessOptions % \end{macrocode} % \subsection{Positioning of ogonek in old fonts} % This comes from L.~Holenderski's \texttt{plfonts.sty}. % Positionig of ogonek for specific letters is tuned for 300dpi % Computer Modern fonts, but works reasonably well with other % resolutions. % \begin{macro}{\sob} % Macro |\sob| positioning ogonek under a letter. % \begin{macrocode} \dimendef\pl@left=0 \dimendef\pl@down=1 \dimendef\pl@right=2 \dimendef\pl@temp=3 % typeset `ogonek' box \def\sob#1#2#3#4#5{% parameters: letter and fractions hl,ho,vl,vo \setbox0\hbox{#1}\setbox1\hbox{$_\mathchar'454$}\setbox2\hbox{p}% \pl@right=#2\wd0 \advance\pl@right by-#3\wd1 \pl@down=#5\ht1 \advance\pl@down by-#4\ht0 \pl@left=\pl@right \advance\pl@left by\wd1 \pl@temp=-\pl@down \advance\pl@temp by\dp2 \dp1=\pl@temp \leavevmode\kern\pl@right\lower\pl@down\box1\kern-\pl@left #1} % \end{macrocode} % \end{macro} % \begin{macro}{\aob}\begin{macro}{\Aob}\begin{macro}{\eob} % \begin{macro}{\Eob}\begin{macro}{\iob}\begin{macro}{\Iob} % \begin{macro}{\uob}\begin{macro}{\Uob} % Special positioning of ogonek for some letters % \begin{macrocode} \def\aob{\sob a{.66}{.20}{0}{.90}} \def\Aob{\sob A{.80}{.50}{0}{.90}} \def\eob{\sob e{.50}{.35}{0}{.93}} \def\Eob{\sob E{.60}{.35}{0}{.90}} \def\iob{\sob i{.66}{.20}{0}{.90}} \def\Iob{\sob I{.80}{.50}{0}{.90}} \def\uob{\sob u{.66}{.20}{0}{.90}} \def\Uob{\sob U{.60}{.35}{0}{.90}} % \end{macrocode} % \end{macro}\end{macro}\end{macro}\end{macro} % \end{macro}\end{macro}\end{macro}\end{macro} % % \begin{macro}{\@iIuUogonek} % \begin{macro}{\@oldfontsogonek} % Below we define macros producing ogonek in encodings OT4 (OT1P) (this % needs special positioning of ogonek only for iIuU since for aAeE we % have composities) and OT1. This could be done in a more \LaTeX y way % if we had something like \verb+\DeclareTextComposite+ allowing % replacement to be macro not a single character. But we haven't. % \begin{macrocode} \def\@iIuUogonek#1{% \ifx i#1\iob\else \ifx I#1\Iob\else \ifx u#1\uob\else \ifx U#1\Uob\else\sob {#1}{.50}{.35}{0}{.90}\fi \fi \fi \fi } \def\@oldfontsogonek#1{% \ifx a#1\aob\else \ifx A#1\Aob\else \ifx e#1\eob\else \ifx E#1\Eob\else \@iIuUogonek{#1} \fi \fi \fi \fi } % \end{macrocode} % \end{macro} % \end{macro} % \subsection{Testing of encodings used in a document} % This testing must be carried off when the document begins, % since only then all used encodings are already known. % We use |\AtBeginDocument| hook for that purpose. % This will work unless some package loaded after \ogon/ % has an idea to declare encodings `at begin document' (I cannot think % of any reason for that). % % First my favourite hack for operations on names % constructed with |\csname|: % \begin{macrocode} \newcommand\n@me[2]{\expandafter#1\csname#2\endcsname} % \end{macrocode} % You can not only say |\n@me\ifx{T@T1}\sth| but even |\n@me\show{a name}| % or |\n@me\newcommand{and another}{...}| (sic!). % % The testing really starts here. If an encoding \texttt{XXX} is known % a macro with name |\T@XXX| is defined. In that way we check % what encodings are in use. % % For every encoding found we define |\k| to % test if accentee is legal and put appropriate kind of ogonek. % \begin{macrocode} \AtBeginDocument{% % \end{macrocode} % We don't make any changes for T1, since all we need is defined by % default. % \begin{macrocode} \n@me\ifx{T@T1}\relax \else \PackageInfo{ogonek}{T1 is known} \fi % \end{macrocode} % For OT1 encoding we define ogonek as |\@oldfontsogonek| % \begin{macrocode} \n@me\ifx{T@OT1}\relax \else \PackageInfo{ogonek}{Defining ogonek for OT1} \DeclareTextCommand\k{OT1}[1]{% \@testogonekletter{#1}\@oldfontsogonek{#1}} \fi % \end{macrocode} % For OT4 or OT1P |\k| won't know how to put ogonek under aAeE, % but we have composities for that cases. % % We are lucky that ogonek is always allowed under aAeE. Otherwise % we would have to invent a way to incorporate test into composities. % \begin{macrocode} \n@me\ifx{T@OT4}\relax \else \PackageInfo{ogonek}{Defining ogonek for OT4} \DeclareTextCommand\k{OT4}[1]{% \@testogonekletter{#1}\@iIuUogonek{#1}} \DeclareTextComposite\k{OT4}{a}{"A1} \DeclareTextComposite\k{OT4}{A}{"81} \DeclareTextComposite\k{OT4}{e}{"A6} \DeclareTextComposite\k{OT4}{E}{"86} \fi \n@me\ifx{T@OT1P}\relax \else \PackageInfo{ogonek}{Defining ogonek for OT1P} \DeclareTextCommand\k{OT1P}[1]{% \@testogonekletter{#1}\@iIuUogonek{#1}} \DeclareTextComposite\k{OT1P}{a}{"A1} \DeclareTextComposite\k{OT1P}{A}{"81} \DeclareTextComposite\k{OT1P}{e}{"A6} \DeclareTextComposite\k{OT1P}{E}{"86} \fi } % \end{macrocode} % And that's all. % \begin{macrocode} \endinput % % \end{macrocode} % % \iffalse metaquestion % this definition intended for T1 encoding differs from % `official' lxiie version. why? IM %\def\@gonekaccent #1{% % \setbox\z@\hbox {#1}\ifdim\ht\z@=1ex\accent12 #1% % \else {\ooalign{\unhbox\z@\crcr\hidewidth\char12\hidewidth}}\fi} % \fi % % \Finale % \iffalse %% %% End of file `ogonek.sty'. % \fi