Sie sind hier

KOMAoptions vs. scrpage2

Bild von vatolin

Moin.

Ich habe hier ein Problem mit der Konkurrenz zwischen KOMAoptions und
scrpage2:

===== 8>

Bild von Markus Kohm

scrpage2 ist eines der Pakete, die noch nicht die Entwicklung des KOMA-Script-Kerns erreicht haben. Das bedeutet nicht nur, dass es noch keine \KOMAoptions-Schnittstelle hat. Es bedeutet auch, dass es nicht auf Optionenänderungen nach dem Laden eingerichtet ist. Bezüglich ein- oder doppelseitige betrifft dies allerdings vermutlich nur noch ein oder zwei Stellen. Das könnte ich also eventuell bis zur nächsten Release ändern, obwohl scrpage2 eigentlich keine neuen Features mehr erhalten soll (ich entwerfe schon seit fast zwei Jahren ein Nachfolgepaket).

Allerdings betrifft das dann trotzdem nur Seitenstile, die nach der Optionenänderung definiert werden. Seitenstile so zu definieren, dass man doppelseitige Seitenstile bei einseitiger Einstellung definieren könnte, würde eine tiefgreifende Änderung in scrpage2 bedeuten. Hier würde auf Anwenderebene eher helfen, die entsprechende Definition in eine eigene Datei oder ein eigenes Makro auszulagern und dann nach der Umschaltung nochmals diese Datei einzulesen oder dieses Makro auszuführen. Derzeit genügt auch das nicht, weil beispielsweise \defpagestyle (und darauf basiert jeder mit scrpage2 definierte Seitenstil auch scrheadings und scrempty) bereits beim Laden des Pakets in Abhängigkeit von ein- oder doppelseitig unterschiedlich definiert wird.

Ich verstehe allerdings nicht, warum Du nicht einfach twoside=semi als Option bei \documentclass angeben kannst. Selbst wenn Du eine Wrapper-Klasse um scrlttr2 basteln solltest, dürfte das doch möglich sein.

BTW: Bitte den Hinweis: »Bitte auch daran denken, die Ausgabe des eigenen Beitrags noch einmal zu kontrollieren und ggf. unter Zuhilfenahme der Formatierhinweise zu korrigieren.« beachten und wie in den (auch an vielen anderen Stellen verlinkten) Formatierhinweisen angegeben den <code>-Tag (wahlweise auch mit eckigen Klammern) verwenden!

Bild von Markus Kohm

Das ganze hat mir keine Ruhe gelassen. Zwar war der Aufwand tatsächlich recht hoch, aber ich habe nun tatsächlich diverse Änderungen an scrpage2 vorgenommen. Damit sollte die twoside-Abhängigkeit von scrpage2 von einer Ladezeit-Abhängigkeit zu einer Laufzeit-Abhängigkeit geworden sein. Bei dem Beispiel macht es dann tatsächlich auch keinen Unterschied mehr, welche Variante man verwendet. Wenn Du willst kann ich Dir eine Beta-Version dieser scrpage2-Version per Mail schicken, damit Du testen kannst, ob dieses Problem damit gelöst ist.

BTW: Es sei ausdrücklich darauf hingewiesen, dass sich scrpage2 bei der typearea-Einstellung twoside=semi genau wie bei twoside=true verhält. scrpage2 selbst wertet diese Einstellung nicht aus, sondern kennt – wie alle derartigen Pakete – nur den Schalter \if@twoside des LaTeX-Kerns. Das wird nicht als Bug, sondern als Feature betrachtet!

Bild von vatolin

Bitte schick mir die Beta-Version. Danke. Gruß. Friedrich

Bild von vatolin

Moin.

Ich habe hier das gesamte Problem noch einmal veranschaulicht.

Das folgende Min.-Bsp. ist nicht wirklich minimal. Aber kürzer geht's
wohl nicht, um mein Problem zu verdeutlichen.

