% \CheckSum{1342} % \iffalse % ====================================================================== % pdfcprot.dtx % Copyright (C) 2001/2002 Carsten Schurig % % This file is a package to use character protruding of pdftex. % % This file can be redistributed and/or modified under the terms % of the LaTeX Project Public License Version 1.2 or later distributed % together with this file. See LEGAL.TXT % ====================================================================== % % \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 \~} % %<*dtx> \ProvidesFile{pdfcprot.dtx} % % \ProvidesFile{pdfcprot.drv} %<*dtx> %<*driver> [2005/05/23 v1.7a pdfcprot % % % documented source] %<*driver> bundle] \documentclass[10pt,a4paper]{ltxdoc} %\usepackage[a4paper,BCOR20mm,DIV12]{typearea} \usepackage[latin1]{inputenc} \usepackage[T1]{fontenc} \usepackage{array,tabularx} %\DisableCrossrefs \EnableCrossrefs \CodelineIndex %\OnlyDescription \RecordChanges \MakeShortVerb{\|} \setlength{\paperwidth}{597.50793pt} \setlength{\textwidth}{405.45183pt} \setlength{\evensidemargin}{17.83041pt} \setlength{\oddsidemargin}{29.68571pt} \setlength{\paperheight}{845.04694pt} \setlength{\textheight}{634.0pt} \setlength{\topmargin}{-34.84941pt} \setlength{\headheight}{15.0pt} \setlength{\headsep}{18.0pt} \setlength{\topskip}{10.0pt} \setlength{\footskip}{42.0pt} \setlength{\baselineskip}{12.0pt} \def\MacroFont{\ttfamily\footnotesize} \makeatletter \renewcommand\section{\@startsection {section}{1}{\z@}% {-3.5ex \@plus -1ex \@minus -.2ex}% {2.3ex \@plus.2ex}% {\normalfont\Large\bfseries\raggedright}} \renewcommand\subsection{\@startsection{subsection}{2}{\z@}% {-3.25ex\@plus -1ex \@minus -.2ex}% {1.5ex \@plus .2ex}% {\normalfont\large\bfseries\raggedright}} \renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% {-3.25ex\@plus -1ex \@minus -.2ex}% {1.5ex \@plus .2ex}% {\normalfont\normalsize\bfseries\raggedright}} \newenvironment{Declaration}% {\par\small\addvspace{1.5\baselineskip plus .5\baselineskip}% \vspace{-\baselineskip}% \noindent\hspace{-10mm}% \begin{tabular}{|l|}\hline\ignorespaces}% {\\\hline\end{tabular}\nobreak\par\nobreak \vspace{1.5\baselineskip}\vspace{-\baselineskip}% \noindent\ignorespacesafterend} \newcommand{\Macro}[1]{\mbox{\texttt{\char`\\#1}}} \newcommand{\Option}[1]{\mbox{\texttt{#1}}} \newcommand{\PName}[1]{\mbox{\texttt{#1}}} \newcommand{\PValue}[1]{\textit{#1}} \newcommand{\Parameter}[1]{\texttt{\{}\PName{#1}\texttt{\}}} \newcommand{\OParameter}[1]{\texttt{[}\PName{#1}\texttt{]}} \newcommand{\Value}[1]{\textit{#1}} \def\SpecialOptionIndex#1{\@bsphack \index{#1\actualchar{\protect\ttfamily#1} (option)\encapchar usage}% \index{options:\levelchar{\protect\ttfamily#1}\encapchar usage}\@esphack} \def\Describe@Macro#1#2{\endgroup \begin{Declaration} #2 \end{Declaration}% \SpecialUsageIndex{#1}\@esphack\ignorespaces} \def\DescribeOption{\leavevmode\@bsphack\begingroup\MakePrivateLetters\Describe@Option} \def\Describe@Option#1#2{\endgroup \begin{Declaration} #2 \end{Declaration}% \SpecialOptionIndex{#1}\@esphack\ignorespaces} \@ifundefined{KOMAScript}{% \DeclareRobustCommand{\KOMAScript}{\textsf{K\kern.05em O\kern.05em% M\kern.05em A\kern.1em-\kern.1em Script}}}{} \makeatother \begin{document} \DocInput{pdfcprot.dtx} \end{document} % % \fi % \GetFileInfo{pdfcprot.dtx} % \makeatletter % \def\macro{\begingroup % \catcode`\\12 % \MakePrivateLetters \m@cro@ 0} % \def\environment{\begingroup % \catcode`\\12 % \MakePrivateLetters \m@cro@ 1} % \def\option{\begingroup % \catcode`\\12 % \MakePrivateLetters \m@cro@ 2} % \def\Key{\begingroup % \catcode`\\12 % \MakePrivateLetters \m@cro@ 3} % \def\Counter{\begingroup % \catcode`\\12 % \MakePrivateLetters \m@cro@ 4} % \long\def\m@cro@#1#2{\endgroup \topsep\MacroTopsep \trivlist % \edef\saved@macroname{\string#2}% % \ifcase #1% % \edef\saved@@macroname{\expandafter\@gobble\saved@macroname} % \or % \edef\saved@@macroname{\expandafter\@gobble\saved@macroname} % \or % \edef\saved@@macroname{\expandafter\@gobble\saved@macroname} % \else % \let\saved@@macroname\saved@macroname % \fi % \def\makelabel##1{\llap{##1}}% % \if@inlabel % \let\@tempa\@empty \count@\macro@cnt % \loop \ifnum\count@>\z@ % \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m@ne \repeat % \edef\makelabel##1{\llap{\vtop to\baselineskip % {\@tempa\hbox{##1}\vss}}}% % \advance \macro@cnt \@ne % \else \macro@cnt\@ne \fi % \edef\@tempa{\noexpand\item[% % \ifcase #1% % \noexpand\PrintMacroName % \or % \noexpand\PrintEnvName % \or % \noexpand\PrintOptionName % \or % \noexpand\PrintKeyName % \or % \noexpand\PrintCounterName % \fi % {\string#2}]}% % \@tempa % {\advance\c@CodelineNo\@ne % \ifcase #1% % \SpecialMainIndex{#2}\nobreak % \DoNotIndex{#2}% % \or % \SpecialMainEnvIndex{#2}\nobreak % \or % \SpecialMainOptionIndex{#2}\nobreak % \or % \SpecialMainKeyIndex{#2}\nobreak % \or % \SpecialMainCounterIndex{#2}\nobreak % \fi % }% % \ignorespaces} % \let\endoption\endtrivlist % \providecommand*{\PrintOptionName}[1]{\strut \MacroFont #1\ } % \providecommand*{\PrintKeyName}[1]{\strut \MacroFont #1\ } % \providecommand*{\PrintCounterName}[1]{\strut \MacroFont #1\ } % \newcommand*{\ttbksp}{\texttt{\char`\\}} % \newcommand*{\SpecialMainOptionIndex}[1]{\@bsphack % \special@index{#1\actualchar{\string\ttfamily\space#1} % (option)\encapchar main}% % \special@index{options:\levelchar{\string\ttfamily\space#1}\encapchar % main}\@esphack} % \newcommand*{\SpecialMainKeyIndex}[1]{\@bsphack % \special@index{#1\actualchar{\string\ttfamily\space#1} % (key)\encapchar main}% % \special@index{keys:\levelchar{\string\ttfamily\space#1}\encapchar % main}\@esphack} % \newcommand*{\SpecialMainCounterIndex}[1]{\@bsphack % \special@index{#1\actualchar{\string\ttfamily\space#1} % (counter)\encapchar main}% % \special@index{counter:\levelchar{\string\ttfamily\space#1}\encapchar % main}\@esphack} % \DoNotIndex{\!, \', \(, \), \,, \-, \., \:, \;, \?, \`} % \DoNotIndex{\@ifundefined, \@onlypreamble, \@tempb, \@tempcnta, % \@tempcntb, \@tfor} % \DoNotIndex{\A, \a, \addtocounter, \advance, \and, \AtBeginDocument} % \DoNotIndex{\bfseries, \B, \b, \boolean} % \DoNotIndex{\C, \c, \char, \csname, \CurrentOption} % \DoNotIndex{\D, \d, \DeclareOption, \def, \define@key, \divide, \do} % \DoNotIndex{\E, \e, \else, \endcsname, \endinput, \equal, % \expandafter} % \DoNotIndex{\F, \f, \fi, \font, \fontdimen, \fontencoding, % \fontfamily, \fontshape, \fontseries, \footnotesize, \f@encoding, % \f@shape, \f@series, \f@family} % \DoNotIndex{\G, \g, \gdef, \global} % \DoNotIndex{\H, \h, \hbox, \Huge, \huge} % \DoNotIndex{\I, \i, \ifcase, \IfFileExists, \InputIfFileExists, % \ifnum, \ifthenelse, \ifx, \input, \itshape} % \DoNotIndex{\J, \j} % \DoNotIndex{\K, \k, \KV@errx} % \DoNotIndex{\L, \l, \LARGE, \Large, \large, \let, \loop, \lpcode} % \DoNotIndex{\M, \m, \mdseries, \MessageBreak, \multiply} % \DoNotIndex{\N, \n, \NeedsTeXFormat, \newcommand, \newcounter, % \newboolean, \newif, \normalsize} % \DoNotIndex{\O, \o, \or} % \DoNotIndex{\P, \p, \PackageError, \PackageInfo, \PackageWarning, % \pdfoutput, \pdftexrevision, \pdftexversion, \ProcessOptions, % \protect,, \protected@edef, \protected@xdef, \pdfprotrudechars, \ProvidesPackage} % \DoNotIndex{\Q, \q, \quotedblbase} % \DoNotIndex{\R, \r, \relax, \renewcommand, \repeat, \RequirePackage, % \rmfamily, \rpcode} % \DoNotIndex{\S, \s, \scriptsize, \scshape, \selectfont, \setboolean, % \setbox, \setcounter, \setkeys, \sffamily, \slshape, \small, \space, % \stepcounter, \string} % \DoNotIndex{\T, \t, \textquotedblleft, \tiny} % \DoNotIndex{\U, \u, \undefined, \upshape, \usepackage} % \DoNotIndex{\V, \v, \value} % \DoNotIndex{\W, \w, \wd} % \DoNotIndex{\X, \x, \Y, \y, \Z, \z, \z@} % \makeatother % \title{The |pdfcprot.sty| Package.\thanks{This file has version \fileversion{} dated % \filedate.}} % \author{Carsten Schurig\thanks{This package depends intensely on % code originally from H\`{a}n Th\'{\^{e}} Th\`{a}n.},Tobias Schlemmer} % \maketitle % \abstract{This package was written to provide the ``normal'' % \LaTeXe{} user an easy way to use the special character protruding % feature invented by pdf\TeX. Further this package provides an easy % interface to adjust the character protrusion for different fonts and % choosing the right adjustment automatically depending on the font.} % \tableofcontents{} % \changes{1.0}{2001/10/26}{First submit able version. The package % seems to work, but the documentation is incomplete. This version % was an internal one.} % \changes{1.1}{2001/10/30}{Some of the code was changed while writing % the documentation, because the first version had an annoyance: the % files that contain the setup of the character protruding were loaded % more than once because of the then used implementation. Now it's just loaded once, even % if the font setting is used more (because it's the fallback).} % \changes{1.7a}{2005/05/23}{Fixed a typo} % \section{Introduction} % As the abstract stated this package exists to provide a simple user % interface to the character protruding feature of % pdf\TeX\footnote{You'll find pdf\TeX{} on % |CTAN:/sytems/pdftex|.}. This is a special way to do a margin % kerning. By that it is possible to achieve a visual more ``smooth'' % margin. When not doing a margin kerning, the margins seems to be flattered a bit, especially at % hyphens and punctuation. Character Protruding is a simple but nevertheless effective % way to achieve a margin kerning. For more information % about margin kerning and especially character protruding see the % thesis of H\`{a}n Th\'{\^{e}} % Th\`{a}nh~\cite{hanthethanh:thesis}\footnote{It could be found on the % web, but I don't remember where I got it.}. % % \subsection{A bit of History} % Why did I write this package, so you can use it now? Well, it all % started with my diploma thesis. I used \LaTeXe{} on a regular basis % before that, but here I still had to increase my knowledge, esp. in % typography. So I read somewhere in a book something about margin % kerning (some book of Jan Tschichold). So I wanted to test, how % it would look like. % % But my first questions in |de.comp.text.tex| where a bit % unsuccessful. The only answers where, that it could be achieved with % \TeX{}, but that it is not without problem. As an example the % \LaTeX{}-Companion was mentioned, at least the German % edition\cite{begleiter} was put with a kind of hanging % punctuation. But in the preface Frank Mittelbach stated, that there % doesn't exist a ready to use package for \LaTeXe{} and one would have % to wait for \LaTeX3 very likely. And as you can easily see, only the % hyphens and the punctuation signs were protruded. That was the % situation of November 1994. % % But the situation seemed to be the same in 2000. I found % \emph{nothing} really usable with \LaTeXe{} to put a longer text with % (longer than some paragraphs). Then someone pointed out, % that character protruding is a feature provided by the new % pdf\TeX. At first I was a bit sceptical because I didn't want to % switch, needing the possibility to use |EPS| input (I heavily % used |psfrag|). But soon it was pointed out, that pdf\TeX{} supports % |DVI| output and that in this mode pdf\TeX{} has no limitations % compared to \LaTeX. Shortly after getting this information I found % |protcode.tex| provided by H\`{a}n Th\'{\^{e}} Th\`{a}nh. % % That I transfered to a packaged for my own use and as some people % showed interests on |de.comp.text.tex| I posted it % there.\footnote{The first version was named |optrandausgleich.sty| % and a second |pdftexfeats.sty|.} But it was never what I expected % by a package to submit it to |CTAN|. It lacked documentation and % the support of setting the character protruding depending on the % used font. % % First I wanted to write a package adjusting some of the additional % features of pdf\TeX{} (for instance the security features). But in % discussions with Heiko Oberdiek he convinced me, that it is better % to have some smaller packages instead of putting all into % one. Additionally the resulting |pdfcprot| package grew more complex % than expected at first. So the code is complex enough for me to % maintain and Heiko does a really good job with |pdfsec.sty| (he % supports more than pdf\TeX). % % \subsection{Provided Features} % This package provides a very simple interface to support a font % dependent selection of the adjustment of the character % protrusion. You can easily choose, which fonts will be protruded % depending on high level \LaTeXe{} font selection not knowing which % font actually will be used. Further on it is very simple to adjust % the character protrusion for fonts not ``supported'' directly (only % for Palatino character protrusion adjustment set (|CPA|) is provided and % that will be used for \emph{all} fonts, not having a special |CPA|). % % Further on an option to switch the pdf\TeX{} output to |DVI| and a % command testing, whether you use |PDF| output or not are % provided.\footnote{That was originally from \KOMAScript.} % % \section{Using this package.} % % First you have to invoke it with a |\usepackage{pdfcprot}| in % the preamble of your document. Of course you have to use pdf\TeX{} to % get any effect, but the package just gives a warning if you don't. % % \subsection{Requirements} % % This package need just two packages, which should be part of every % \LaTeXe{} distribution not too old: |keyval.sty| (part of the % |graphicx| bundle) and |ifthen.sty|). If they're not installed, get % them from |CTAN|. % % \subsection{Character Protruding} % % For using the character protruding two user interfaces are % implemented. If you just want to activate it for the most common % used fonts, not thinking much about internals just use the % \emph{simple} interface. % % When you don't like the preselection of the fonts being adjusted for % character protruding, you may want to use the \emph{advanced} user % interface. As the usage of many fonts for character protruding is % very memory consuming, there may be some cases you want to choose % non-ambiguous the fonts getting character protruding sparing any useless % font. % % \subsubsection{The \emph{Simple} User Interface} % % For the ``normal'' \LaTeXe{} user, who just wants to activate the % character protruding one option is provided. % \DescribeOption{activate}{\Option{activate [=none, normal]}}If you % just want to activate character % protruding for the most used fonts just say |activate| or % |activate=normal| (these two forms are synonyms). For which fonts the % character protrusion will be enabled is shown in % table~\ref{tab:activate}. % % By default character protruding won't be enabled, but if you want the % options to reflect it say |activate=none|. % % \begin{table} % \centering% % \begin{tabular}{l l l}\hline\hline % family & series & shape\\\hline % |\rmfamily| & |\mdseries| & |\upshape|\\ % & & |\itshape|\\ % & |\bfseries| & |\upshape|\\ % |\sffamily| & |\mdseries| & |\upshape|\\ % & & |\itshape| \\ % & & |\slshape| \\ % |\sffamily| & |\bfseries| & |\upshape|\\ % \hline\hline % \end{tabular}\\[2mm] % sizes for all fonts: |\footnotesize|, |\small|, % |\normalsize| and |\large| % \caption{Fonts for which character protrusion will be enabled % using the package option % \texttt{avtivate=normal}.}\label{tab:activate} % \end{table} % % \emph{Some comments:} You may wonder why character protruding is % activated for so many font types and not just for |\rmfamily||\mdseries||\upshape| % and maybe |\sffamily| |\mdseries||\upshape| using |activate| or % |activate=normal| as package option. That is done % because I don't want to bother the ``normal'' \LaTeXe-user with more % than passing the one option to the package but I still want to % catch the fonts, most likely to be used in cases ``needing'' % character protrusion (this means justified text). As this may appear % not only for the text type (but e.g. also for captions), though the % two fonts mentioned above are not sufficient. % % \subsubsection{The \emph{Advanced} User Interface} % % In some cases it may be favourable to have a bit more control over the font % selection for the character protruding. With the commands described % in this section a very fine selection is possible. % % The first command to be mentioned has a very simple syntax. It % allows the user to select a specific font encoding to be set up. It % will perform the same setup for the given fontencodings as the % |activate=normal| package option does without selection of font % encoding. As for now |pdfcprot| has no opportunity to automagically % detect the loaded font encodings, it will be necessary for setting % up character protuding in cases where more than one font encodings % are used. % % \newlength{\myT}\settowidth{\myT}{\texttt{textcomp}} % \DescribeMacro{\setupcharprotrudingforencoding}{\Macro{setupcharprotrudingforencoding}\Parameter{\emph{encodings}}}\begin{tabularx}{\linewidth}{@{}p{\myT} X@{}} % \emph{encodings} & This parameter is a comma sepapated list of font % encodings to be set up. White space is not allowed.\\ % \end{tabularx} % % \begin{description} % \item[Example 1:] The usage of % % \begin{quote} % |\usepackage[activate=none]{pdfcprot}|\\ % |\setupcharprotrudingforencoding{T1,T2A}|\\ % |\activatecharprotruding| % \end{quote} % % will set up character protruding for both |T1| and % |T2A| font encodings. This might be nessessary for example, if you % want to use both German and Russian text in one document. % \end{description} % % The second command to be mentioned has a high level syntax. For that % it's possible to choose the font by high level \LaTeXe{} font % selection commands but only \emph{one} font at a time is % selectable. To setup the character protruding for more than one % font, this command has to be called more than once. % \DescribeMacro{\setupcharprotruding}{\Macro{setupcharprotruding}\Parameter{encoding=\emph{enc},family=\emph{fm}, series=\emph{sr}, shape=\emph{sh}, size=\emph{sz}[, textcomp=\emph{tc}]}}\begin{tabularx}{\linewidth}{@{}p{\myT} X@{}} % |encoding| & This tag specifies the encodings to be used. Valid % values are all valid font encodings. If more than one font encoding % shall be set up, they have to be seperated by commas \emph enclosed % in braces. % \emph{This tag is optional. If it is not used, the command will % behave like in versions prior to v1.7}\\ % \end{tabularx} % \begin{tabularx}{\linewidth}{@{}p{\myT} X@{}} % |family| & This tag specifies the family to be used. |rmfamily| and % |sffamily| are valid values. Any other value will be supposed as a low level % font name (see below). \emph{This tag is mandatory.}\\ % \end{tabularx} % \begin{tabularx}{\linewidth}{@{}p{\myT} X@{}} % |series| & This tag is used to chose the font series. Valid values are % |mdseries| and |bfseries|. Any other value will be supposed as a low level % font name (see below). \emph{This tag is mandatory.}\\ % \end{tabularx} % \begin{tabularx}{\linewidth}{@{}p{\myT} X@{}} % |shape| & The font shape is chosen using this tag. As for the other % tags valid values are the high level \LaTeXe{} font selection % commands without trailing backslash, as are: |upshape|, |itshape|, % |slshape|, and |scshape|. Any other value will be supposed as a low level % font name (see below). \emph{This tag is mandatory.}\\ % \end{tabularx} % \begin{tabularx}{\linewidth}{@{}p{\myT} X@{}} % |size| & This tag is to select the wanted font sizes. Valid values % are also the \LaTeXe{} high level font size selection commands % without trailing backslash, that are: |Huge|, |huge|, |LARGE|, % |Large|, |large|, |normalsize|, |small|, |footnotesize|, % |scriptsize|, and |tiny|. \emph{This tag is mandatory.}\\ % \end{tabularx} % \begin{tabularx}{\linewidth}{@{}p{\myT} X@{}} % |textcomp| & This is a boolean switch for choosing whether to % activate character protruding for TS1 encoded fonts also or % not. Values are |true| (|on|, |yes|, |1|), or |false| (|off|, |no|, % |0|). \emph{This tag is optional. If this tag is not specified it % defaults to \emph{|false|}.}\\ % \end{tabularx} % % \paragraph{The low level font selection.} The ``normal'' parameters % for font selection are the high level \LaTeXe{} font selection % commands without trailing backslash. Using any option other than % that for the tags |family|, |series|, and |shape|, a low level font % selection command will be suggested. By that it is possible % to setup the character protruding for a font with a user defined font % selection command but without struggling with internal commands of % |pdfcprot.sty|. % % \newlength{\scpw}\settowidth{\scpw}{\ttfamily asetupcharprotrudinga} % \begin{description} % \item[Example 1:] The usage of % % \begin{quote} % |\usepackage[activate=none]{pdfcprot}|\\ % |\setupcharprotruding{encoding=T2A,family=rmfamily,series=elec,|\\ % \hspace*{\scpw}|shape=ui,size=normalsize,|\\ % \hspace*{\scpw}|textcomp=false}|\\ % |\activatecharprotruding| % \end{quote} % % will result in a command to setup character protruding like:\\ % |\fontencoding{T2A}\selectfont\rmfamily\fontseries{elec}\selectfont|\\ % |\fontshape{ui}\selectfont\normalsize\CPROT@setprotcodes@font| % % This means for the font |\rmfamily| with font series |elec| and font % shape |ui| character protruding for |T2A| encoding will be adjusted. % \end{description} % % \begin{description} % \item[Example 2:] Using % % \begin{quote} % |\usepackage[activate]{pdfcprot}|\\ % |\setupcharprotruding{family=rmfamily,series=bfseries,|\\ % \hspace*{\scpw}|shape=upshape,size=normalsize,|\\ % \hspace*{\scpw}|textcomp=false}|\\ % |\activatecharprotruding| % \end{quote} % % will lead to a command to setup character protruding like:\\ % |{\CPROT@setprotcodes@font}|\\ % |{\rmfamily\bfseries\upshape\normalsize\CPROT@setprotcodes@font}| % \end{description} % % A low level selection of the font size is not possible with % |\setupcharprotruding|. For setting % up the character protruding using other font size commands than the % high level \LaTeXe{} ones, the usage of internal |pdfcprot| commands % is needed. % % To setup more than two or three fonts with the command above % described would be a bit long-winded. So there's another command % provided with which it is possible to select more than one font at a % time (with some limitations). % \DescribeMacro{\setupcharprotrudingnumeral}{\Macro{setupcharprotrudingnumeral}\Parameter{encoding=\emph{enc},family=\emph{fm}, series=\emph{sr}, shape=\emph{sh}, size=\emph{sz}[, textcomp=\emph{tc}]}}The % principal meaning of the tags is the same as for % |\setupcharprotruding|, especially |encoding| and |textcomp| is exactly the % same. The only thing differing for |family|, |series|, |shape|, and % |size| is the way the font has to be chosen. % % Here a scheme is used similar to the numeral interface of |chmod| on % UNIX systems. That means every \LaTeXe{} high level font selection % command got a number assigned. More than one fonts are choose able by % adding the fitting numbers. The suitable values are % shown in table~\ref{tab:scpnum}. If one parameter is zero, the actual % command will have no effect, % % \newcommand{\nil}{\textrm{\emph{nil}}} % \begin{table}\centering % \begin{tabular}{@{}>{\ttfamily}r >{\ttfamily}l >{\ttfamily}l % >{\ttfamily}l >{\ttfamily}l@{}}\hline\hline % \textrm{value} & \textrm{family} & \textrm{series} & \textrm{shape} % & \textrm{size}\\\hline % 0 & none & none & none & none\\ % 1 & sffamily & bfseries & scshape & tiny\\ % 2 & rmfamily & mdseries & slshape & scriptsize\\ % 4 & \nil & \nil & itshape & footnotesize\\ % 8 & \nil & \nil & upshape & small \\ % 16 & \nil & \nil & \nil & normalsize \\ % 32 & \nil & \nil & \nil & large \\ % 64 & \nil & \nil & \nil & Large \\ % 128 & \nil & \nil & \nil & LARGE \\ % 256 & \nil & \nil & \nil & huge \\ % 512 & \nil & \nil & \nil & Huge % \\\hline\hline % \end{tabular} % \caption{The numbers to use with % \texttt{\string\setupcharprotrudingnumeral}.}\label{tab:scpnum} % \end{table} % % \settowidth{\scpw}{\ttfamily asetupcharprotrudingnumerala} % \begin{description} % \item[Example 1:] For |\rmfamily||\mdseries| the character % protruding is to be adjusted for |\upshape| and |\itshape| for the % sizes |\large|, |\normalsize| and |\footnotesize|. Further for the % font |\rmfamily||\bfseries||\upshape| with the same font sizes, but % in T2A encoding, % character protruding is wanted. To achieve that, one would have to call: % % \begin{quote} % |\usepackage[activate=none]{pdfcprot}|\\ % |\setupcharprotrudingnumeral{family=2,series=2,shape=12,size=52}|\\ % |\setupcharprotrudingnumeral{encoding=T2A,family=2,series=1,shape=8,size=52}|\\ % |\activatecharprotruding| % \end{quote} % % Explanation: |family| and |series| are directly readable from % table~\ref{tab:scpnum}, as is |shape| for the second call of % |\setupcharprotrudingnumeral|. To get the value of |shape| for the % first command, the values for |shape=upshape| and |shape=itshape| (8 % and 4) must be added. Similar it's for |size|, one has to add the values % for |size=footnotesize| (4), |size=normalsize| (16), and % |size=large| (32). % \end{description} % % The setup of character protruding using % |\setupcharprotrudingnumeral| is just possible for fonts accessed by % high level \LaTeXe{} font selection commands. % % \paragraph{Remarks.} Both commands to select the fonts for which % character protrusion will be adjusted are \emph{only} usable in the preamble % of the document. % % The attentive reader may have noticed another command needed to % activate the character protrusion when calling the package with the % option |activate=none|. That is due to the fact, that the % |\setupcharprotruding| commands just create a command to call at the % start of the document to adjust the amount of the character % protruding for a special font (on a character basis), but does not % activate the using of character protruding itself. % \DescribeMacro{\activatecharprotruding}{\Macro{activatecharprotruding}\OParameter{\emph{activate}}}Valid % values for \texttt{\emph{activate}} are |true| (|yes|, |on|, |1|), % false (|no|, |off|, |0|), or |compatible| (|compatibility|). Calling % |\activatecharprotruding| without any parameter means |true|. With % |true| and |false| the character protruding is switched on and off % respectively. Why the parameter |compatible|? As the character % protrusion moves some character into the margins, the word spaces on a % line may change. When using |activate=true|, |pdflatex| will take this % additional space into account and by that the line breaks may % change compared to the use of ``normal'' |latex|. If the line breaks % are wanted as got by using |latex| but with a active character % protruding, you'll have to call |\activatecharprotruding| with the % parameter |compatible|. % % The activation of the character protruding is group specific. So it % is possible to activate and deactivate the character protrusion for % some parts of a text (but not the \emph{amount} of the character % protrusion of a special font). % % The package output is very informative when looking at the |log| file, % but the output to |stdout| is normally not. To change that, there's % one option % \DescribeOption{quiet}{\Option{quiet=\emph{qt}}} Possible values for % this parameter are the booleans used in this package (|true|, |on|, % |yes|, |1|, |false|, |off|, |no|, and |0|). When saying |quiet=no| % many of the package info will be warnings instead. That is a good % method to see, which font character protrusion adjustment actually % will be used (and for which font). % % \subsection{The Character Protruding Adjustment -- Creating and % Using a New One for a Specific Font} % % \emph{This section is a bit technical and a study of the source code % may be very helpful (and is recommended).}\\ % % To understand what the purpose of this section is, a description of % the strategy of the package is needed. So what does the package do? % The command |\setupcharprotruding| and its numerical equivalent will % create a command with the fitting font selection commands and a % command |\CPROT@setprotcodes@font|. The whole command will be called at the % start of the document. Then the font selection takes place and % |\CPROT@setprotcodes@font| looks, what font was requested % actually.\footnote{The commands used to determine which font is loaded % (\texttt{\string\f@family}, \texttt{\string\f@series}, % \texttt{\string\f@shape}, \texttt{\string\f@encoding}) return the % font requested to \TeX{} \emph{not} the font actually used, so it % seems. That means for instance if you request a bold Palatino font % with \texttt{\string\bfseries}, \TeX{} will try to load \texttt{ppl/bx/n} but will only % find and use \texttt{ppl/b/n} (at least on my system). So as series the % actual font will be \texttt{b} and not \texttt{bx} which will be reported by the % use of \texttt{\string\f@series}. Though one could think it would be needed to % adjust the character protruding in a \texttt{CPA} for % \texttt{pplbn}, it will be looked for \texttt{pplbxn} instead.} Then it % looks if a command named |\f@family| |\f@series||\f@shape\f@encoding| is % defined (the concatenate values of the commands). If it is, this command will be % used to setup the character protruding, if not |pdfcrpot| will try % to load a file named |fontname.cpa| containing this command. If that % fails as well, a fallback font will be used (by default it will be % |pplmn| with the appropriate font encoding). % % To define the command to set up the character protruding, an % external file was chosen to get an easier maintenance. Defining it % in the package would enlarge the package noticeably and the package % would soon become overcrowded. % % So if a special character protruding setting for a % font is wanted, copy the file |pplmnT1.cpa| (for T1 encoding) to the % required fontname|.cpa| and change the definition of the command % accordingly. % % \begin{description} % \item[Example: ] A special character protruding setup for the bold version of Palatino in % T1 encoding is wanted. As the \LaTeXe{} command % |\bfseries| selects an bold expanded version (|bx|), the font name would be |pplbxnT1.cpa| and % the command to define |\pplbxnT1|. That means to copy |pplmnT1.cpa| % to |pplbxnT1.cpa| and change the definition of |\csname pplmnT1\endcsname| % to |\csname pplbxnT1\endcsname| and further on to adjust the wanted % |\rpcode| and |\lpcode| values. % \end{description} % % For the meaning of the commands and values in the |CPA| see the documentation of the code % below and H\`{a}n Th\'{\^{e}} Th\`{a}nh's % thesis~\cite{hanthethanh:thesis}. There he writes: % \begin{quote} % ``\dots A set of common character protruding factors gave quite reasonable % results in most cases. Non-typical type faces may require further % adjustments, which can be done easily.'' % \end{quote} % So for the most fonts the default values may be acceptable, even % though they are adjusted for Palatino. By using the |CPA| files and % defining an extra command per font it is very easy to add setups % for ``non-typical'' type faces without bothering a ``normal'' % \LaTeXe{} user of choosing the right setup because it gets % automatically selected. % % \subsection{Customising the Package} % % There's one command provided to customise the package. % \DescribeMacro{\setfallbackfont}{\Macro{setfallbackfont}\Parameter{\textit{string}}}As % described in the section before, this package will look for a % character protrusion adjustment for a \emph{fallback} font, when not % finding a |CPA| for the actual font. By default this is % |pplmn|. That is changeable using |\setfallbackfont|, if a special % |CPA| was created and suits better. The \emph{|string|} used in % |\setfallbackfont| specifies the font \emph{without} the character % encoding. That will be determined by the package. % % \subsubsection{System-wide customisation} % % For further customisation this package looks for a % \DescribeOption{pdfcprot.cfg}{\Option{pdfcprot.cfg}}somewhere % in your \TeX{} paths. If found it'll be included before any option is % validated. So you can change some settings on a system-wide % basis. This file is the best place to change some internal commands, % if needed, for instance to change which fonts will be activated for % character protruding when using the option |activate=normal| (by % redefining |\CPROT@setupcharprotruding@normal|). % % \subsection{Other Commands and Options} % % Belonging not really to character protrusion this package provides % two other commands and one additional option, that may be useful in % dealing with pdf\TeX. % % First there's is an option to get a |DVI| output using pdf\TeX. % \DescribeOption{DVIoutput}{\Option{DVIoutput}}This may be useful % if one can't switch completely to pdf\TeX, because in this mode all % the additional features of pdf\TeX\footnote{That's not completely % true though. The supported type of images is in |DVI| mode the same % as using |latex|.} (as character protruding) are % available but besides there're no compatibility problems and it % behaves the same as ``normal'' \LaTeX. So it is for instance possible to include % |EPS| (and use |psfrag|!). Principally it is not needed to supply % such an option, because by redefining |\pdfoutput| to |0| you'll get % |DVI|. The only problem is, that some packages only look if % |\pdfoutput| is defined to decide, if |PDF| output is % wanted. So % this option does an additional % |\let\pdfoutput\undefined|.\footnote{Most actual versions of packages % having had problems may treat it correctly by now. But who has all % packages installed in most recent versions?} % % Further on there are two \LaTeXe{}-commands to decide, if pdf\TeX{} % is used and if |PDF| as output is wanted. % \DescribeMacro{\ifpdftex}{\Macro{ifpdftex}\Parameter{\emph{\texttt{true}}}\Parameter{\emph{\texttt{false}}}} and % \DescribeMacro{\ifpdfoutput}{\Macro{ifpdfoutput}\Parameter{\emph{\texttt{true}}}\Parameter{\emph{\texttt{false}}}} % The latter one was originally % taken from the \KOMAScript{} package. So you can use % the same |\ifpdfoutput| command with or without \KOMAScript. The % meaning shouldn't change neither in \KOMAScript{} nor in this % package and the actual definition is not cruel for using this % command\footnote{If you want a \TeX{} \texttt{\bslash if} switch, look for \texttt{ifpdf.sty} on % CTAN written by Heiko Oberdiek.}. % % The command |\ifpdftex| is very similar but leads to a decision % depending on the usage of pdf\TeX{} or not. This is useful for the % activation of special features of pdf\TeX{} not being special to the % production of |PDF| itself (as character protruding is). % % \section{Bugs and Caveats} % % Hopefully there're no bugs left, but only features |;->|. But one % thing: right now this package contains just character protruding % settings for OT1 and T1 encoded fonts (and one character of TS1). Further there % are some (small) problems (two). % % First, the creating of the code to do the adjustment of the character % protruding at the |\begin{document}| is a bit time consuming. The % more fonts you want to use with character protruding, the longer is the % time needed. Also the needed memory by pdf\TeX{} can not be % neglected. Here it's also especially a problem when using many fonts % (in companion with character expansion it's just increasing). But % that's not a big problem, because the standard amount of memory for % pdf\TeX{} is for computer systems of today just a bit small % adjusted (65535 bytes!). Though you may want to change (or set) the % parameter |pdf_mem_size| in your |texmf.cnf|.\footnote{That is a % suggestion of myself. I don't know what the authors of pdf\TeX{} say % to that!.} % % \section{Contributing} % % Almost any contribution is welcome. Really needed is the % contribution of |CPA|'s for other encodings than T1 and OT1. But T1 % and OT1 |CPA|'s may not be perfect. The glyphs are complete for % German (I hope so) but I don't know for other languages. % % Also |CPA| for fonts not looking good with the distributed % ``default'' values would be nice, even if these fonts are not widely % used. % % Any bug hunting is welcome. Also changes to improve the performance % are likely to be included, if the performance increase is % significant and the readability of the package is not distorted too % much (a good readability was a main focus when writing this package; % that's one reason why almost on all places where possible \LaTeXe{} % commands are used.). % % If you have some changes, requests, ideas or any other things % regarding this package feel free to mail to Tobias Schlemmer: % |keinstein_junior@gmx.net|. % \changes{1.7}{2004/06/28}{New supporter} % % \section{Acknowledgements} % % All of the people are already mentioned in the text above, but I % have to emphasise some things. % % For these bundle I used many from \KOMAScript. Particularly the % boring but needed things around the package (|README.txt|, % |INSTALL.txt| and the preambles in |pdcprot.ins|) were designed % using files from \KOMAScript. In some parts I just changed % \KOMAScript{} to |pdfcprot| (were appropriate). So I owe much to % Markus Kohm (or the users of this package, because these files would % be much shorter and maybe indistinct). As already stated there's % some code taken from \KOMAScript. % % Further on some important role played Heiko Oberdiek (I don't think % he guesses so). As stated in the History I first wanted to create a % package for many (all) special pdf\TeX{} features (character % protruding, font expansion, |PDF| security options). But he % convinced me to write a package just concerning character % protruding -- luckily, because it's got to more code than I expected % first. % % And last but not least the authors of pdf\TeX{} have to be % mentioned. Some code comes directly from them. % % \nocite{*} %\begin{thebibliography}{1} %\bibitem{hanthethanh:thesis} %H\`{a}n~Th\'{\^{e}} Th\`{a}nh. %\newblock {\em Micro-typographic extensions to the {\TeX} typesetting system}. %\newblock Dissertation, Masaryk University Brno: Faculty of Informatics, % October 2000. %\bibitem{begleiter} %Michel Goosens, Frank Mittelbach, and Alexander Samarin. %\newblock {\em Der {\LaTeX}-Begleiter}. %\newblock Addison-Wesley, 1st edition, 1994. %\end{thebibliography} % \StopEventually{} % \appendix % \section{The Code Itself} % % First some remarks: the documentation may be inaccurate in some % places, so look at the code and it'll be very likely that the % documentation is incomplete. % The main attention writing this code % was turned on creating a good human readable code. So I decided to % use as much \LaTeXe{} control sequences as possible and as less % \TeX{} commands as needed. This may slow down the code, but I don't % think that's really important. % % \subsection{The Package} % % \begin{macrocode} %<*package> % \end{macrocode} % % First the requirement of \LaTeXe{}\footnote{The version needed was % taken from |ifthen.sty|, because this package does request it. But I % don't know if |pdfcprot.sty| may require some newer version because % of some construct being used. If someone finds something which % requires a newer version of \LaTeXe{} please tell me.} and the % declaration of the package. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e}[1994/12/01] \ProvidesPackage{pdfcprot}[2002/02/27 v1.5 character protruding using pdflatex (cs)] % \end{macrocode} % Then the required packages are loaded. Only |ifthen.sty| and % |keyval.sty| are needed. These should be part of any decent % \LaTeXe-distribution |;->|. % \begin{macrocode} \RequirePackage{ifthen} \RequirePackage{keyval} % \end{macrocode} % These are the counters to determine for which font character % protruding will be activate by using |\setupcharprotruding| and % |\setupcharprotrudingnumeral|. The possible values are listed in % table~\ref{tab:scpnum}. Further on |CPROT@family|, |CPROT@series|, % and |CPROT@shape| can be |-1|, which is used for the low level font % selection by |\setupcharprotruding|. The |...@temp| counters are % needed when creating |\CPROT@setprotcodes@|. % \begin{macrocode} \newcounter{CPROT@family} \newcounter{CPROT@family@temp} \newcounter{CPROT@series} \newcounter{CPROT@series@temp} \newcounter{CPROT@shape} \newcounter{CPROT@shape@temp} \newcounter{CPROT@size} \newcounter{CPROT@size@temp} % \end{macrocode} % For determining if the character protruding will be activated for the % corresponding TS1 encoded font a boolean is used. % \begin{macrocode} \newboolean{CPROT@textcomp} % \end{macrocode} % \begin{option}{quiet} % For providing the |quiet| option a (global) boolean is used. By % default it is set to |true|, so there're little warnings (but it % will be written as info to the logs). % \begin{macrocode} \newboolean{CPROT@quiet} \setboolean{CPROT@quiet}{true} % \end{macrocode} % \end{option} % A temporary counter (|\@tempcnta| could be used instead). % \begin{macrocode} \newcounter{CPROT@temp@chars} % \end{macrocode} % \begin{macro}{\CPROT@lowlevel@encoding} % \begin{macro}{\CPROT@lowlevel@family} % \begin{macro}{\CPROT@lowlevel@series} % \begin{macro}{\CPROT@lowlevel@shape} % Some ``vars'' are needed to store the low level names if some % low level font was requested using |\setupcharprotruding|. (These are % just temporary commands only used while creating the command to do % the actual adjustment of the character protrusion.) % \changes{1.7}{2004/06/28}{\texttt{\protect\string\string\CPROT@lowlevel@encoding} added} % \begin{macrocode} \newcommand*{\CPROT@lowlevel@encoding}{} \newcommand*{\CPROT@lowlevel@family}{} \newcommand*{\CPROT@lowlevel@series}{} \newcommand*{\CPROT@lowlevel@shape}{} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \begin{macro}{\CPROT@resetall} % This is to reset all the counters to zero, so that a new % |\setupcharprotruding|\dots command won't activate something % requested with a former command. % \begin{macrocode} \newcommand*{\CPROT@resetall}{% \setcounter{CPROT@family}{0}% \setcounter{CPROT@series}{0}% \setcounter{CPROT@shape}{0}% \setcounter{CPROT@size}{0}% \setboolean{CPROT@textcomp}{false}% \edef\CPROT@lowlevel@encoding{}% } % \end{macrocode} % \end{macro} % \begin{macro}{\CPROT@setprotcodes@} % \begin{macro}{\CPROT@setprotcodes@add} % \begin{macro}{\CPROT@setprotcodes@temp} % These are internal macros regarding the creation of the actual % command, to adjust the character protruding for the fonts % wanted. |\CPROT@setprotcodes@| actually will contain the command, % whereas |\CPROT@setprotcodes@temp| is used to store part of this % command temporary. |\CPROT@setprotcodes@add| is called by % |\setupcharprotruding| and |\setupcharprotrudingnumeral|. % \begin{macrocode} \newcommand*{\CPROT@setprotcodes@}{} \newcommand*{\CPROT@setprotcodes@add}{% % \end{macrocode} % The counter |CPROT@family@temp| is set, which will be used % internally to determine which fonts were requested. % \begin{macrocode} \setcounter{CPROT@family@temp}{\value{CPROT@family}}% % \end{macrocode} % Here the actual evaluation will take place starting with the font % encoding. % \changes{1.7}{2004/06/28}{starting with fontencoding} % \begin{macrocode} \CPROT@aac@encoding% } \newcommand*{\CPROT@setprotcodes@temp}{} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \begin{macro}{\CPROT@packageinfo} % \begin{macro}{\CPROT@packagewarning} % \begin{macro}{\CPROT@packageerror} % These are just substitutes for |\PackageInfo|, |\PackageWarning|, % and |\PackageError|. It's just to spare some writing (esp. \{ snf \} % are ``difficult'' to reach on a German keyboard) and it's simplier % to customise if I would want to do something other than normal. % \begin{macrocode} \newcommand{\CPROT@packageinfo}[1]{% \PackageInfo{pdfcprot}{#1}% } \newcommand{\CPROT@packagewarning}[1]{% \PackageWarning{pdfcprot}{#1}% } \newcommand{\CPROT@packageerror}[1]{% \PackageError{pdfcprot}{#1}% } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \begin{macro}{\CPROT@packageinfo@or@warning} % To support the Option |quiet| this command is used. It decides on % the boolean |CPROT@quiet| wether to give out a message as warning or % as info. % \begin{macrocode} \newcommand{\CPROT@packageinfo@or@warning}[1]{% \ifthenelse{\boolean{CPROT@quiet}}{% \CPROT@packageinfo{#1}% }{% \CPROT@packagewarning{#1}% }% }% % \end{macrocode} % \end{macro} % \begin{Key}{encoding} % \changes{1.7}{2004/06/28}{added} % \begin{macrocode} \define@key{CPROT}{encoding}{% \ifthenelse{\equal{#1}{encodingdefault}}{% \edef\CPROT@lowlevel@encoding{\encodingdefault}% \encodingdefault will be set. }{% I assume a low level encodingname is given \renewcommand*{\CPROT@lowlevel@encoding}{#1}% }% } % \end{macrocode} % \end{Key} % \begin{Key}{family} % \changes{1.2}{2001/10/31}{removed value \texttt{all}; if you want all, you % should use the numeral interface} % \begin{macrocode} \define@key{CPROT}{family}{% \ifthenelse{\equal{#1}{rmfamily}}{% \setcounter{CPROT@family}{2}% \rmfamily will be set }{% \ifthenelse{\equal{#1}{sffamily}}{% \setcounter{CPROT@family}{1}% \sffamily will be set }{% I assume a low level fontname is given \setcounter{CPROT@temp@chars}{0}% \expandafter\@tfor\expandafter\@tempb\expandafter:\expandafter=#1\do{% \stepcounter{CPROT@temp@chars}% }% \ifthenelse{\value{CPROT@temp@chars}>4}{% \CPROT@packageinfo@or@warning{None of the keywords 'all',\MessageBreak 'rmfamily' or 'sffamily' was found. I assume you gave a\MessageBreak low level font name but it is at least unusual that a\MessageBreak TeX-fontname has more than 4 characters. I assume you know\MessageBreak what you're doing and continue, but the selection of the\MessageBreak font may fail!% }% \CPROT@packageinfo{It seem's as you want to use a low level\MessageBreak command for font selection. -- You're for yourself.% }% }{}% \setcounter{CPROT@family}{-1}% \renewcommand*{\CPROT@lowlevel@family}{#1}% }% }% } % \end{macrocode} % \end{Key} % \begin{Key}{series} % \changes{1.2}{2001/10/31}{removed value \texttt{all}; if you want all, you % should use the numeral interface} % \begin{macrocode} \define@key{CPROT}{series}{% \ifthenelse{\equal{#1}{mdseries}}{% medium series \setcounter{CPROT@series}{2}% }{% \ifthenelse{\equal{#1}{bfseries}}{% bold series \setcounter{CPROT@series}{1}% }{% here the low level interface is suspected \setcounter{CPROT@temp@chars}{0}% \expandafter\@tfor\expandafter\@tempb\expandafter:\expandafter=#1\do{% \stepcounter{CPROT@temp@chars}% }% \ifthenelse{\value{CPROT@temp@chars}>4}{% \CPROT@packageinfo@or@warning{None of the keywords 'all',\MessageBreak 'mdseries' or 'bfseries' was found. I assume you gave a\MessageBreak low level font name but a series identifier should consist\MessageBreak of 4 characters at maximum. I assume you know what you're\MessageBreak doing and continue, but the selection of the font will\MessageBreak very likely fail!% }% \CPROT@packageinfo{It seem's as you seem want to use a low level\MessageBreak command for font selection. -- You're for yourself.% }% }{}% \setcounter{CPROT@series}{-1}% \renewcommand*{\CPROT@lowlevel@series}{#1}% }% }% }% % \end{macrocode} % \end{Key} % \begin{Key}{shape} % \changes{1.2}{2001/10/31}{removed value \texttt{all}; if you want all, you % should use the numeral interface} % \begin{macrocode} \define@key{CPROT}{shape}{% \ifthenelse{\equal{#1}{upshape}}{% \setcounter{CPROT@shape}{8}% }{% \ifthenelse{\equal{#1}{itshape}}{% \setcounter{CPROT@shape}{4}% }{% \ifthenelse{\equal{#1}{slshape}}{% \setcounter{CPROT@shape}{2}% }{% \ifthenelse{\equal{#1}{scshape}}{% \setcounter{CPROT@shape}{1}% }{% low lewel format \setcounter{CPROT@temp@chars}{0}% \expandafter\@tfor\expandafter\@tempb\expandafter:\expandafter=#1\do{% \stepcounter{CPROT@temp@chars}% }% \ifthenelse{\value{CPROT@temp@chars}>2}{% \CPROT@packageinfo@or@warning{None of the keywords 'all',\MessageBreak 'upshape', 'itshape', 'slshape' or 'scshape' was\MessageBreak found. I assume you gave a low level font name but it\MessageBreak is at least unusual that a shape identifier has more\MessageBreak than 2 characters. I assume you know what you're doing\MessageBreak and continue, but the selection of the font will very\MessageBreak likely fail!% }% \CPROT@packageinfo{It seem's as you seem want to use a low level\MessageBreak command for font selection. -- You're for yourself.% }% }{}% \setcounter{CPROT@shape}{-1}% \renewcommand{\CPROT@lowlevel@shape}{#1}% }% }% }% }% } % \end{macrocode} % \end{Key} % \begin{Key}{size} % \changes{1.2}{2001/10/31}{removed value \texttt{all}; if you want all, you % should use the numeral interface} % \begin{macrocode} \define@key{CPROT}{size}{% \ifthenelse{\equal{#1}{Huge}}{% \setcounter{CPROT@size}{512}% }{% \ifthenelse{\equal{#1}{huge}}{% \setcounter{CPROT@size}{256}% }{% \ifthenelse{\equal{#1}{LARGE}}{% \setcounter{CPROT@size}{128}% }{% \ifthenelse{\equal{#1}{Large}}{% \setcounter{CPROT@size}{64}% }{% \ifthenelse{\equal{#1}{large}}{% \setcounter{CPROT@size}{32}% }{% \ifthenelse{\equal{#1}{normalsize}}{% \setcounter{CPROT@size}{16}% }{% \ifthenelse{\equal{#1}{small}}{% \setcounter{CPROT@size}{8}% }{% \ifthenelse{\equal{#1}{footnotesize}}{% \setcounter{CPROT@size}{4}% }{% \ifthenelse{\equal{#1}{scriptsize}}{% \setcounter{CPROT@size}{2}% }{% \ifthenelse{\equal{#1}{tiny}}{% \setcounter{CPROT@size}{1}% }{% low lewel format \CPROT@packageerror{% None of the keywords 'all', 'normal' or any LaTeX2e\MessageBreak font name was found. \MessageBreak \space For more information how to use\MessageBreak \string\setupcharprotrudingnumeral see the pdfcprot manual.% }% }{}% }% }% }% }% }% }% }% }% }% } % \end{macrocode} % \end{Key} % \begin{macrocode} \define@key{CPROT}{textcomp}{% \ifthenelse{\equal{#1}{true}\or\equal{#1}{on}\or\equal{#1}{1}\or\equal{#1}{yes}}{% \setboolean{CPROT@textcomp}{true}% }{% \ifthenelse{\equal{#1}{false}\or\equal{#1}{off}\or\equal{#1}{0}\or\equal{#1}{no}}{% \setboolean{CPROT@textcomp}{false}% }{% \CPROT@packageerror{% ``#1'' is no setting for ``textcomp''. Use\MessageBreak one of 'true', 'on', 'yes', '1', or 'false', 'off', \MessageBreak 'no', '0' instead.\MessageBreak }% }% }% } \define@key{CPROTnum}{encoding}{% \ifthenelse{\equal{#1}{0}}{% \renewcommand*{\CPROT@lowlevel@encoding}{}% No encoding will be set. }{% \ifthenelse{\equal{#1}{1}}{% \edef\CPROT@lowlevel@encoding{\encodingdefault}% \encodingdefault will be set. }{% \ifthenelse{\equal{#1}{encodingdefault}}{% \edef\CPROT@lowlevel@encoding{\encodingdefault}% \encodingdefault will be set. }{% I assume a low level encodingname is given \renewcommand*{\CPROT@lowlevel@encoding}{#1}% }% }% }% } \define@key{CPROTnum}{family}{% \ifthenelse{#1>0 \and #1<4}{% \setcounter{CPROT@family}{#1}% }{% \ifthenelse{#1=0}{% \CPROT@packageinfo{% As you selected '0' (that means 'none') for\MessageBreak selection of the font family, no font will\MessageBreak be set up for char protruding.% }% }{% \CPROT@packageerror{% Your given value '#1' to family in \string\setupcharprotrudingnumeral\MessageBreak is not valid. Sensible values are between 1 and 3 (inclusive).\MessageBreak For further information see the pdfcprot manual.% }% }% }% } \define@key{CPROTnum}{series}{% \ifthenelse{#1>0 \and #1<4}{% \setcounter{CPROT@series}{#1}% }{% \ifthenelse{#1=0}{% \CPROT@packageinfo{% As you selected '0' (that means 'none') for\MessageBreak selection of the font series, no font will\MessageBreak be set up for char protruding.% }% }{% \CPROT@packageerror{% Your given value '#1' to series in \string\setupcharprotrudingnumeral\MessageBreak is not valid. Sensible values are between 1 and 15 (inclusive).\MessageBreak For further information see the pdfcprot manual.% }% }% }% } \define@key{CPROTnum}{shape}{% \ifthenelse{#1>0 \and #1<16}{% \setcounter{CPROT@shape}{#1}% }{% \ifthenelse{#1=0}{% \CPROT@packageinfo{% As you selected '0' (that means 'none') for\MessageBreak selection of the font shape, no font will\MessageBreak be set up for char protruding.% }% }{% \CPROT@packageerror{% Your given value '#1' to shape in \string\setupcharprotrudingnumeral\MessageBreak is not valid. Sensible values are between 1 and 15 (inclusive).\MessageBreak For further information see the pdfcprot manual.% }% }% }% } \define@key{CPROTnum}{size}{% \ifthenelse{#1>0 \and #1<1024}{% \setcounter{CPROT@size}{#1}% }{% \ifthenelse{#1=0}{% \CPROT@packageinfo{% As you selected '0' (that means 'none') for\MessageBreak selection of the font size, no font will\MessageBreak be set up for char protruding.% }% }{% \CPROT@packageerror{% Your given value '#1' to size in \string\setupcharprotrudingnumeral\MessageBreak is not valid. Sensible values are between 1 and 1023 (inclusive).\MessageBreak For further information see the pdfcprot manual.% }% }% }% } \define@key{CPROTnum}{textcomp}[true]{% \setkeys{CPROT}{textcomp=#1}% } % \end{macrocode} % \begin{option}{activate} % \changes{1.3}{2001/11/01}{option \texttt{texttype} added} % \changes{1.5}{2002/02/27}{option \texttt{texttype} removed; didn't % work and is IMHO not needed -- use the numerical interface if % you don't want to activate char protruding for TS1 characters (and % load the package \texttt{textcomp})} % \changes{1.6}{2002/08/14}{removed last references to old option % \texttt{texttype} in the documentation} % \begin{macrocode} \define@key{CPROTpackage}{activate}[normal]{% \ifthenelse{\equal{#1}{normal}}{% \CPROT@setupcharprotruding@normal% \ifthenelse{\equal{\CPROT@setprotcodes@}{}}{% }{% just activate char prot when something was set \activatecharprotruding[true]% }% }{% \ifthenelse{\equal{#1}{none}}{% }{% \CPROT@packageerror{% Value of activate can be 'normal' or 'none'.\MessageBreak% \space For more low level setup use \string\setupcharprotruding\MessageBreak% and see the manual% }% }% }% }% % \end{macrocode} % \end{option} % \begin{macrocode} \define@key{CPROTpackage}{quiet}[true]{% \ifthenelse{\equal{#1}{true}\or\equal{#1}{on}\or\equal{#1}{yes}\or\equal{#1}{1}}{% \setboolean{CPROT@quiet}{true}% }{% \ifthenelse{\equal{#1}{false}\or\equal{#1}{off}\or\equal{#1}{no}\or\equal{#1}{0}}{% \setboolean{CPROT@quiet}{false}% }{% \CPROT@packageerror{% Value of quiet should be 'true' ('on', 'yes, '1') or\MessageBreak% 'false' ('off', 'no', '0'). You didn't seem to use any\MessageBreak% of them.% }% }% }% }% % \end{macrocode} % These are internal fuctions to evaluate the counters used to % indicate which font variation are to get protruding. % \changes{1.7}{2004/06/28}{added encoding} % \begin{macrocode} \newcommand{\CPROT@aac@encoding}{% \ifthenelse{\equal{\CPROT@lowlevel@encoding}{}}{% \setcounter{CPROT@family@temp}{\value{CPROT@family}}% \CPROT@aac@family{}% }{% \@for \CPROT@aac@encoding@first:=\CPROT@lowlevel@encoding \do {% \setcounter{CPROT@family@temp}{\value{CPROT@family}}% \expandafter\ifx\csname T@\CPROT@aac@encoding@first\endcsname\relax% \ifthenelse{\boolean{CPROT@quiet}}{% \CPROT@packagewarning{Encoding \CPROT@aac@encoding@first not defined\MessageBreak (see log file for more information)} }{}% \CPROT@packageinfo@or@warning{% You've requested char protruding for \CPROT@aac@encoding@first encoding\MessageBreak but \CPROT@aac@encoding@first encoding doesn't seem to be loaded.\MessageBreak Maybe you forgot a '\string\usepackage[\CPROT@aac@encoding@first]{fontenc}'.% }% \else \CPROT@aac@family{\protect\fontencoding{\CPROT@aac@encoding@first}\selectfont}% \fi }% }% } % \changes{1.5}{2002/02/27}{added a some more protection for each font % selection command (new \KOMAScript{} adds something to % some of the font size selection commands)} % \changes{1.7}{2004/06/28}{added parameter for using with encodings} % \begin{macrocode} \newcommand{\CPROT@aac@family}[1]{% \ifthenelse{\value{CPROT@family@temp}>1}{% \protected@edef\CPROT@setprotcodes@temp{#1\protect\rmfamily}% \setcounter{CPROT@series@temp}{\value{CPROT@series}}% \CPROT@aac@series{\CPROT@setprotcodes@temp}% \addtocounter{CPROT@family@temp}{-2}% \CPROT@aac@family{#1}% }{% \ifthenelse{\value{CPROT@family@temp}>0}{% \protected@edef\CPROT@setprotcodes@temp{#1\protect\sffamily}% \setcounter{CPROT@series@temp}{\value{CPROT@series}}% \CPROT@aac@series{\CPROT@setprotcodes@temp}% \addtocounter{CPROT@family@temp}{-1}% \CPROT@aac@family{#1}% }{% \ifthenelse{\value{CPROT@family@temp}<0}{% \protected@edef\CPROT@setprotcodes@temp{#1\fontfamily{\CPROT@lowlevel@family}\selectfont}% \setcounter{CPROT@series@temp}{\value{CPROT@series}}% \CPROT@aac@series{\CPROT@setprotcodes@temp}% }{}% }% }% } \newcommand{\CPROT@aac@series}[1]{% \ifthenelse{\value{CPROT@series@temp}>1}{% \protected@edef\CPROT@setprotcodes@temp{#1\protect\mdseries}% \setcounter{CPROT@shape@temp}{\value{CPROT@shape}}% \CPROT@aac@shape{\CPROT@setprotcodes@temp}% \addtocounter{CPROT@series@temp}{-2}% \CPROT@aac@series{#1}% }{% \ifthenelse{\value{CPROT@series@temp}>0}{% \protected@edef\CPROT@setprotcodes@temp{#1\protect\bfseries}% \setcounter{CPROT@shape@temp}{\value{CPROT@shape}}% \CPROT@aac@shape{\CPROT@setprotcodes@temp}% \addtocounter{CPROT@series@temp}{-1}% \CPROT@aac@series{#1}% }{% \ifthenelse{\value{CPROT@series@temp}<0}{% \protected@edef\CPROT@setprotcodes@temp{% #1\fontseries\expandafter{\CPROT@lowlevel@series}\selectfont}% \setcounter{CPROT@shape@temp}{\value{CPROT@shape}}% \CPROT@aac@shape{\CPROT@setprotcodes@temp}% }{}% }% }% } \newcommand{\CPROT@aac@shape}[1]{% \ifthenelse{\value{CPROT@shape@temp}>7}{% \protected@edef\CPROT@setprotcodes@temp{#1\protect\upshape}% \setcounter{CPROT@size@temp}{\value{CPROT@size}}% \CPROT@aac@size{\CPROT@setprotcodes@temp}% \addtocounter{CPROT@shape@temp}{-8}% \CPROT@aac@shape{#1}% }{% \ifthenelse{\value{CPROT@shape@temp}>3}{% \protected@edef\CPROT@setprotcodes@temp{#1\protect\itshape}% \setcounter{CPROT@size@temp}{\value{CPROT@size}}% \CPROT@aac@size{\CPROT@setprotcodes@temp}% \addtocounter{CPROT@shape@temp}{-4}% \CPROT@aac@shape{#1}% }{% \ifthenelse{\value{CPROT@shape@temp}>1}{% \protected@edef\CPROT@setprotcodes@temp{#1\protect\slshape}% \setcounter{CPROT@size@temp}{\value{CPROT@size}}% \CPROT@aac@size{\CPROT@setprotcodes@temp}% \addtocounter{CPROT@shape@temp}{-2}% \CPROT@aac@shape{#1}% }{% \ifthenelse{\value{CPROT@shape@temp}>0}{% \protected@edef\CPROT@setprotcodes@temp{#1\protect\scshape}% \setcounter{CPROT@size@temp}{\value{CPROT@size}}% \CPROT@aac@size{\CPROT@setprotcodes@temp}% \addtocounter{CPROT@shape@temp}{-1}% \CPROT@aac@shape{#1}% }{% \ifthenelse{\value{CPROT@shape@temp}<0}{% \protected@edef\CPROT@setprotcodes@temp{% #1\fontshape\expandafter{\CPROT@lowlevel@shape}\selectfont}% \setcounter{CPROT@size@temp}{\value{CPROT@size}}% \CPROT@aac@size{\CPROT@setprotcodes@temp}% }{}% }% }% }% }% } \newcommand{\CPROT@aac@size}[1]{% \ifthenelse{\value{CPROT@size@temp}>511}{% \protected@edef\CPROT@setprotcodes@temp{#1\protect\Huge}% \CPROT@aac@textcomp{\CPROT@setprotcodes@temp}% \addtocounter{CPROT@size@temp}{-512}% \CPROT@aac@size{#1}% }{% \ifthenelse{\value{CPROT@size@temp}>255}{% \protected@edef\CPROT@setprotcodes@temp{#1\protect\huge}% \CPROT@aac@textcomp{\CPROT@setprotcodes@temp}% \addtocounter{CPROT@size@temp}{-256}% \CPROT@aac@size{#1}% }{% \ifthenelse{\value{CPROT@size@temp}>127}{% \protected@edef\CPROT@setprotcodes@temp{#1\protect\LARGE}% \CPROT@aac@textcomp{\CPROT@setprotcodes@temp}% \addtocounter{CPROT@size@temp}{-128}% \CPROT@aac@size{#1}% }{% \ifthenelse{\value{CPROT@size@temp}>63}{% \protected@edef\CPROT@setprotcodes@temp{#1\protect\Large}% \CPROT@aac@textcomp{\CPROT@setprotcodes@temp}% \addtocounter{CPROT@size@temp}{-64}% \CPROT@aac@size{#1}% }{% \ifthenelse{\value{CPROT@size@temp}>31}{% \protected@edef\CPROT@setprotcodes@temp{#1\protect\large}% \CPROT@aac@textcomp{\CPROT@setprotcodes@temp}% \addtocounter{CPROT@size@temp}{-32}% \CPROT@aac@size{#1}% }{% \ifthenelse{\value{CPROT@size@temp}>15}{% \protected@edef\CPROT@setprotcodes@temp{#1\protect\normalsize}% \CPROT@aac@textcomp{\CPROT@setprotcodes@temp}% \addtocounter{CPROT@size@temp}{-16}% \CPROT@aac@size{#1}% }{% \ifthenelse{\value{CPROT@size@temp}>7}{% \protected@edef\CPROT@setprotcodes@temp{#1\protect\small}% \CPROT@aac@textcomp{\CPROT@setprotcodes@temp}% \addtocounter{CPROT@size@temp}{-8}% \CPROT@aac@size{#1}% }{% \ifthenelse{\value{CPROT@size@temp}>3}{% \protected@edef\CPROT@setprotcodes@temp{#1\protect\footnotesize}% \CPROT@aac@textcomp{\CPROT@setprotcodes@temp}% \addtocounter{CPROT@size@temp}{-4}% \CPROT@aac@size{#1}% }{% \ifthenelse{\value{CPROT@size@temp}>1}{% \protected@edef\CPROT@setprotcodes@temp{#1\protect\scriptsize}% \CPROT@aac@textcomp{\CPROT@setprotcodes@temp}% \addtocounter{CPROT@size@temp}{-2}% \CPROT@aac@size{#1}% }{% \ifthenelse{\value{CPROT@size@temp}>0}{% \protected@edef\CPROT@setprotcodes@temp{#1\protect\protect\tiny}% \CPROT@aac@textcomp{\CPROT@setprotcodes@temp}% }{}% }% }% }% }% }% }% }% }% }% } \newcommand{\CPROT@aac@textcomp}[1]{% \ifthenelse{\boolean{CPROT@textcomp}}{% \@ifundefined{T@TS1}{% \CPROT@packageinfo@or@warning{% You've requested char protruding for TS1 encoding\MessageBreak but TS1 encoding doesn't seem to be loaded.\MessageBreak Maybe you forgot a '\string\usepackage{textcomp}'.% }% \setboolean{CPROT@textcomp}{false}% }{}% }{}% \ifthenelse{\boolean{CPROT@textcomp}}{% \protected@xdef\CPROT@setprotcodes@{% \CPROT@setprotcodes@{% #1\protect\CPROT@setprotcodes@font{% \fontencoding{TS1}\selectfont\protect\CPROT@setprotcodes@font% }% }% }% }{% \protected@xdef\CPROT@setprotcodes@{% \CPROT@setprotcodes@{% #1\protect\CPROT@setprotcodes@font% }% }% }% } % \end{macrocode} % \changes{1.6}{2002/08/14}{\texttt{pdfcprot} will not activate the % character protruding only iff a \texttt{pdftex} version larger 0.14f % is detected; \emph{nobody} should use older versions for documents % using character protruding, even 0.14f is % \emph{really} old right now} % \begin{macro}{\activatecharprotruding} % \begin{macrocode} \newcommand*{\activatecharprotruding}[1][true]{% \ifpdftex{% \ifthenelse{\equal{#1}{true}\or\equal{#1}{on}\or\equal{#1}{1}\or\equal{#1}{yes}}{% \CPROT@good@pdftex@version{% \global\pdfprotrudechars=2% } }{% \ifthenelse{\equal{#1}{compatibility}\or\equal{#1}{compatible}}{% \CPROT@good@pdftex@version{% \global\pdfprotrudechars=1% }% }{% \ifthenelse{\equal{#1}{false}\or\equal{#1}{off}\or\equal{#1}{0}\or\equal{#1}{no}}{% \global\pdfprotrudechars=0% }{% \CPROT@packageerror{% ``#1'' is no setting for \activatecharprotruding. Use\MessageBreak one of 'true', 'on', 'yes', '1', or 'false', 'off', \MessageBreak 'no', '0', or 'compatible', 'compatibility' instead.% }% }{% \CPROT@packageinfo@or@warning{% You want to activate char protruding, but it does\MessageBreak look as your are NOT using pdftex. So I can't\MessageBreak activate it, as ``pdfcprot.sty'' only supports\MessageBreak pdftex.}% }% }% }% }{}% } % \end{macrocode} % \end{macro} % \begin{macro}{\setupcharprotruding} % \begin{macrocode} \newcommand*{\setupcharprotruding}[1]{% \ifpdftex{% \CPROT@resetall{}% \@ifundefined{CPROT@save@KV@errx}{% \let\CPROT@save@KV@errx=\KV@errx% \renewcommand*{\KV@errx}[1]{% \CPROT@packageerror{option ##1 for \string\setupcharprotruding}{% You've tried to use the option ##1 with \string\setupcharprotruding.\MessageBreak But there is no option with that name.\MessageBreak See the manual of ``pdfcprot.sty'' for information about the usage of \string\setupcharprotruding.% }% }% \setkeys{CPROT}{#1}% \let\KV@errx=\CPROT@save@KV@errx% \let\CPROT@save@KV@errx=\relax% }{% \setkeys{CPROT}{#1}% }% \CPROT@setprotcodes@add{}% }{% \CPROT@packageinfo@or@warning{% You want to setup char protruding, but it does\MessageBreak look as if you're NOT using pdftex. So I can't\MessageBreak setup it, as ``pdfcprot.sty'' only supports\MessageBreak pdftex.}% }% } \@onlypreamble\setupcharprotruding% % \end{macrocode} % \end{macro} % \begin{macro}{\setupcharprotrudingnumeral} % \begin{macrocode} \newcommand*{\setupcharprotrudingnumeral}[1]{% \ifpdftex{% \CPROT@resetall{}% \@ifundefined{CPROT@save@KV@errx}{% \let\CPROT@save@KV@errx=\KV@errx% \renewcommand*{\KV@errx}[1]{% \CPROT@packageerror{option ##1 for \string\setupcharprotrudingnumeral}{% You've tried to use the option ##1 with \string\setupcharprotrudingnumeral.\MessageBreak But there is no option with that name.\MessageBreak See the manual of ``pdfcprot.sty'' for information about the usage of \string\setupcharprotrudingnumeral.% }% }% \setkeys{CPROTnum}{#1}% \let\KV@errx=\CPROT@save@KV@errx% \let\CPROT@save@KV@errx=\relax% }{% \setkeys{CPROTnum}{#1}% }% \CPROT@setprotcodes@add{}% }{% \CPROT@packageinfo@or@warning{% You want to setup char protruding, but it does\MessageBreak look as if you're NOT using pdftex. So I can't\MessageBreak setup it, as ``pdfcprot.sty'' only supports\MessageBreak pdftex.}% }% } \@onlypreamble\setupcharprotrudingnumeral % \end{macrocode} % \end{macro} % \begin{macro}{\ifpdftex} % \changes{1.7}{2004/08/13}{changed to new definition proposed by % Heiko Oberdiek} % \begin{macrocode} \newcommand{\ifpdftex}{% \ifx\pdftexversion\@undefined \expandafter\@secondoftwo \else \ifx\pdftexversion\relax \expandafter\expandafter\expandafter\@secondoftwo \else \expandafter\expandafter\expandafter\@firstoftwo \fi \fi } % \end{macrocode} % \end{macro} % \begin{macro}{\CPROT@good@pdftex@version} % \changes{1.6}{2002/08/14}{added a macro to do something iff a % ``good'' version of \texttt{pdftex} is used} % \begin{macrocode} \newcommand{\CPROT@packageerror@bad@pdftex}{% \CPROT@packageerror{You used a pdftex version older than 0.14f.\MessageBreak pdfcprot does not support such old versions of pdftex. \MessageBreak Please install a new version of pdftex.}% } \newcommand{\CPROT@good@pdftex@version}[1]{% \ifnum\pdftexversion < 14 \CPROT@packageerror@bad@pdftex % \else \ifnum\pdftexversion = 14 \ifnum \expandafter`\pdftexrevision < `f \CPROT@packageerror@bad@pdftex % \else #1 \fi \else #1 \fi \fi } % \end{macrocode} % \end{macro} % \begin{macro}{\ifpdfoutput} % \changes{1.4a}{2001/11/13}{changed to new definition in % \KOMAScript{} version 2.8q (2001/11/13)} % This was taken from KOMA-Script and is provided for convenience. % \changes{1.7}{2004/08/13}{changed to new definition proposed by % Heiko Oberdiek} % \begin{macrocode} \newcommand*{\CPROT@ifpdfoutput}{% \ifcase 0% \ifx\pdfoutput\@undefined 1% \else \ifx\pdfoutput\relax 1% \else \ifcase\pdfoutput 1% \fi \fi \fi \space \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi } \@ifundefined{ifpdfoutput}{\let\ifpdfoutput\CPROT@ifpdfoutput}{% \CPROT@packageinfo{% \string\ifpdfoutput\space already defined.\MessageBreak That may happen when using KOMA-Script together\MessageBreak with ``pdfcprot.sty''. I have changed the definition\MessageBreak from Markus' KOMA-Script, so if you experience errors\MessageBreak try \string\let\string\ifpdfoutput\string\relax\space before loading ``pdfcprot.sty''.}% } % \end{macrocode} % \end{macro} % \begin{macrocode} \newcommand*{\CPROT@packageoptions}[1]{% \@ifundefined{CPROT@save@KV@errx}{% \let\CPROT@save@KV@errx=\KV@errx% \renewcommand*{\KV@errx}[1]{% \PackageError{pdfcprot}{unknown option ``#1''}{% You've tried to use the option ``#1''.\MessageBreak But there is no option with that name.\MessageBreak See the manual of ``pdfcprot.sty'' for information about known options.% }% }% \setkeys{CPROTpackage}{#1}% \let\KV@errx=\CPROT@save@KV@errx% \let\CPROT@save@KV@errx=\relax% }{% \setkeys{CPROTpackage}{#1}% }% } % \end{macrocode} % \begin{macrocode} \DeclareOption{DVIoutput}{% \CPROT@packagewarning{% It is not a good idea to use the DVIoutput package option.\MessageBreak Use it only if you experience some using other packages.\MessageBreak And don't forget to file a bug report against these packages.\MessageBreak The best is to add just \string\pdfoutput=0\space at the beginning\MessageBreak of your preamble or even before \string\documentclass. } \ifpdftex{% \pdfoutput=0% \let\pdfoutput\undefined }{}% } % \end{macrocode} % Define a standard command for undefined options. Actually this is % just a redirection to a |\setkeys| command. % \changes{1.5}{2002/02/27}{Just execute the options if \texttt{pdftex} is % really used} % \begin{macrocode} \DeclareOption*{% \ifpdftex{% \expandafter\CPROT@packageoptions\expandafter{\CurrentOption}% }{}% }% % \end{macrocode} % \begin{macro}{\CPROI@fallbackfont} % \begin{macro}{\setfallbackfont} % \changes{1.5}{2001/11/16}{changed place of definition; now the % ``configuration'' commands are all together} % The internal command |\CPROT@fallbackfont| stores the font to be % looked for, if no |CPA| is found for the actual font. By default % it's Palatino. With |\setfallbackfont| it is possible to customise % this, if required. % \begin{macrocode} \newcommand*{\CPROT@fallbackfont}{pplmn} \newcommand*{\setfallbackfont}[1]{\renewcommand*{\CPROT@fallbackfont}{#1}} % \end{macrocode} % \end{macro} % \end{macro} % \begin{macro}{\CPROT@setupcharprotruding@normal} % \changes{1.5}{2001/11/16}{changed place of definition; now the % ``configuration'' commands are all together} % When the package is loaded with option |activate| or % |activate=normal| this command does the actual adjustment and by % that defines which fonts will get character protruding with that options. % \begin{macrocode} \newcommand*{\CPROT@setupcharprotruding@normal}{% \setupcharprotrudingnumeral{family=3,series=1,shape=8,size=60,textcomp=1}% \setupcharprotrudingnumeral{family=2,series=2,shape=12,size=60,textcomp=1}% \setupcharprotrudingnumeral{family=1,series=2,shape=14,size=60,textcomp=1}% } % \end{macrocode} % \end{macro} % \begin{macro}{\setupcharprotrudingforencoding} % \changes{1.7}{2004/06/28}{added} % This command % \begin{macrocode} \newcommand*{\setupcharprotrudingforencoding}[1]{% \setupcharprotrudingnumeral{encoding={#1},family=3,series=1,shape=8,size=60,textcomp=1}% \setupcharprotrudingnumeral{encoding={#1},family=2,series=2,shape=12,size=60,textcomp=1}% \setupcharprotrudingnumeral{encoding={#1},family=1,series=2,shape=14,size=60,textcomp=1}% } \@onlypreamble\setupcharprotrudingforencoding % \end{macrocode} % \end{macro} % \begin{option}{pdfcprot.cfg} % \changes{1.4}{2001/11/07}{added loading of pdfcprot.cfg.} % \begin{macrocode} \InputIfFileExists{pdfcprot.cfg} {\typeout{***************************************^^J% * Local config file pdfcrpot.cfg used *^^J% ***************************************}} {} % \end{macrocode} % \end{option} % \begin{macrocode} \ProcessOptions\relax \newcommand*{\CPROT@actualfont}{% \f@family% \f@series% \f@shape% \f@encoding% } \@onlypreamble\setfallbackfont% \newcommand*{\CPROT@cpa@toload}{} % \end{macrocode} % \begin{macro}{\CPROT@setprotcodes@font} % This command you've seen before in the definition of % |\CPROT@setprotcodes@|. There it was protected so it won't be expanded % to early. That was important, to test for the correct font. % \begin{macrocode} \newcommand*{\CPROT@setprotcodes@font}{% \renewcommand*{\CPROT@cpa@toload}{\CPROT@actualfont.cpa}% \IfFileExists{\CPROT@cpa@toload}{% % \end{macrocode} % \changes{1.1}{2001/10/30}{Former version used a general command % beeing redefined any time directly from the \texttt{CPA}. Now the \texttt{CPA} % defines a new command we can test for, so it will be loaded just % once.} % Former version used a general command % beeing redefined any time directly from the |CPA|. Now the |CPA| % defines a new command we can test for, so it will be loaded just % once. The same code is found in the part for the fallback % font. Using this code some time will be spared (I hope). % \begin{macrocode} \expandafter\@ifundefined\expandafter{\CPROT@actualfont}{% \input{\CPROT@cpa@toload} }{} % \end{macrocode} % As the fontencoding names contain numbers |\csname| and |\endcsname| % must be used to call the actual command to setup character % protruding. After that a adjustment may be needed. % \begin{macrocode} \csname\CPROT@actualfont\endcsname% \CPROT@adjustprotcodes{\font}% \CPROT@packageinfo{% File \CPROT@cpa@toload{} for the adjustment of\MessageBreak the char protruding used. It seems to be _fit_\MessageBreak to the font you requested.% }% }{% \CPROT@packageinfo@or@warning{% I didn't find \CPROT@cpa@toload.\MessageBreak% \space As a fallback I will try \CPROT@fallbackfont\f@encoding.cpa.% }% \renewcommand*{\CPROT@cpa@toload}{\CPROT@fallbackfont\f@encoding.cpa}% \IfFileExists{\CPROT@cpa@toload}{% \expandafter\@ifundefined\expandafter{\CPROT@fallbackfont\f@encoding}{% \input{\CPROT@cpa@toload}% }{}% \csname\CPROT@fallbackfont\f@encoding\endcsname% \CPROT@adjustprotcodes{\font}% \CPROT@packageinfo{% File \CPROT@cpa@toload{} used for the adjustment\MessageBreak of the char protruding. It seems that it isn't the one\MessageBreak you intended to use.% }% }{% \CPROT@packageinfo@or@warning{% Even the fallback font was not found. Maybe it's\MessageBreak not the right font encoding. Currently ``pdfcprot''\MessageBreak bundles only with cpa's for T1, OT1 and TS1 encoding.% }% }% }% } % \end{macrocode} % \end{macro} % \begin{macrocode} \newif\ifCPROT@adjustprotcodes@ \newcommand*{\CPROT@adjustprotcodes}[1]{% \CPROT@adjustprotcodes@false \ifnum\pdftexversion > 14 \CPROT@adjustprotcodes@true \else \ifnum\pdftexversion = 14 \ifnum \expandafter`\pdftexrevision > `g \CPROT@adjustprotcodes@true \fi \fi \fi \ifCPROT@adjustprotcodes@ \@tempcnta=0 \loop \ifcase\lpcode#1\@tempcnta\else \CPROT@adjustprotcodes@@\lpcode{#1}\@tempcnta \fi \ifcase\rpcode#1\@tempcnta\else \CPROT@adjustprotcodes@@\rpcode{#1}\@tempcnta \fi \advance\@tempcnta 1 \ifnum\@tempcnta < 256 \repeat \fi } \def\CPROT@adjustprotcodes@@#1#2#3{% \setbox0=\hbox{\the#2\char#3}% % \setbox0=\hbox{% % \ifx#2\font\else#2\fi% % \char#3}% \@tempcntb=\wd0% \multiply\@tempcntb #1#2#3% \divide\@tempcntb \fontdimen6 #2% #1#2#3=\@tempcntb% } \newcommand*{\CPROT@setprotcodes}{% \ifpdftex{% \ifthenelse{\equal{\CPROT@setprotcodes@}{}}{% }{% \CPROT@setprotcodes@% }% }{}% } \AtBeginDocument{% \CPROT@setprotcodes\relax% } % % \end{macrocode} % \subsection{The Provided \texttt{.CPA} Files} % \subsubsection{Palatino} % \begin{macro}{\pplmnT1} % \begin{macro}{\pplmnOT1} % \changes{1.1}{2001/30/10}{\texttt{\protect\string\string\pplmnT1} was added. Before a general % setup code has been used and defined anytime new loading the % \texttt{CPA}. In the \texttt{CPA}'s were only the % \texttt{\protect\string\string\rpcode} and % \texttt{\protect\string\string\lpcode} commands stated.} % \changes{1.7}{2004/06/28}{Collapsed all encodings for \texttt{ppl}} % \changes{1.7}{2004/06/28}{added \texttt{pplmnT2A} and % \texttt{pplmnOT2} definition files % for T2A and OT2 encoding} % \begin{macrocode} %\expandafter\gdef\csname pplmnT1\endcsname{% %\expandafter\gdef\csname pplmnOT1\endcsname{% %\expandafter\gdef\csname pplmnT2A\endcsname{% %\expandafter\gdef\csname pplmnOT2\endcsname{% %<*pplmnOT1|pplmnOT2> \lpcode\font 92=500 % `` \rpcode\font 34=500 % '' \rpcode\font 123=300 % -- \rpcode\font 124=200 % --- % %<*pplmnT1|pplmnT2A> \lpcode\font 16=500 % `` \rpcode\font 17=500 % '' \rpcode\font 21=300 % -- \rpcode\font 22=200 % --- % %<*pplmnT2A|pplmnOT2> \rpcode\font\cyrdash=200 % "--- \lpcode\font\cyrdash=200 % "--* % %<*pplmnT1|pplmnT2A> % german quotation marks \lpcode\font\quotedblbase=600 \rpcode\font\textquotedblleft=500 % %<*pplmnOT1|pplmnT1|pplmnT2A|pplmnOT2> % set the protrusion of ",","-" and "." a bit smaller % than originally suggested by Han The Than \rpcode\font`\,=650 \rpcode\font`\-=650 \rpcode\font`\.=650 % originial Setting from Han The Thans protcode.tex \rpcode\font`\!=200 \rpcode\font`\;=500 \rpcode\font`\:=500 \rpcode\font`\?=200 \lpcode\font`\`=700 \rpcode\font`\'=700 \rpcode\font`\)=50 %<*!pplmnOT2> \rpcode\font`\A=\rpcode\font`\A % \rpcode\font 196=50 % A umlaut \rpcode\font`\F=50 \rpcode\font`\K=50 \rpcode\font`\L=50 \rpcode\font`\T=50 \rpcode\font`\V=50 \rpcode\font`\W=50 \rpcode\font`\X=50 \rpcode\font`\Y=50 \rpcode\font`\k=50 \rpcode\font`\r=50 \rpcode\font`\t=50 \rpcode\font`\v=50 \rpcode\font`\w=50 \rpcode\font`\x=50 \rpcode\font`\y=50 % \lpcode\font`\(=50 %<*!pplmnOT2> \lpcode\font`\A=50 % \lpcode\font 196=\lpcode\font`\A % A umlaut \lpcode\font`\J=50 \lpcode\font`\T=50 \lpcode\font`\V=50 \lpcode\font`\W=50 \lpcode\font`\X=50 \lpcode\font`\Y=50 \lpcode\font`\v=50 \lpcode\font`\w=50 \lpcode\font`\x=50 \lpcode\font`\y=50 % %<*pplmnT2A|pplmnOT2> \rpcode\font\CYRA=50 \rpcode\font\CYRK=50 \rpcode\font\CYRT=50 \rpcode\font\CYRH=50 \rpcode\font\CYRU=50 \rpcode\font\CYRG=50 \rpcode\font\CYRZH=50 \rpcode\font\CYRL=50 \rpcode\font\CYRC=20 \rpcode\font\CYRSHCH=10 \rpcode\font\CYRHRDSN=50 \rpcode\font\CYRSFTSN=50 \rpcode\font\cyrk=50 \rpcode\font\cyrt=50 \rpcode\font\cyrh=50 \rpcode\font\cyru=50 \rpcode\font\cyrg=50 \rpcode\font\cyrzh=50 \rpcode\font\cyrl=50 \rpcode\font\cyrc=20 \rpcode\font\cyrshch=10 \rpcode\font\cyrhrdsn=50 \rpcode\font\cyrsftsn=50 \lpcode\font\CYRA=50 \lpcode\font\CYRT=50 \lpcode\font\CYRH=50 \lpcode\font\CYRU=50 \lpcode\font\CYRZH=50 \lpcode\font\CYRL=50 \lpcode\font\CYRU=50 \lpcode\font\CYRCH=50 \lpcode\font\CYRHRDSN=50 \lpcode\font\CYRD=50 \lpcode\font\cyra=50 \lpcode\font\cyrt=50 \lpcode\font\cyrh=50 \lpcode\font\cyru=50 \lpcode\font\cyrzh=50 \lpcode\font\cyrl=50 \lpcode\font\cyru=50 \lpcode\font\cyrch=50 \lpcode\font\cyrhrdsn=50 \lpcode\font\cyrd=50 % }% % % \end{macrocode} % \end{macro} % \end{macro} % \begin{macro}{\pplmnTS1} % \begin{macrocode} %<*pplmnTS1> \expandafter\gdef\csname pplmnTS1\endcsname{% \rpcode\font 176=600 % \textdegree } % % \end{macrocode} % \end{macro} % \makeatletter \c@IndexColumns=2\makeatother % \PrintIndex % \PrintChanges % \Finale \endinput %%% Local Variables: %%% mode: latex %%% TeX-master: t %%% End: % LocalWords: pdftex kerning Carsten