diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-11 23:56:02 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-11 23:56:02 +0000 |
commit | 8b9432a2354ec2c08bd3015898b7cc1468a29d0f (patch) | |
tree | 0a946206b8eec548eb6cca58570ace637a9f281d /Master/texmf-dist/source/latex/pdfcprot | |
parent | 8c065b0dd59607e2e073d174a728de5b8551f81a (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.unx | 272 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/pdfcprot/pdfcprot.dtx | 2145 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/pdfcprot/pdfcprot.ins | 177 |
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 |