% \iffalse meta-comment % % Copyright (C) 2004--2005 by Georg Michael Verweyen % -------------------------------------------------- % % This file 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. % % \fi % % \iffalse %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %\ProvidesPackage{stdpage} % [2005/03/30 v0.6 stdpage.sty] % %<*driver> \documentclass{ltxdoc} \renewcommand{\familydefault}{\rmdefault} \usepackage[T1]{fontenc} \usepackage[ngerman]{babel} \usepackage{hyperref,courier} \usepackage[typewriter,chars=70,lines=35]{stdpage} \hypersetup{% pdftitle={Das stdpage-Paket},% pdfauthor={\textcopyright\ Georg Michael Verweyen },% pdfsubject={Anleitung zur Erstellung einer Normseite / Manual to create a standard page},% pdfkeywords={Satzspiegel, Vorgaben, 30x60, LaTeX, \LaTeXe, Normseiten,% 30 Zeilen, 60 Zeichen, standard page, requirements, 60 characters, 30 lines}% } \CodelineIndex \RecordChanges \begin{document} \DocInput{stdpage.dtx} \end{document} % % \fi % % \CheckSum{207} % % \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 \~} % % % \changes{v0.1}{2004/06/17}{Initial version} % \GetFileInfo{stdpage.sty} % \changes{v0.2}{2004/06/21}{Neue Übergabe der Parameter mit xkeyval.sty} % \changes{v0.3}{2004/06/17}{Wieder alles überarbeitet, das Paket xkeyval wird % nicht mehr gebraucht. Die Funktionalität ist unverändert.} % \changes{v0.4}{2004/06/21}{Some English documentation added} % \changes{v0.6}{2005/03/30}{Additional Features, bugs removed, lot's of changes} % % \title{Das \textsf{stdpage} Paket -- \emph{The \textsf{stdpage} % package}\thanks{% % Diese Anleitung geh\"{o}rt zu \textsf{stdpage}~\fileversion, % vom \filedate. \emph{This is the manual for \textsf{stdpage}~\fileversion, % dated \filedate.} % }% % }% % \author{Georg Michael Verweyen \\ \texttt{Georg.Verweyen@rub.de}} % \maketitle % % \abstract{% % Dieses Paket bietet eine einfache Möglichkeit Normseiten zu % erstellen, das sind in Deutschland Seiten mit 30 Zeilen \`{a} 60 Zeichen. % % \emph{% % This package provides an easy method to prepare a page with a fixed % number of lines per page and a number of characters per line not to be exeeded. % Worldwide there are different standards for so called ">standard"< pages. % \textsf{stdpage.sty} lets you adjust the page settings. There is further English % instruction following (in italics). % }% % }% % % % \section{Normseiten -- \emph{Standard pages}} % % Normseiten nennt man im Verlag Seiten, die in einer nicht-proportionalen % Schrift gesetzt sind, bei einer Zeilenl\"{a}nge von maximal 60~Zeichen und % 30~Zeilen pro Seite. Daraus ergeben sich meist ca.\ 1\,400 Zeichen % inklusive Leerschritte pro Seite, denn nicht jede Zeile wird voll, evtl.\ % gibt es Leerzeilen, halbleere Seiten vor einem neuen Kapitel etc.\footnote{% % Manche Verlage rechnen einfach mit 1\,800 Zeichen f\"{u}r eine Normseite -- % absurd! % } Die Zeichenzahl kann erheblich schwanken, stark strukturierte Texte, mit % Dialogen etc. nehmen relativ viel Raum ein, bei wenig Zeichen pro Seite. % % \"{U}bersetzer etwa werden pro Normseite bezahlt, auch f\"{u}r Korrekturlesen, % oder Schriftsatz gibt es Vertr\"{a}ge, die sich auf Normseiten beziehen. % % \emph{% % Standard pages are typeset in a nonproportional font. The lines take a % limited number of characters, for instance 60. Also the number of lines % is fixed, for instance 30 (Those are the standard settings in quite a number % countries). This does \emph{not} mean, such a page has 1\,800 % characters, as lines don't necessarily get filled, also pages might not % get filled at the end of a chapter. Usually a standard page (30x60) has % about 1400 characters. % }% % % \section*{Changes} % % Neu in Version 0.5 sind die Möglichkeiten, den Durchschuss zu % erhöhen, die Silbentrennung abzustellen und Leerzeilen zwischen % den Absätzen einzufügen. % % {\em Since v0.5 you can spread the lines, stop hyphenation % optionally and add an empty line at the beginning of a paragraph. % % Für den echten Freund der guten (?) alten Schreibmaschine gibt es % jetzt (v0.6) eine Option, die so ziemlich alles, was mir spontan % eingefallen ist auf einfache Schriftgrö{\ss}e herunterbrät, % |typewriter|. Vom Part bis zur Fu{\ss}note: alles |normalsize|. Die % Überschriften werden je nach Gewichtung durch Leerzeilen abgesetzt. % Man sollte |courier.sty| benutzen, dann stehen für Überschriften % wenigsten fette Schnitte zur Verfügung, damit an die Überschriften % wiederfindet. % % {\em % For the real typewriter addicted there is a new (v0.6) option: % |typewriter|. This option will turn any fontsize I could imagine used % in a heading or footnote, or whatever into normalsize. Headings are % separated from the rest of the text by blank lines. You should % consider using |courier.sty| with this options, which gives bold % headings % } % % \section{Anwendung -- \emph{Usage}} % % F\"{u}r die Basiseinstellungen (Normseiten im Sinne des Vd\"{U}) reicht es, die % Zeile |\usepackage{stdpage}| vor dem |\begin{document}| einzuf\"{u}gen -- % eigentlich sollte dann alles von alleine gehen. % % Silbentrennung sollte man meines Erachtens verwenden, trotz der nicht"=proportionaler % Fonts. Wer mag kann aber |hyphen=false| wählen. Ob man den Rausatz % dann zum Blocksatz streckt ist letztlich eine Geschmacksfrage. Wer % Blocksatz w\"{u}nscht, kann |just| (Blocksatz = justified) als optionales Argument \"{u}bergeben - die Kombination % |[just=true, hyphen=false]| ist nicht m\"oglich. Wenn schon Blocksatz dann auch Sibentrennung! % Ma{\ss}geblich % ist in meinen Augen das Ergebnis des Rausatzes, da dieser die Situation auf der % guten alten Schreibmaschine am besten nachahmt, schlie{\ss}lich stammt auch die Idee % der Normseite aus dieser \"{A}ra. Bei aktiviertem Blocksatz kann der Umbruch durch % Stauchung und oder Dehnung der Wortzwischenr\"{a}ume etwas anders ausfallen als beim % Rausatz (dieses Problem sollte ab v0.6 behoben sein). % % {\em If you are preparing a German ``Normseite'' of 30 lines and 60 characters % per line you just put |\usepackage{stdpage}| before the % |\begin{document}| line -- and everything should be fine. The standard % behaviour of the package is to make the text ragged, you can change this % to justified text by adding |just| to the options list. % % Linenumbers can be added with |linenumbers|. Paragraph indention can be % suppressed with |noindent|. You should think about adding |parskip| to the % list of options then, as your paragraphs might get lost otherwise. % % If you want to create a standard page for, let's say the administration of % the European union, you need a page of 30x50 without paragraph indention, % you type in\\ |\usepackage[chars=50, lines=30, noindent]{stdpage}|. % }% % % \changes{v0.2}{2004/06/21}{Neue Option: linenumbers} % Eine weitere Option ist |linenumbers|: wird die Option gew\"{a}hlt, erscheinen % automatisch auf dem Innenrand Zeilennummern - nur f\"{u}r den Fall, dass der % Lektor/""Verlagsleiter/""Autor \dots\ nicht so gut z\"{a}hlen kann. Mit % |linenumbers| besser einmal zuviel {\TeX}en als zuwenig, die Nummern rutschen % schonmal\dots % % Wer keinen Absatzeinzug w\"{u}nscht (zum Beispiel weil er das in Kombination mit Rausatz % kategorisch ablehnt), kann |noindent| w\"{a}hlen. Er sollte dann vielleicht |parskip=true| % setzen, damit die Absätze erkennbar bleiben. % % \changes{v0.2}{2004/06/21}{Neue Optionen: chars/lines} % Falls es (im Ausland?) andere Standards f\"{u}r Normseiten gibt, kann man % andere Werte im optionalen Parameter |lines| bzw.\ |chars| angeben. % Beispiel: |\usepackage[just,noindent,chars=50]{stdpage}| Mit diesen % Angaben entsteht eine Ausgabe die den Ma\ss gaben f\"{u}r % \"{U}bersetzungen der Europ\"{a}ischen Union entspricht (30 Zeilen mit je % 50 Zeichen). % % \changes{v0.2}{2004/06/21}{Neue Optionen: hyphen, baselinestretch} % Unklar ist in vielen Vertr\"agen, ob bei Normseiten Silbentrennung % stattfinden soll oder nicht. Die Option |hyphen=false| stellt die % Silbentrennung ab (geht nur, wenn kein Blocksatz aktiviert wurde). % Die Verlagswelt scheint über die Anwendung der % Trennung gespalten. Wird die Trennung abgeschaltet, steigt die Zahl % der Normseiten um etwa 1,5\,\%. % % Einige Lektoren wollen auch gleich im Normseiten-Ausdruck redigieren % und brauchen anderthalbfache Zeilenhöhe. Das verdirbt dann jeden % Rest von \"asthetischem Anspruch, aber nun ja -- wenn es der Verlag % so will: |baselineskip| kann jetzt auch als Option von |stdpage| % angegeben werden. Für das, was Word gemeinhin anderthalbzeilig % nennt, sollte man |baselinestretch=1.2| setzen (was allerdings auch % die Standardeinstellung ist, wenn nur |baselinestretch| gefordert wird. % % {\em % In contracts it is often not clear if hyphenation should be used or % not. The option |hyphen=false| sets off hyphenation, wich will % increase the number of standard pages about 1.5\,\%. This will not % work with the option |just| (justification needs hyphenation!). % % Sometimes publishers want to do correction or annotations between % the lines and need more space. You can change the standard % \LaTeX-factor |baselinestretch| in the options of |stdpage|. % |baselinestretch=1.25| will have about the same effect as one and a % half linespacing in let's say WORD. By the way: |baselinestretch| will be % set to 1.25 by default when you use |baselinestretch| as an option. % % I didn't translate the comment on the implementation (which is rather % simple). If you are interested in an English hint, just contact me, % I'll do my very best \dots % } % % \section{Neu -- \emph{New}} % \StopEventually{\PrintChanges\PrintIndex} % % \section{Implementierung} % % \begin{macrocode} \RequirePackage{typearea% ,ragged2e% ,ifthen% ,keyval% ,lineno% }% \RequirePackage[htt]{hyphenat}% \RequirePackage[rigidchapters]{titlesec}% % \end{macrocode} % Typewriter wir zur Standardfamilie erkl\"{a}rt und Absatzeinzug auch bei RaggedRight % als Standard gesetzt. % \begin{macrocode} \renewcommand{\familydefault}{\ttdefault}% \renewcommand{\RaggedRightParindent}{\parindent}% % \end{macrocode} % Ein paar neue L\"{a}ngen und Befehle: % \begin{macrocode} \newlength{\St@ndardLinewidth}% \newlength{\St@ndardTextwidth}% \newlength{\CharsX}% \newlength{\CharsI}% \newboolean{st@ndardjust}% \setboolean{st@ndardjust}{false}% \newboolean{st@ndardnoindent}% \setboolean{st@ndardnoindent}{false}% \newboolean{st@ndardnumbers}% \setboolean{st@ndardnumbers}{false}% \newboolean{st@ndardhyphen}% \setboolean{st@ndardhyphen}{true}% \newboolean{st@ndardparskip}% \setboolean{st@ndardparskip}{false}% \newboolean{st@ndardtypewriter}% \setboolean{st@ndardtypewriter}{false}% \newcommand*{\zeichenzahl}{60}% \newcommand*{\zeilenzahl}{30}% % \end{macrocode} % \subsection{Optionen} % Hier werden jetzt die optionalen Argumente des % |\usepackage{stdpage}|-Befehls definiert. |#1| bezieht sich jeweils auf % den Eintrag nach dem Gleichheitszeichen, in eckigen Klammern der % Defaultwert, der angenommen wird, falls kein Gleichheitszeichen und kein % Wert folgt. Ob man also |just=true| eingibt oder einfach |just| ist % egal. % \begin{macrocode} \define@key{stdpage}{block}[true]{%Aus Kompatibilitätsgründen (zu v. 0.4) auf deutsch \setboolean{st@ndardjust}{#1}% }% \define@key{stdpage}{just}[true]{% \setboolean{st@ndardjust}{#1}% }% \define@key{stdpage}{noindent}[true]{% \setboolean{st@ndardnoindent}{#1}% }% \define@key{stdpage}{linenumbers}[true]{% \setboolean{st@ndardnumbers}{#1}% }% \define@key{stdpage}{hyphen}[true]{% \setboolean{st@ndardhyphen}{#1}% }% \define@key{stdpage}{parskip}[true]{% \setboolean{st@ndardparskip}{#1}% }% \define@key{stdpage}{chars}[60]{% \renewcommand{\zeichenzahl}{#1}% }% \define@key{stdpage}{lines}[30]{% \renewcommand{\zeilenzahl}{#1}% }% \define@key{stdpage}{baselinestretch}[1.25]{% \renewcommand{\baselinestretch}{#1}% }% \define@key{stdpage}{typewriter}[true]{% \setboolean{st@ndardtypewriter}{#1}% }% \end{macrocode} % Die folgenden Zeilen habe ich auch nicht verstanden, sie tun aber ihre % Arbeit wie erhofft, indem sie das Makro |\ProcessOptionsWithKV| anstelle % von |\ProcessOptions| bereitstellen, das dann am Ende zum Einsatz kommt. % \begin{macrocode} \def\ProcessOptionsWithKV#1{% \let\@tempc\relax% \let\stdpage@tempa\@empty% \@for\CurrentOption:=\@classoptionslist\do{% \@ifundefined{KV@#1@\CurrentOption}% {}% {\edef\stdpage@tempa{\stdpage@tempa,\CurrentOption,}}% }% \edef\stdpage@tempa{% \noexpand\setkeys{#1}{% \stdpage@tempa\@ptionlist{\@currname.\@currext}% }% }% \stdpage@tempa% }% % \end{macrocode} % Jetzt kommt die etwas umst\"{a}ndliche Berechnung der L\"{a}ngen, aber % sicher ist sicher \dots % \begin{macrocode} \AtBeginDocument{ \settowidth{\CharsX}{1234567890}% \setlength{\CharsI}{.1\CharsX}% \setlength{\St@ndardLinewidth}{\zeichenzahl\CharsI}% \setlength{\St@ndardTextwidth}{0pt}%\topskip}% \addtolength{\St@ndardTextwidth}{\zeilenzahl\baselineskip}% % \end{macrocode} % Wenn |parskip| gew\"{a}hlt wird, f\"{u}gt stdpage einen Durchschuss % zwischen den Absätzen ein. Nix dehnbar - einfach Schreibmaschine. % \begin{macrocode} \ifthenelse{\boolean{st@ndardparskip}}% {\setlength{\parskip}{\baselineskip}}{} % \end{macrocode} % Dann werden die Werte an das |typearea|-Paket \"{u}bergeben. Dabei % m\"{u}ssen etwa 2,4\,\% abgezogen werden, falls die Blockoption % gew\"{a}hlt wurde, ansonsten sorgt die Stauchung der Wortzwischenr\"{a}ume % f\"{u}r entsprechend weniger Seiten (und das soll ja nicht!). Durch die neuen % fontdimen-Werte bei just=true entfällt dieses Gefrickel. % \begin{macrocode} %%% \ifthenelse{\boolean{st@ndardjust}}% %%% {% \areaset[current]{.976\St@ndardLinewidth}{\St@ndardTextwidth}% %%% }% %%% {% %%% \areaset[current]{\St@ndardLinewidth}{\St@ndardTextwidth}% %%% }% % \end{macrocode} % Auch zu Beginn werden, falls Blocksatz gew\"{u}nscht % wurde, die Interwordspaces flexibel gesetzt, sonst wird auf % Rausatz oder (wenn hyphen=false) Flattersatz gestellt % \begin{macrocode} \ifthenelse{\boolean{st@ndardjust}}% {% \spaceskip=1\CharsI plus 1.5pt minus 0pt }% {% \spaceskip=1\CharsI plus 0pt minus 0pt \ifthenelse{\boolean{st@ndardhyphen}}% {% \setlength{\RaggedRightRightskip}{0em minus .75em} \RaggedRight% }% {% \raggedright% }% }% \ifthenelse{\boolean{st@ndardnoindent}}% {\setlength{\parindent}{0mm}}{}% \ifthenelse{\boolean{st@ndardnumbers}}{% \modulolinenumbers[5]% \linenumbers% \pagewiselinenumbers% }{}% % \end{macrocode} % Die neue (v. 0.6) Option typewriter brät alle Überschriften auf fette Schreibmaschine runter % \begin{macrocode} \ifthenelse{\boolean{st@ndardtypewriter}}% {% \let\sectfont\normalfont \renewcommand{\footnotesize}{\normalsize} \titleformat{\part}{\normalfont\normalsize\bfseries}{\thepart}{1em}{} \titleformat{\chapter}{\normalfont\normalsize\bfseries}{\thechapter}{1em}{} \titleformat{\section}{\normalfont\normalsize\bfseries}{\thesection}{1em}{} \titleformat{\subsection}{\normalfont\normalsize\bfseries}{\thesubsection}{1em}{} \titleformat{\subsubsection}{\normalfont\normalsize\bfseries}{\thesubsubsection}{1em}{} \titleformat{\paragraph}{\normalfont\normalsize\bfseries}{\theparagraph}{1em}{} \titlespacing*{\part}{0pt}{5\baselineskip}{3\baselineskip} \titlespacing*{\chapter}{0pt}{4\baselineskip}{3\baselineskip} \titlespacing*{\section}{0pt}{3\baselineskip}{2\baselineskip} \titlespacing*{\subsection}{0pt}{2\baselineskip}{1\baselineskip} \titlespacing*{\subsubsection}{0pt}{1\baselineskip}{0pt} \titlespacing*{\paragraph}{0pt}{1\baselineskip}{0pt} }{}% % \end{macrocode} % |emergencystretch| sollte mindestens 2em sein, sonst hat man entschieden % zu viele Box-Warnungen. Frenchspacing sollte aktiviert % sein, vergrö{\ss}erter Leerraum passt nicht so recht zu Fix-Fonts. % \begin{macrocode} \frenchspacing \emergencystretch=2em% }% % \end{macrocode} % Hier endet das Argument von |\AtBeginDocument| % \begin{macrocode} \ProcessOptionsWithKV{stdpage} \AtEndOfPackage{% \let\@unprocessedoptions\relax } % \end{macrocode} % % \Finale \endinput%