Die Aufgabenstellung lautet, eine Möglichkeit zu schaffen, an Briefe
PDF-Anlagen anzuhängen. Dabei soll auch beim Duplex-Ausdruck jeder
Anhang auf einem neuen Blatt beginnen, also auf einer ungeradzahligen
Seite. Die hierzu gegebenenfalls einzufügenden Leerseiten sollen aber
beim Ermitteln der Anzahl der Seiten eines Dokuments nicht mitgezählt
werden.

Das Problem, welches ich nicht in den Griff bekomme, ist, dass auf
geradzahligen Seiten des Briefs nicht die vorgegebene Kopfzeile
erscheint. Lasse ich hingegen die KOMA-Option twoside=semi weg, habe ich
zwar auf allen Seiten des Briefs - mit Ausnahme der Titelseite natürlich
- meine Kopfzeile, aber dann funktioniert der Automatismus nicht, dass
jede Anlage auf einem neuen Blatt beginnt.

Was muss verändert werden, damit die Kopfzeile auf allen Seiten des
Briefs erscheint und der Leerseiten-Automatismus trotzdem funktioniert?

Besten Dank im Voraus fürs Mitknobeln!

Gruß. Friedrich

[Moderator-Edit: Alles bis auf die Dateiliste gelöscht ...]

 *File List*
scrlttr2.cls    2010/02/15 v3.05 KOMA-Script document class (letter)
scrkbase.sty    2010/02/15 v3.05 KOMA-Script package (KOMA-Script-dependent basics and keyval usage)
 scrbase.sty    2010/02/15 v3.05 KOMA-Script package (KOMA-Script-independent basics and keyval usage)
  keyval.sty    1999/03/16 v1.13 key=value parser (DPC)
scrlfile.sty    2009/03/25 v3.03 KOMA-Script package (loading files)
scrsize12pt.clo    2010/02/15 v3.05 KOMA-Script font size class option (12pt)
typearea.sty    2010/02/15 v3.05 KOMA-Script package (type area)
     DIN.lco    2010/02/15 v3.05 KOMA-Script letter-class-option
scrpage2.sty    2010/04/22 v2.5 BETA LaTeX2e KOMA-Script package
pdfpages.sty    2006/08/12 v0.4a Insert pages of external PDF documents (AM)
  ifthen.sty    2001/05/26 v1.1c Standard LaTeX ifthen package (DPC)
graphicx.sty    1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR)
graphics.sty    2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR)
    trig.sty    1999/03/16 v1.09 sin cos tan (DPC)
graphics.cfg    2009/08/28 v1.8 graphics configuration of TeX Live
  pdftex.def    2010/02/14 v0.04n Graphics/color for pdfTeX
    calc.sty    2007/08/22 v4.3 Infix arithmetic (KKT,FJ)
 eso-pic.sty    2009/10/07 v2.0a eso-pic (RN)
atbegshi.sty    2010/03/25 v1.12 At begin shipout hook (HO)
infwarerr.sty    2010/04/08 v1.3 Providing info/warning/message (HO)
 ltxcmds.sty    2010/04/16 v1.6 LaTeX kernel commands for general use (HO)
   ifpdf.sty    2010/01/28 v2.1 Provides the ifpdf switch (HO)
  xcolor.sty    2007/01/21 v2.11 LaTeX color extensions (UK)
   color.cfg    2007/01/18 v1.5 color configuration of teTeX/TeXLive
pppdftex.def    2006/08/12 v0.4a Pdfpages driver for pdfTeX (AM)
zref-abspage.sty    2010/04/23 v2.15 Module abspage for zref (HO)
zref-base.sty    2010/04/23 v2.15 Module base for zref (HO)
kvsetkeys.sty    2010/03/01 v1.9 Key value parser (HO)
etexcmds.sty    2010/01/28 v1.3 Prefix for e-TeX command names (HO)
 auxhook.sty    2009/12/14 v1.2 Hooks for auxiliary files (HO)
