summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/pdfcprot
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-11 23:56:02 +0000
committerKarl Berry <karl@freefriends.org>2006-01-11 23:56:02 +0000
commit8b9432a2354ec2c08bd3015898b7cc1468a29d0f (patch)
tree0a946206b8eec548eb6cca58570ace637a9f281d /Master/texmf-dist/source/latex/pdfcprot
parent8c065b0dd59607e2e073d174a728de5b8551f81a (diff)
trunk/Master/texmf-dist/source/latex/pdfcprot
git-svn-id: svn://tug.org/texlive/trunk@441 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/pdfcprot')
-rw-r--r--Master/texmf-dist/source/latex/pdfcprot/Makefile.unx272
-rw-r--r--Master/texmf-dist/source/latex/pdfcprot/pdfcprot.dtx2145
-rw-r--r--Master/texmf-dist/source/latex/pdfcprot/pdfcprot.ins177
3 files changed, 2594 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/pdfcprot/Makefile.unx b/Master/texmf-dist/source/latex/pdfcprot/Makefile.unx
new file mode 100644
index 00000000000..d4960689fd8
--- /dev/null
+++ b/Master/texmf-dist/source/latex/pdfcprot/Makefile.unx
@@ -0,0 +1,272 @@
+########################################################################
+# Creating a installed version of pdfcprot
+# Copyright (c) Carsten Schurig, 2001, taken and modified from the
+# KOMA-Script bundle: (c) Markus Kohm, 1999-2001
+#
+#>>>> USE THIS ONLY, IF THERE IS A TDS-COMPATIBLE TEX-INSTALLATION! <<<<
+#>>>> DO NOT CHANGE ANYTHING BUT THE CUSTOMIZATION SECTION! <<<<
+#>>>> YOU NEED GNU-MAKE TO RUN THIS! <<<<
+#
+# Defined rules for users:
+#
+# default default rule if make is called without parameter,
+# generates all pdfprot including the documentation
+# all same as default but without TEXMF-test
+# install installs all files in a TDS-tree
+#
+# docu makes the documentation
+#
+# implementation changes \OnlyDescription to %\OnlyDescription in
+# `pdfcprot.dtx' so that next docu run will include the
+# documentation of the implementation
+#
+# description changes %\OnlyDescription to \OnlyDescription in
+# `pdfcprot.dtx' so that next docu run will only include
+# description of the package
+#
+# srcclean deletes all generated files (but *tar.gz)
+# distclean deletes all generated files (but *tar.gz) not part of
+# the distribution
+# clean deletes all temporary files
+#
+# dist generates a tar file pdfcprot-<date>.tar.gz with all
+# files of the distribution
+########################################################################
+
+########################################################################
+# Start of customization section
+########################################################################
+
+# The texmf-directory, where to install new stuff (see texmf.cnf)
+# If you don't know what to do, search for directory texmf at /usr.
+# With teTeX and linux often one of following is used:
+#TEXMF=/usr/TeX/texmf
+#TEXMF=/usr/local/TeX/texmf
+#TEXMF=/usr/share/texmf
+#TEXMF=/usr/local/share/texmf
+# user tree:
+#TEXMF=$(HOME)/texmf
+# Try to use the local tree known by kpsewhich:
+TEXMF=`kpsewhich --expand-var '$$TEXMFLOCAL'`
+# But you may set TEXMF to every directory you want. Maybe TEXMF is
+# already set by the environment.
+# Use following, if you only want to test the installation:
+#TEXMF=/tmp/texmf
+
+# If texhash must run after installation, you can invoke this:
+TEXHASH=texhash
+
+######### Edit following only, if you want to change defaults!
+
+# The directory, where to install *.sty and *.cpa
+STYDIR=$(TEXMF)/tex/latex/pdfcprot
+
+# The directory, where to install documentation
+DOCDIR=$(TEXMF)/doc/latex/pdfcprot
+
+# The directory, where to install the sources
+SRCDIR=$(TEXMF)/source/latex/pdfcprot
+
+########################################################################
+# End of customization section
+########################################################################
+
+# Used command:
+LATEX = latex
+PDFLATEX = pdflatex
+ NONSTOPMODE = \\nonstopmode\\input
+ BATCHMODE = \\batchmode\\input
+RM = rm -f
+RMDIR = rm -fr
+CP = cp -f
+CPALL = cp -af
+CD = cd
+MV = mv -f
+INSTALL = install -m 644
+MKDIR = install -m 755 -d
+MAKEINDEX = makeindex -g -r -s gind.ist
+MAKECHANGE = makeindex -g -r -s gglo.ist -o
+MAKEIDX = makeindex -g
+BIBTEX = bibtex
+DVIPS = dvips -Pwww
+ECHO = echo
+TARCREATE = tar -zcvf
+DIRNAME = dirname
+LL = ls -l
+SED = sed
+CUT = cut
+GREP = grep
+PSSELECT = psselect
+PSBOOK = psbook
+PSTOPS = pstops
+EVAL = eval
+
+LOGMESSAGE = 'pdfcprot was made at '`date`'.'
+ENGREADME = 'Please read README.txt and INSTALL.txt.'
+
+########################################################################
+
+RMEXT = *.log *.aux *.toc *.lot *.lof *.out *.ilg *.idx *.ind \
+ *.blg *.bbl *.glg *.glx *.glo *.gls
+
+RMOUT = *.pdf *.dvi *.ps
+
+RMSTY = *.cpa *.sty
+
+DTX_FILES = pdfcprot.dtx
+
+INS_FILES = pdfcprot.ins
+
+SRC_FILES = $(DTX_FILES) $(INS_FILES)
+
+TEXT_FILES = README.txt \
+ LEGAL.txt \
+ INSTALL.txt
+
+MISC_FILES = Makefile.unx
+
+DIST_SRC = $(TEXT_FILES) \
+ $(DTX_FILES) \
+ $(INS_FILES) \
+ $(MISC_FILES)
+
+XDIST_FILES = 00README \
+ $(DIST_SRC)
+
+DIST_FILES = 00CONTEN \
+ $(XDIST_FILES)
+
+STY_FILES = pdfcprot.sty
+
+CPA_FILES = pplmnT1.cpa \
+ pplmnOT1.cpa \
+ pplmnTS1.cpa \
+ pplmnT2A.cpa
+
+DOC_FILES = pdfcprot.dvi \
+ $(TEXT_FILES) \
+ $(MISC_SRC)
+
+IDOC_FILES = ${DTX_FILES:.dtx=.dvi}
+
+ILOG_FILES = ${DTX_FILES:.dtx=.log}
+
+########################################################################
+
+default:
+ @if test "x" = "x$(TEXMF)" -o ! -d "$(TEXMF)"; then \
+ $(ECHO) "Destination directories not there." ; \
+ $(ECHO) "Please edit TEXMF at the Makefile first!"; \
+ exit 1 ; \
+ else \
+ $(MAKE) all ; \
+ fi
+
+all: pdfcprotins.log $(IDOC_FILES)
+
+docu: docuclean $(IDOC_FILES)
+
+pdfcprotins.log: $(SRC_FILES)
+ $(LATEX) pdfcprot.ins
+ $(ECHO) $(LOGMESSAGE) > pdfcprotins.log
+
+########################################################################
+
+install: pdfcprotins.log
+ if test `pwd` = $(STYDIR) -o `pwd` = $(SRCDIR) -o `pwd` = $(DOCDIR); \
+ then \
+ $(CPALL) ./ /tmp/pdfcprot.tmp; \
+ $(CD) /tmp/pdfcprot.tmp; \
+ $(MAKE) install; \
+ $(RMDIR) /tmp/pdfcprot.tmp; \
+ else \
+ $(MKDIR) $(STYDIR); \
+ $(INSTALL) $(STY_FILES) $(STYDIR); \
+ $(INSTALL) $(CPA_FILES) $(STYDIR); \
+ $(MKDIR) $(DOCDIR); \
+ $(INSTALL) $(DOC_FILES) $(DOCDIR); \
+ for file in $(DIST_FILES); do \
+ dir=`dirname $$file`; \
+ if test "x$$dir" = "x"; \
+ then $(INSTALL) $$file $(SRCDIR); \
+ else $(MKDIR) $(SRCDIR)/$$dir; \
+ $(INSTALL) $$file $(SRCDIR)/$$dir; \
+ fi; \
+ done; \
+ $(INSTALL) pdfcprotins.log $(DOCDIR); \
+ fi
+ @if test -z "$(TEXHASH)" ; then \
+ $(ECHO) ;\
+ $(ECHO) '>>> Maybe you have to run texhash or something else, now. <<<';\
+ $(ECHO) ;\
+ else \
+ $(EVAL) $(TEXHASH); \
+ fi
+
+########################################################################
+
+srcclean: distclean
+ $(RM) $(RMOUT) 00*
+
+distclean: clean
+ $(RM) $(RMSTY)
+
+docuclean: clean
+ $(RM) $(RMOUT)
+
+clean:
+ $(RM) $(RMEXT)
+
+implementation:
+ @for src in $(DTX_FILES);do \
+ $(CP) $${src} $${src}.bak; \
+ $(SED) 's/^\\OnlyDescription/%\\OnlyDescription/1' \
+ <$${src}.bak >$${src}; \
+ $(RM) $${src}.bak; \
+ done
+
+description:
+ @for src in $(DTX_FILES);do \
+ $(CP) $${src} $${src}.bak; \
+ $(SED) 's/^%\\OnlyDescription/\\OnlyDescription/1' \
+ <$${src}.bak >$${src}; \
+ $(RM) $${src}.bak; \
+ done
+
+########################################################################
+
+.SUFFIXES: .dtx .dvi .log
+
+.dtx.dvi:
+ $(LATEX) $(BATCHMODE) $<
+ $(LATEX) $(BATCHMODE) $<
+ $(MAKEIDX) -r -s gind.ist $(<:.dtx=.idx)
+ $(MAKEIDX) -r -s gglo.ist $(<:.dtx=.glo) -o $(<:.dtx=.gls)
+ $(LATEX) $(NONSTOPMODE) $<
+
+.dtx.log:
+ $(LATEX) $(BATCHMODE) $<
+ $(LATEX) $(BATCHMODE) $<
+ $(MAKEIDX) -r -s gind.ist $(<:.dtx=.idx)
+ $(MAKEIDX) -r -s gglo.ist $(<:.dtx=.glo) -o $(<:.dtx=.gls)
+ $(LATEX) $(NONSTOPMODE) $<
+
+dist: pdfcprotins.log $(DIST_FILES) $(ILOG_FILES) $(IDOC_FILES)
+ @if $(GREP) "Checksum not passed" *.log; then \
+ $(ECHO) "Cannot create tar because of checksum error" >&2; \
+ else \
+ $(TARCREATE) pdfcprot-`date -I`.tar.gz $(DIST_FILES); \
+ fi
+
+00CONTEN: $(XDIST_FILES)
+ $(LL) $(XDIST_FILES) > 00CONTEN
+ $(LL) 00CONTEN >> 00CONTEN
+ $(LL) $(DIST_FILES) > 00CONTEN.TMP
+ $(CUT) -b 35- 00CONTEN.TMP > 00CONTEN
+ $(RM) 00CONTEN.TMP
+
+00README:
+ $(ECHO) $(GERMREADME) > 00README
+ $(ECHO) $(ENGREADME) >> 00README
+
+########################################################################
diff --git a/Master/texmf-dist/source/latex/pdfcprot/pdfcprot.dtx b/Master/texmf-dist/source/latex/pdfcprot/pdfcprot.dtx
new file mode 100644
index 00000000000..a7d4cb53a7b
--- /dev/null
+++ b/Master/texmf-dist/source/latex/pdfcprot/pdfcprot.dtx
@@ -0,0 +1,2145 @@
+% \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}
+%</dtx>
+%<driver> \ProvidesFile{pdfcprot.drv}
+%<*dtx>
+%<*driver>
+[2005/05/23 v1.7a pdfcprot
+%</driver>
+%</dtx>
+%<dtx> 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}
+%</driver>
+% \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%
+ }
+%</package>
+% \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}
+%<pplmnT1>\expandafter\gdef\csname pplmnT1\endcsname{%
+%<pplmnOT1>\expandafter\gdef\csname pplmnOT1\endcsname{%
+%<pplmnT2A>\expandafter\gdef\csname pplmnT2A\endcsname{%
+%<pplmnOT2>\expandafter\gdef\csname pplmnOT2\endcsname{%
+%<*pplmnOT1|pplmnOT2>
+ \lpcode\font 92=500 % ``
+ \rpcode\font 34=500 % ''
+ \rpcode\font 123=300 % --
+ \rpcode\font 124=200 % ---
+%</pplmnOT1|pplmnOT2>
+%<*pplmnT1|pplmnT2A>
+ \lpcode\font 16=500 % ``
+ \rpcode\font 17=500 % ''
+ \rpcode\font 21=300 % --
+ \rpcode\font 22=200 % ---
+%</pplmnT1|pplmnT2A>
+%<*pplmnT2A|pplmnOT2>
+ \rpcode\font\cyrdash=200 % "---
+ \lpcode\font\cyrdash=200 % "--*
+%</pplmnT2A|pplmnOT2>
+%<*pplmnT1|pplmnT2A>
+% german quotation marks
+ \lpcode\font\quotedblbase=600
+ \rpcode\font\textquotedblleft=500
+%</pplmnT1|pplmnT2A>
+%<*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
+%<pplmnT1> \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
+%<pplmnT1> \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
+%</pplmnT2A|pplmnOT2>
+}%
+%</pplmnOT1|pplmnT1|pplmnT2A|pplmnOT2>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\pplmnTS1}
+% \begin{macrocode}
+%<*pplmnTS1>
+\expandafter\gdef\csname pplmnTS1\endcsname{%
+ \rpcode\font 176=600 % \textdegree
+}
+%</pplmnTS1>
+% \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
diff --git a/Master/texmf-dist/source/latex/pdfcprot/pdfcprot.ins b/Master/texmf-dist/source/latex/pdfcprot/pdfcprot.ins
new file mode 100644
index 00000000000..6dfd2825946
--- /dev/null
+++ b/Master/texmf-dist/source/latex/pdfcprot/pdfcprot.ins
@@ -0,0 +1,177 @@
+\let\ifbeta\iftrue
+%%
+%% This file will generate fast loadable files from the dtx files in this
+%% bundle when run through LaTeX or TeX.
+%%
+%% This file is part of the LaTeX2e pdfcprot bundle
+%% ---------------------------------------------------
+%%
+%% This system is distributed in the hope that it will be useful,
+%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+%%
+%% IMPORTANT NOTICE:
+%%
+%% Copyright 2001 Carsten Schurig.
+%% All rights reserved. For further copyright information see the file
+%% README.txt and LEGAL.txt, and any other copyright indicated in this file.
+%%
+%% Permission is granted to distributed verbatim copies of this file
+%% together with all other files of the pdfcprot bundle (as mentioned
+%% in README.txt).
+%%
+%% No other permissions to copy or distribute this file in any form
+%% are granted and in particular no permission to modify its contents.
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\batchfile{pdfcprot.ins}
+\input docstrip.tex
+
+\ifToplevel{\ifx\generate\undefined
+\Msg{**********************************************}
+\Msg{*}
+\Msg{* This installation requires docstrip}
+\Msg{* version 2.3c or later.}
+\Msg{*}
+\Msg{* An older version of docstrip has been input}
+\Msg{*}
+\Msg{**********************************************}
+\errhelp{Move or rename old docstrip.tex.}
+\errmessage{Old docstrip in input path}
+\batchmode
+\csname @@end\endcsname
+\fi
+}
+
+\preamble
+\endpreamble
+
+\keepsilent
+
+\askforoverwritetrue
+
+\declarepreamble\mainpreamble
+
+Copyright (C) 2001 Carsten Schurig.
+Copyright (C) 2004 Tobias Schlemmer.
+Email: keinstein_junior@gmx.net
+
+This program may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.2
+of this license or (at your option) any later version.
+The latest version of this license is in
+http://www.latex-project.org/lppl.txt
+and version 1.2 or later is part of all distributions of LaTeX
+version 1999/12/01 or later.
+
+For a list of files constituting this program see README.txt. For
+further copyright information see README.txt and LEGAL.txt.
+
+----------------------------------------------------
+This file is part of the LaTeX2e pdfcprot bundle.
+----------------------------------------------------
+Some parts of the code are based on code by the
+authors of pdftex.
+----------------------------------------------------
+
+ This system is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+
+IMPORTANT NOTICE:
+
+For error reports in case of UNCHANGED versions see documentation.
+
+Please do not request updates directly. Distribution is
+done through Mail-Servers, Mailboxes and TeX organizations.
+
+You are not allowed to change this file.
+
+You are allowed to distribute this file under the condition that
+it is distributed together with all files mentioned in README.txt.
+See LEGAL.txt for further information.
+
+If you receive only some of these files from someone, complain!
+
+You are NOT ALLOWED to distribute this file alone.
+\endpreamble
+\declarepreamble\cpapreamble
+Copyright (C) 2001 Carsten Schurig.
+Copyright (C) 2004 Tobias Schlemmer.
+Email: keinstein_junior@gmx.net
+
+This program may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.2
+of this license or (at your option) any later version.
+The latest version of this license is in
+http://www.latex-project.org/lppl.txt
+and version 1.2 or later is part of all distributions of LaTeX
+version 1999/12/01 or later.
+
+For a list of files constituting this program see README.txt. For
+further copyright information see README.txt and LEGAL.txt.
+
+----------------------------------------------------
+This file is part of the LaTeX2e pdfcprot bundle.
+----------------------------------------------------
+Especially this code is heavily based on code by the
+authors of pdftex.
+----------------------------------------------------
+
+ This system is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+
+IMPORTANT NOTICE:
+
+For error reports in case of UNCHANGED versions see documentation.
+
+Please do not request updates directly. Distribution is
+done through Mail-Servers, Mailboxes and TeX organizations.
+
+You are not allowed to change this file.
+
+You are allowed to distribute this file under the condition that
+it is distributed together with all files mentioned in README.txt.
+See LEGAL.txt for further information.
+
+If you receive only some of these files from someone, complain!
+
+You are NOT ALLOWED to distribute this file alone
+\endpreamble
+
+%% File generation:
+
+\generate{%
+ \usepreamble\mainpreamble
+ \file{pdfcprot.sty}{\from{pdfcprot.dtx}{package}}%
+}
+
+\generate{%
+ \usepreamble\cpapreamble
+ \file{pplmnT1.cpa}{\from{pdfcprot.dtx}{pplmnT1}}%
+ \file{pplmnTS1.cpa}{\from{pdfcprot.dtx}{pplmnTS1}}%
+ \file{pplmnOT1.cpa}{\from{pdfcprot.dtx}{pplmnOT1}}%
+ \file{pplmnT2A.cpa}{\from{pdfcprot.dtx}{pplmnT2A}}
+ \file{pplmnOT2.cpa}{\from{pdfcprot.dtx}{pplmnOT2}}%
+}
+
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move some}
+\Msg{* files into a directory searched by TeX.}
+\Msg{* See INSTALL.txt (english) for more information.}
+\Msg{*}
+\Msg{* I heavilly recommend to produce the documentation.}
+\Msg{* To produce it, run the files `pdfcprot.dtx' through LaTeX}
+\Msg{* after finishing the installation.}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+}
+
+\endinput \ No newline at end of file