diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-13 00:05:21 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-13 00:05:21 +0000 |
commit | 15f7206dd3f97a844cede7fb76358ba6a022981c (patch) | |
tree | e4cbc8f64972457d169dbc8482cf58698230e8c2 /Master/texmf-dist/tex/latex/relenc/2sidedoc.sty | |
parent | ee0212e120bb432a474a7d5f7de31641543bccf6 (diff) |
relenc
git-svn-id: svn://tug.org/texlive/trunk@1275 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/relenc/2sidedoc.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/relenc/2sidedoc.sty | 360 |
1 files changed, 360 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/relenc/2sidedoc.sty b/Master/texmf-dist/tex/latex/relenc/2sidedoc.sty new file mode 100644 index 00000000000..64c4f523d3e --- /dev/null +++ b/Master/texmf-dist/tex/latex/relenc/2sidedoc.sty @@ -0,0 +1,360 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{2sidedoc}[1999/01/24] + +\newif\ifTSD@setpdimens \TSD@setpdimensfalse +\let\TSD@showdimen=\@gobble + +\DeclareOption{setpagedimens}{\TSD@setpdimenstrue} +\DeclareOption{showdimens}{% + \def\TSD@showdimen#1{% + \dimen@=0.35146#1% + \immediate\write\sixt@@n{#1: \strip@pt\dimen@ mm}% + }% +} + +\ProcessOptions\relax + +\if@twoside + \normalmarginpar + \@mparswitchtrue + + \ifTSD@setpdimens + % The total width of the part of the page on which text should be + % allowed to appear is the width of 94 characters in the current + % \MacroFont. (20 in the margin, 72 in the main text (whose width + % is \textwidth), and 2 separating them.) + \ifdim\z@>\textwidth + % If the \textwidth is negative at this point, the negation of + % that value is used, to allow for further configuration. + \setlength\textwidth{-\textwidth}% + % \marginparsep is left unchanged. + \else + \ifcase\@ptsize + % 10pt, computed using cmtt9 at 9pt + \setlength\textwidth{340.2pt} + \setlength\marginparsep{9.4499pt} % 2*4.72495pt + \or + % 11pt, computed using cmtt10 at 10pt + \setlength\textwidth{378.0pt} + \setlength\marginparsep{10.4999pt} % 2*5.24995pt + \or + % 12pt, computed using cmtt10 at 10.95pt + \setlength\textwidth{414pt} + \setlength\marginparsep{11.49738pt} % 2*5.74869pt + \else + % Assume \@ptsize is the main font size, but compute the width + % as if \MacroFont includes a \small setting which reduces the + % size of everything by "\magstep-0.5" (that is, by a factor + % 1.2^{-0.5}, and assume the metrics of the font coincide with + % those of cmtt8. + \setlength\textwidth{34.91781pt} + \setlength\textwidth{\@ptsize\textwidth} + \setlength\marginparsep{0.96994pt} + \setlength\marginparsep{\@ptsize\marginparsep} + \fi + \fi + \ifdim 3truecm>\paperwidth + \PackageError{twosidedoc}{Your \protect\paperwidth\space is % + ridiculously small}\@ehd + \dimen@=2truecm + \advance\dimen@ \marginparsep + \ifdim \dimen@<\paperwidth \else + \PackageError{twosidedoc}{You have an infinite loop ahead}% + {You really should type X to quit now.} + \fi + \fi + \dimen@ii=\p@ + \loop + \dimen@=\paperwidth + \advance\dimen@ -\marginparsep + \advance\dimen@ -1.27778\textwidth + \ifdim 2truecm<\dimen@ \else + % This gets dangerously close to the physical margins. Shrink + % the \textwidth by 5%. + \setlength\textwidth{0.95\textwidth} + \dimen@ii=0.95\dimen@ii + \repeat + \ifdim\dimen@ii<\p@ + \dimen@=72\dimen@ + \dimen@ii=100\dimen@ii + \ifdim\dimen@ii<90\p@ + \expandafter\PackageWarningNoLine + \else + \expandafter\PackageInfo + \fi{twosidedoc}{% + The width of the text has been shrunk\MessageBreak + to \strip@pt\dimen@ii\@percentchar\space of its original % + size.\MessageBreak + This is approximately \strip@pt\dimen@\space characters.% + } + \fi + % Now at last \textwidth is established. The other values follow easily. + \setlength\marginparwidth{0.27778\textwidth} + % Margins are calculated as follows: 1 cm is reserved at each side + % and what remains is split 1:2 between inner and outer margin. + \dimen@=\paperwidth + \advance\dimen@ -\textwidth + \advance\dimen@ -\marginparsep + \advance\dimen@ -\marginparwidth + \advance\dimen@ -2truecm + \divide\dimen@ \thr@@ + \setlength\oddsidemargin{\dimen@} + \setlength\evensidemargin{2\dimen@} + \advance\oddsidemargin 1truecm + \advance\oddsidemargin -1truein + \advance\evensidemargin \marginparsep + \advance\evensidemargin \marginparwidth + \advance\evensidemargin 1truecm + \advance\evensidemargin -1truein + \else + % Otherwise only the margins are changed. + \setlength\evensidemargin{\oddsidemargin} + \setlength\oddsidemargin{\paperwidth} + \advance\oddsidemargin -\textwidth + \advance\oddsidemargin -2truein + \advance\oddsidemargin -\evensidemargin + \advance\marginparsep 5\p@ + \dimen@=\evensidemargin + \advance\dimen@ 1truein + \advance\dimen@ -1truecm + \advance\dimen@ -\marginparsep + \setlength\marginparwidth{\dimen@} + \fi +\else + \advance\marginparsep 5\p@ + \dimen@=\oddsidemargin + \advance\dimen@ 1truein + \advance\dimen@ -1truecm + \advance\dimen@ -\marginparsep + \setlength\marginparwidth{\dimen@} +\fi + +\TSD@showdimen\textwidth +\TSD@showdimen\oddsidemargin +\TSD@showdimen\evensidemargin +\TSD@showdimen\marginparwidth +\TSD@showdimen\marginparsep +\TSD@showdimen\marginparpush +\TSD@showdimen\jot + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Modifications of macro etc. +% +\newcount\macro@line@cnt +\macro@line@cnt=\z@ + % \macro@cnt keeps track of how many macro names have been printed. + % \macro@line@cnt keeps track of how many lines it has taken. +\def\TSD@prevgraf{1} + % The last stored value of \prevgraf. +\newif\ifTSD@rightmargin@ + % Should macro/environment name be formatted for printing in the + % right margin? (false = for left margin). + +\def\PrintMacroName#1{% + \expandafter\TSD@print@name \expandafter{\string#1}% +} +\def\PrintDescribeMacro#1{% + \expandafter\TSD@print@name \expandafter{\expandafter\strut + \string#1\strut}% +} +\def\PrintEnvName#1{\TSD@print@name{#1}} +\def\PrintDescribeEnv#1{\TSD@print@name{\strut#1\strut}} + + +\def\TSD@print@name#1{% + \raise 1ex\hbox{% + \MacroFont + \lower 1ex\vtop{% + \everypar={}% Very important!!!! + \hsize=\marginparwidth + \parindent=\z@ + \parskip=\z@skip + \baselineskip=\normalbaselineskip + \lineskiplimit=-\maxdimen + \ifTSD@rightmargin@ + \TSD@macro@format@right{#1}% + \else + \TSD@macro@format@left{#1}% + \fi + \xdef\TSD@prevgraf{\the\prevgraf}% + }% + }% +} +% #1 is the macro/enviroment; it has already been \string:ed. +\def\TSD@macro@format@right#1{% + \leftskip=\z@\@plus 1fill\relax + \hskip-\leftskip + \rightskip=\z@\@plus\fontdimen\tw@\font\relax + \parfillskip=\z@\@plus 1fil\relax + \TSD@one@letter@words{#1}% + \@@par +} +\def\TSD@macro@format@left#1{% + \hskip\z@\@plus 1fill\relax + \leftskip=\z@skip + \rightskip=\z@\@plus\fontdimen\tw@\font\relax + \parfillskip=\z@\@plus 1fil\relax + \TSD@one@letter@words{#1}% + \@@par +} +\def\TSD@letter@space{\hskip\z@skip} +\def\TSD@one@letter@words#1{\TSD@one@letter@words@i#1\relax} +\def\TSD@one@letter@words@i#1{% + \ifx#1\relax\else + #1\TSD@letter@space + \expandafter\TSD@one@letter@words@i + \fi +} + +\newcounter{MacroEnvironment} +\setcounter{MacroEnvironment}{0} + +\def\TSD@correct@side{% + \begingroup + \edef\@tempa{% + \write\@auxout{% + \if@twoside + \ifodd\c@page + \noexpand\TSD@correct@odd + \else + \noexpand\TSD@correct@even + \fi + \else + \noexpand\TSD@correct@even + \fi{\the\c@MacroEnvironment}% + }% + }% + \@tempa + \endgroup +} +\def\TSD@correct@odd#1{% + \if@twoside + \ifodd\c@page + \@percentchar + \else + \string\TSD@nameglet{TSD@#1}\string\@secondoftwo + \fi + \else + \string\TSD@nameglet{TSD@#1}\string\@secondoftwo + \fi +} +\def\TSD@correct@even#1{% + \if@twoside + \ifodd\c@page + \string\TSD@nameglet{TSD@#1}\string\@firstoftwo + \else + \@percentchar + \fi + \else + \@percentchar + \fi +} +\def\TSD@nameglet#1{\global\expandafter\let\csname#1\endcsname} + + +\long\def\m@cro@#1#2{\endgroup + \topsep\MacroTopsep + \trivlist + \setlength\labelsep{\z@}% + \refstepcounter{MacroEnvironment}% + \@ifundefined{TSD@\the\c@MacroEnvironment}{% + \if@twoside + \ifodd\c@page + \TSD@rightmargin@true + \else + \TSD@rightmargin@false + \fi + \else + \TSD@rightmargin@false + \fi + }{% + \@nameuse{TSD@\the\c@MacroEnvironment}% + \TSD@rightmargin@true \TSD@rightmargin@false + }% + \edef\saved@macroname{\string#2}% + \if@inlabel + \def\@tempa{{% + \noexpand\MacroFont + \dimen@=\macro@line@cnt\baselineskip + \advance\dimen@ \macro@cnt\jot + \vskip\dimen@ + }}% + \else + \let\@tempa\@empty + \macro@cnt\z@ + \fi + \edef\makelabel##1{% + \noexpand\hb@xt@\z@{% + \ifTSD@rightmargin@ + \hskip\textwidth\hskip\marginparsep + \else + \hss + \fi + \vtop to\z@{\noexpand\null + \vskip-\baselineskip\@tempa + \hbox{\noexpand\TSD@correct@side##1}% + \vss + }% + \ifTSD@rightmargin@ + \hss + \else + \hskip\marginparsep + \fi + }% + }% + \edef\@tempa{% + \noexpand\item[% + #1% + \noexpand\PrintMacroName + \else + \noexpand\PrintEnvName + \fi + {\string#2}% + ]% + }% + \@tempa + \advance\macro@cnt \@ne + \advance\macro@line@cnt \TSD@prevgraf\relax + \global\advance\c@CodelineNo\@ne + #1% + \SpecialMainIndex{#2}\nobreak + \DoNotIndex{#2}% + \else + \SpecialMainEnvIndex{#2}\nobreak + \fi + \global\advance\c@CodelineNo\m@ne + \ignorespaces +} + + +\def\Describe@Macro#1{\endgroup + \marginpar% + [% + \TSD@rightmargin@false\noindent + \PrintDescribeMacro{#1}]% + {%\tracingmacros=\@ne + \TSD@rightmargin@true\noindent + \PrintDescribeMacro{#1}}% + \SpecialUsageIndex{#1}% + \@esphack\ignorespaces +} +\def\Describe@Env#1{\endgroup + \marginpar% + [\TSD@rightmargin@false\noindent + \PrintDescribeEnv{#1}]% + {\TSD@rightmargin@true\noindent + \PrintDescribeEnv{#1}}% + \SpecialEnvIndex{#1}% + \@esphack\ignorespaces +} +% The \noindent:s are necessary, since \marginpar forms a \vtop, not an +% \hbox. This is important if \PrintDescribeMacro/Env starts with \raise. + + +\let\ifTSD@setpdimens\relax +\let\TSD@setpdimenstrue\relax +\let\TSD@setpdimensfalse\relax + +\endinput
\ No newline at end of file |