supp-pdf.mkii
     EB1.pdf    Graphic file (type pdf)
     EB1.pdf    Graphic file (type pdf)
 ***********
Bild von Markus Kohm

Bitte den letzten Absatz meines ersten Kommentars unbedingt beachten! Wenn die Log-Datei keinen Fehler enthält, solltest Du die außerdem weglassen und Dich ggf. auf die Dateiliste beschränken.

Bild von vatolin

\documentclass{scrlttr2}
%% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
\makeatletter
\RequirePackage{scrpage2, pdfpages, zref-abspage}
%%----------------------------------------------------------------
\pagestyle{scrheadings}
\setkomafont{pagehead}{} 
  \lohead{x}
  \cohead{y}
  \rohead{z}
%% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
\KOMAoptions{twoside=semi}%
%%----------------------------------------------------------------
\newcounter{AbsLetter}
%%----------------------------------------------------------------
\renewcommand*{\theAbsLetter}{letter@\number\value{AbsLetter}}
%%----------------------------------------------------------------
\newcounter{FirstLetterPage}
%%----------------------------------------------------------------
\renewcommand*{\theFirstLetterPage}{\number\value{FirstLetterPage}}
%%----------------------------------------------------------------
\newcommand*{\Debug}[1]{%
%  \typeout{[Debug] #1}%
}
%%----------------------------------------------------------------
\newcommand*{\StartLetterPages}{%
  \stepcounter{AbsLetter}%
  \Debug{\string\StartLetterPages: \theAbsLetter}%
  \setcounter{FirstLetterPage}{\value{abspage}}%
  \Debug{FirstPage (zero-based): \theFirstLetterPage}%
  \let\OrgClearDoublePage\cleardoublepage
  \renewcommand*{\cleardoublepage}{%
   \clearpage
    \addtocounter{FirstLetterPage}{-\value{abspage}}%
   \OrgClearDoublePage
    \addtocounter{FirstLetterPage}{\value{abspage}}%
   \Debug{%
      FirstPage (zero-based) after %
     \string\cleardoublepage: \theFirstLetterPage
   }%
  }%
}
%%----------------------------------------------------------------
\newcommand*{\IncludeAppendixHook}{}
%%----------------------------------------------------------------
\newcommand*{\StopLetterPages}{%
 \IncludeAppendixHook
 \clearpage
 \Debug{AbsPage: \number\value{abspage}}%
 % calculate difference and store in FirstLetterPage
 \setcounter{FirstLetterPage}{-\value{FirstLetterPage}}%
 \addtocounter{FirstLetterPage}{\value{abspage}}%
 \Debug{Pages of \theAbsLetter: \theFirstLetterPage}%
 \zref@wrapper@immediate{%
   % set info for next label
   \edef\@currentlabel{\theFirstLetterPage}%
   \zref@labelbyprops{\theAbsLetter}{default}%
 }%
}
%%----------------------------------------------------------------
\newcommand*{\LetterPages}{%
  \zref@refused{\theAbsLetter}%
  \zref@extractdefault{\theAbsLetter}{default}{0}%
}
%%----------------------------------------------------------------
\AtBeginLetter{\StartLetterPages}
%%----------------------------------------------------------------
\newcommand{\JXanlage}{%
  \l@addto@macro\IncludeAppendixHook{% 
    \cleardoublepage%
    \includepdf[%
      pages={-}
    ]%
    {EB1}%
  }%
}%
%%----------------------------------------------------------------
\AtEndLetter{%
 \ifx\JXenclContent\@empty
 \else
   \encl{xxx}%
 \fi
 \StopLetterPages
}%
%% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
\makeatother
%%================================================================
\listfiles
%%================================================================
\begin{document}
%%----------------------------------------------------------------
\begin{letter}{Max Mustermann}
%
\opening{Sehr geehrter Herr Mustermann,}
%%----------------------------------------------------------------
 
\JXanlage
 
\pagebreak
 
Text
 
\pagebreak
%%----------------------------------------------------------------
\closing{}
%%================================================================
\end{letter}
\end{document}

Wow! Mit Syntax-Hervorhebungen. Das ist ja ein tolles Forum! :-) Gruß. Friedrich

