% \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
%!pplmnOT2>
\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
%!pplmnOT2>
%<*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