Bild von Markus Kohm

Du solltest den Code nicht erneut senden, sondern Deinen Beitrag korrigieren!!!

Außerdem ist das noch immer kein vollständiges Minimalbeispiel:

! Package pdfpages Error: Cannot find file `EB1'.

See the pdfpages package documentation for explanation.
Type  H   for immediate help.
 ...                                              
                                                  
l.107 \end{letter}
                  
! Undefined control sequence.
\AM@checklast ...pii \\ \@tempcntb =\AM@pagecount 
                                                  \relax \ifAM@DVIoutput \if...
l.107 \end{letter}
                  
! Missing number, treated as zero.
 
                   \relax 
l.107 \end{letter}
                  
)
Runaway argument?
\expandafter \AM@setphantomdoc \AM@doclist ,\END \ifthenelse {\boolean \ETC.
! File ended while scanning use of \AM@gobble.
 
                \par 
 \input testscrlttr2scrpage2.tex
                                   
! Emergency stop.
 \input testscrlttr2scrpage2.tex
                                   
!  ==> Fatal error occurred, no output PDF file produced!
Transcript written on testscrlttr2scrpage2.log.

Außerdem wäre es schön gewesen, wenn Du mal kommentiert hättest, was Du da an Code zusammengebastelt hast. Ich habe nicht die Zeit, erst einmal zwei Stunden damit zu verbringen, irgendwelchen fremden Code zu verstehen.

Warum verwendest Du nicht \usepackage?

Wenn ich Dich recht verstehe, dann willst Du so etwas:

% ACHTUNG: Zu Demozuwecken werden hier zwei angebliche PDF-Dateien
% angelegt. die aber keine PDF-Dateien sind. Deshalb darf das Beispiel nicht
% mit pdflatex, sondern muss mit latex (DVI-Modus) verarbeitet werden!
% Wer stattdessen zwei beliebige PDF-Dateien als anlageA.pdf und anlageB.pdf
% speichert, sollte pdflatex im PDF-Modus verwenden!
 
\begin{filecontents}{anlageA.pdf}
%PDF1.0
\end{filecontents}
\begin{filecontents}{anlageB.pdf}
%PDF1.0
\end{filecontents}
 
\documentclass{scrlttr2}
\usepackage[demo]{graphicx}
\usepackage{scrpage2}
\usepackage{pdfpages}
 
%%----------------------------------------------------------------
\pagestyle{scrheadings}
\setkomafont{pagehead}{} 
\ihead{Seite \thepage}
\chead{von}
\ohead{\theabspage}
%% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
 
\usepackage{filecontents}
\begin{filecontents*}{vatospecial.lco}
%%----------------------------------------------------------------
\newcounter{AbsLetter}% Zähler für die Briefe
 
\newcommand*{\EncList}{}% Speicher für die Anlagenbezeichnungen
\newcommand*{\ProcessAppendixInput}{}% Speicher für die Anhänge
\newcommand*{\AddAppendix}[2][]{%
  \ifx\relax#1\relax
    \l@addto@macro{\EncList}{\\#2}%
  \else
    \l@addto@macro{\EncList}{\\#1}%
  \fi
  \l@addto@macro{\ProcessAppendixInput}{\do{#2}}%
}
 
\AtBeginLetter{%
  \stepcounter{AbsLetter}% Mit jedem neuen Brief den Briefezähler hochsetzen
}
\newcounter{appendixemptypage}
\AtEndLetter{% Am Ende jedes Briefs
  \ifx\EncList\@empty\else\encl{\expandafter\@gobble\EncList}\fi% Anlagen ausgeben
  \setcounter{appendixemptypage}{1}% Zähler für leere Seiten initialisieren
  \clearpage% eigentlichen Brief beenden
  \let\do\AppendixInput% \do wird \AppendixInput
  \ProcessAppendixInput% für jeden Anhang \do ausführen
  \if@filesw
    \addtocounter{page}{-\value{appendixemptypage}}% leere Anhangsseite abziehen
    \immediate\write\@auxout{% \immediate ist hier wichtig!
      \noexpand\setabspage{\theAbsLetter}{\the\value{page}}% Seitenzahl merken
    }%
    \addtocounter{page}{\value{appendixemptypage}}% leere Seiten wieder dazu
  \fi
}
\newcommand*{\setabspage}[2]{%
  \expandafter\gdef\csname abspage@#1\endcsname{#2}% Seitenzahl aus dem letzten Lauf
}
\newcommand*{\theabspage}{%
  \@ifundefined{abspage@\theAbsLetter}{% Wenn keine Seitenzahl bekannt
    \@namedef{abspage@\theAbsLetter}{???}% - Platzhalter verwenden
    \label{abspage@\theAbsLetter}% - rerun-Meldung auslösen
  }{}%
  \@nameuse{abspage@\theAbsLetter}% absolute Seitenzahl ausgeben
}
 
\newcommand*{\AppendixInput}[1]{%
  \newpage
  \ifodd\value{page}\else% egal ob twoside oder nicht: zur nächsten ungeraden
    \null\thispagestyle{empty}\stepcounter{appendixemptypage}\newpage
  \fi
  \includepdf[pages=-]{#1}% Anhang einfügen
}
\endinput
\end{filecontents*}
 
\LoadLetterOption{vatospecial}
 
%%================================================================
\listfiles
%%================================================================
\begin{document}
%%----------------------------------------------------------------
\begin{letter}{Max Mustermann}
%
\opening{Sehr geehrter Herr Mustermann,}
%%----------------------------------------------------------------
 
\AddAppendix[Eine Anlage]{anlageA}
\AddAppendix[Noch eine Anlage]{anlageB}
\AddAppendix[Noch eine Anlage]{anlageB}
 
\pagebreak
 
Text
 
%\pagebreak
%%----------------------------------------------------------------
\closing{}
%%================================================================
\end{letter}
 
\begin{letter}{Max Mustermann}
%
\opening{Sehr geehrter Herr Mustermann,}
%%----------------------------------------------------------------
 
\AddAppendix[Eine Anlage]{anlageA}
\AddAppendix[Noch eine Anlage]{anlageB}
 
\pagebreak
 
Text
 
%\pagebreak
%%----------------------------------------------------------------
\closing{}
%%================================================================
\end{letter}
\end{document}

Ich habe das testweise auch mit \KOMAoptions{twoside=semi} getestet und es funktioniert. In dem Fall wird vor dem zweiten Brief dann korrekt eine weitere Leerseite eingefügt.

Zu Deinem Beispiel ist anzumerken: twoside=semi ist für scrpage2 noch immer ein doppelseitiges Dokument, wenn Du also nur die Köpfe der ungeraden Seite setzt (\lohead etc.), dann sind natürlich auch nur die Köpfe der ungeraden Seiten belegt und nicht die Köpfe der geraden Seiten. Das ist IMO völlig logisch und korrekt!

Bild von vatolin

Moin Markus.

Kann verstehen, dass Du Dich geärgert hast. Bitte entschuldige meine unstrukturierte und chaotische Fragerei. Und vielen Dank für Deine Hilfe!

Ich bin zwar vor lauter Arbeit noch nicht dazu gekommen, Deine Lösung mir zu erarbeiten und anschließend in meine Anwendung einzubauen, um zu sehen, wie sie funktioniert. Aber dass Du Dir die Zeit genommen hat, mir zu helfen ist allein schon aller Ehren und allen Dankes wert.

Gruß. Friedrich

Comments for "KOMAoptions vs. scrpage2" abonnieren