Seiteninhalt ersetzen durch Leerseiten mit Bemerkung
Seiteninhalt ersetzen durch Leerseiten mit Bemerkung
Hallo zusammen,
ich schreibe gerade an einer Klasse für Dissertationen, die umbruchsidentisch sowohl online als auch in gedruckter Version veröffentlicht werden müssen.
Allerdings dürfen/können manche Stellen in der Online-Variante abweichen, z.B. dürfen Danksagung oder Lebenslauf durch eine Bemerkung "in der Onlineversion wurde aus Datenschutzgründen der Lebenslauf entfernt." ersetzt werden, die auf jeder der im Original damit bedruckten Seite erscheinen muss. Da im Voraus nicht klar ist, wie viele Seiten mit der Bemerkung eingefügt werden müssen, wäre es natürlich schön, wenn man das in der Klasse automatisch ermitteln kann.
Leider habe ich bisher keine Möglichkeit gefunden, die Länge des nicht zu setzenden Textes zu ermitteln und eine entsprechende Anzahl an Seiten mit der Bemerkung einzufügen. Hat hier vielleicht jemand eine Idee, wie man das lösen kann?
Ein paar Zusatzinfos:
Die Klasse basiert auf scrbook, der "auszublendende" Text kann nahezu beliebige Dinge (insbesondere auch Tabellen oder ggf. sogar ein Biblatex-Literaturverzeichnis) enthalten, sicherlich wird er mehrere Absätze lang sein.
Ein einfaches Setzen der Schrift auf transparent oder weiß kommt nicht in Frage (Datenschutz), da dann der Text ja dennoch in der PDF enthalten ist.
Ich hoffe es hat jemand eine Idee.
Danke vorab für die Hilfe und viele Grüße,
Michael
ich schreibe gerade an einer Klasse für Dissertationen, die umbruchsidentisch sowohl online als auch in gedruckter Version veröffentlicht werden müssen.
Allerdings dürfen/können manche Stellen in der Online-Variante abweichen, z.B. dürfen Danksagung oder Lebenslauf durch eine Bemerkung "in der Onlineversion wurde aus Datenschutzgründen der Lebenslauf entfernt." ersetzt werden, die auf jeder der im Original damit bedruckten Seite erscheinen muss. Da im Voraus nicht klar ist, wie viele Seiten mit der Bemerkung eingefügt werden müssen, wäre es natürlich schön, wenn man das in der Klasse automatisch ermitteln kann.
Leider habe ich bisher keine Möglichkeit gefunden, die Länge des nicht zu setzenden Textes zu ermitteln und eine entsprechende Anzahl an Seiten mit der Bemerkung einzufügen. Hat hier vielleicht jemand eine Idee, wie man das lösen kann?
Ein paar Zusatzinfos:
Die Klasse basiert auf scrbook, der "auszublendende" Text kann nahezu beliebige Dinge (insbesondere auch Tabellen oder ggf. sogar ein Biblatex-Literaturverzeichnis) enthalten, sicherlich wird er mehrere Absätze lang sein.
Ein einfaches Setzen der Schrift auf transparent oder weiß kommt nicht in Frage (Datenschutz), da dann der Text ja dennoch in der PDF enthalten ist.
Ich hoffe es hat jemand eine Idee.
Danke vorab für die Hilfe und viele Grüße,
Michael
Wenn für die Teile, die in der Online-Fassung nicht gedruckt werden sollen, eigene Dateien, die mit \include geladen werden, verwendet werden können, dann könnte man theoretisch für den Online-Fassung \nofiles setzen, damit diese die aux-Dateien der Papierfassung nicht überschreibt und dann die Seitenzähler-Informationen aus den aux-Dateien der \include-Dateien verwenden. Oder man mach das einfach so:
Jetzt machst Du erst mal zwei LaTeX-Läufe, dann kommentierst Du die Zeile aus und machst noch einen LaTeX-Lauf.
Und ja, das kann so nur für komplette Seiten funktionieren.
\documentclass{scrbook} \usepackage{refcount} \newif\ifPaperPage \PaperPagetrue% deaktivieren für den letzten LaTeX-Lauf der Online-Fassung \newcounter{PaperPage} \newcounter{TillPage} \makeatletter \newcommand{\PaperPage}[2][Diese Seite wurde in der Onlinefassung aus Datenschutzgr\"unden entfernt.]{% \clearpage \stepcounter{PaperPage}% \ifPaperPage #2% \else \ifnum \getpagerefnumber{paperpage.\thePaperPage}<1 \errormsg{You have to do LaTeX runs with \string\PaperPagetrue\space first!}% \else \@whilenum \value{page}<\getpagerefnumber{paperpage.\thePaperPage} \do {\vspace*{\fill}\begin{center}\thispagestyle{empty} #1\end{center}\vfill\clearpage}% \fi \fi \clearpage \label{paperpage.\thePaperPage}\ignorespaces } \usepackage{lipsum} \begin{document} \chapter{Vor den Auslassungsseiten} \lipsum \PaperPage{% \addchap{Auf den Auslassungsseiten} \lipsum } \chapter{Nach den Auslassungsseiten} \lipsum \end{document}
\PaperPagetrue% deaktivieren für den letzten LaTeX-Lauf der Online-Fassung
Und ja, das kann so nur für komplette Seiten funktionieren.
PS: Wenn Du noch irgendwo nach \PaperPagetrue einfügst, bleiben sogar Inhaltsverzeichnis und Querverweise erhalten, nachdem \PaperPagetrue deaktiviert wurde, falls die \PaperPage-Seiten Überschriften mit Eintrag ins Inhaltsverzeichnis oder \label-Anweitungen enthalten. Links gehen allerdings ggf. ins Leere.
\ifPaperPage\else\nofiles\fi
Vielen Dank für die schnelle Antwort.
Leider wird das vermutlich so (zumindest direkt) nicht funktionieren aus folgenden Gründen:
- Die Klasse ist nicht für mich selbst, sondern für andere, und einige benutzen Editoren mit integrierten LaTeX-Compiler-Aufrufen, wie PDF-Texify, bei denen am Ende die Aux-Files gelöscht werden... (okay, das könnte man denen abgewöhnen). Ich fürchte da aber jede Menge "Hilfe das funktioniert nicht"-Anfragen zu bekommen, weil da irgendwas mit der Reihenfolge o.ä. schief geht, was ich vermeiden möchte.
- Ich kann nur sehr schwer bis gar nicht alle Stellen jeweils in eine eigene Datei auslagern und mit Include einfügen, da teilweise der Inhalt vom Nutzer kommt, Teile (wie z.B. der \chapter*-Befehl für die nicht nummerierte Überschrift) aber in Abhängigkeit bestimmter Klassenoptionen oder anderer Dinge gesetzt werden.
Vielleicht mal noch ein paar Ideen, die ich hatte, aber die zumindest mit meinen Überlegungen nicht bis zum Ziel geführt haben, evtl. kommt damit ja noch jemand weiter:
1) Bedingtes Setzen des Satzes "... wurde ... entfernt" für Online-Version auf den Seitenhintergrund (evtl. Wasserzeichen) und dann versuchen, etwas zu setzen, was genauso viel Platz braucht wie der eigene Text. Hier hatte ich mir auch das censor Paket angeschaut, ich müsste ja nur die Blöcke statt schwarz transparent setzen, aber leider funktioniert das soweit ich das gesehen habe nicht mit einem Befehl, der um den beliebigen Inhalt des Nutzers herum gestülpt wird, da z.B. auch Tabellen für den Lebenslauf oder die Ausgabe von bibitems durch Biblatex enthalten sein können.
2) Erstellen der Seiten mit dem wegzulassenden Text in einem externen Dokument (ähnlich externalize bei TikZ, dann muss man den Leuten halt die write18-Option klarmachen), muss ggf. mehrfach hinereinander geschehen, damit alles passt, aus dem Endergebnis irgendwie (aber wie???) die Seitenzahl ermitteln, die externen Dateien alle wieder löschen (wie? muss unter Windows und Linux laufen) und mit der jetzt bekannten Seitenzahl im eigentlichen Dokument fortfahren.
Wie gesagt, ich bin damit nicht zum Ziel gekommen...
Danke und Grüße,
Michael
Leider wird das vermutlich so (zumindest direkt) nicht funktionieren aus folgenden Gründen:
- Die Klasse ist nicht für mich selbst, sondern für andere, und einige benutzen Editoren mit integrierten LaTeX-Compiler-Aufrufen, wie PDF-Texify, bei denen am Ende die Aux-Files gelöscht werden... (okay, das könnte man denen abgewöhnen). Ich fürchte da aber jede Menge "Hilfe das funktioniert nicht"-Anfragen zu bekommen, weil da irgendwas mit der Reihenfolge o.ä. schief geht, was ich vermeiden möchte.
- Ich kann nur sehr schwer bis gar nicht alle Stellen jeweils in eine eigene Datei auslagern und mit Include einfügen, da teilweise der Inhalt vom Nutzer kommt, Teile (wie z.B. der \chapter*-Befehl für die nicht nummerierte Überschrift) aber in Abhängigkeit bestimmter Klassenoptionen oder anderer Dinge gesetzt werden.
Vielleicht mal noch ein paar Ideen, die ich hatte, aber die zumindest mit meinen Überlegungen nicht bis zum Ziel geführt haben, evtl. kommt damit ja noch jemand weiter:
1) Bedingtes Setzen des Satzes "... wurde ... entfernt" für Online-Version auf den Seitenhintergrund (evtl. Wasserzeichen) und dann versuchen, etwas zu setzen, was genauso viel Platz braucht wie der eigene Text. Hier hatte ich mir auch das censor Paket angeschaut, ich müsste ja nur die Blöcke statt schwarz transparent setzen, aber leider funktioniert das soweit ich das gesehen habe nicht mit einem Befehl, der um den beliebigen Inhalt des Nutzers herum gestülpt wird, da z.B. auch Tabellen für den Lebenslauf oder die Ausgabe von bibitems durch Biblatex enthalten sein können.
2) Erstellen der Seiten mit dem wegzulassenden Text in einem externen Dokument (ähnlich externalize bei TikZ, dann muss man den Leuten halt die write18-Option klarmachen), muss ggf. mehrfach hinereinander geschehen, damit alles passt, aus dem Endergebnis irgendwie (aber wie???) die Seitenzahl ermitteln, die externen Dateien alle wieder löschen (wie? muss unter Windows und Linux laufen) und mit der jetzt bekannten Seitenzahl im eigentlichen Dokument fortfahren.
Wie gesagt, ich bin damit nicht zum Ziel gekommen...
Danke und Grüße,
Michael
Wenn das für beliebige Inhalte über Seitengrenzen hinweg zuverlässig funktionieren soll, kann ich Dir jetzt schon sagen: Vergiss es. Aber bist Du sicher, dass für die Online-Version der Umbruch überhaupt gleich sein muss? Wenn nicht, würde nämlich bereits etwas wie das comment-Paket ausreichen.
Der Status komplex ist übrigens falsch. Das Problem ist eigentlich ganz einfach, die Lösung jedoch nicht.
Der Status komplex ist übrigens falsch. Das Problem ist eigentlich ganz einfach, die Lösung jedoch nicht.
Die Lösung
Tut mir leid, meinem Vorredner widersprechen zu müssen, aber ich habe eine Lösung gefunden, die bei mir aktuell problemlos funktioniert
. Allerdings konnte ich noch nicht all zu viele Varianten testen, vielleicht kommt ja noch der Rückschlag
. Die Umbruchsgleichheit bedeutet im Übrigen laut Promotionsordnugn identische Anzahl an Seiten, da lässt sich nichts machen.
Heute Nacht kam mir die Lösung, habe sie eben getestet, zumindest für normalen Text klappt es: Man benötigt das Paket "atbegshi", eine Boolsche Variable und (in meinem Fall) noch eine Variable für den Ersatztext (im Folgenden habe ich auch das Paket "ifthen" verwendet). Dann kann man die ShipoutBox für jede Seite bei bedarf manipulieren:
Und an der betreffenden Stelle, wenn der Text nicht ausgegeben werden soll, dafür folgenden Code:


Heute Nacht kam mir die Lösung, habe sie eben getestet, zumindest für normalen Text klappt es: Man benötigt das Paket "atbegshi", eine Boolsche Variable und (in meinem Fall) noch eine Variable für den Ersatztext (im Folgenden habe ich auch das Paket "ifthen" verwendet). Dann kann man die ShipoutBox für jede Seite bei bedarf manipulieren:
\newboolean{supresspagecontent} \setboolean{supresspagecontent}{false} \newcommand{\@supresspagecontentnotice}{\relax} \AtBeginShipout{% \ifthenelse{\boolean{supresspagecontent}}{% \setbox\AtBeginShipoutBox=\hbox{\ } %setze leeren Text statt des ursprünglichen Seiteninhalts \AtBeginShipoutAddToBox{% \begin{minipage}{\textwidth}% \centering% \@supresspagecontentnotice% \end{minipage}% }% }% {\relax}% }
Und an der betreffenden Stelle, wenn der Text nicht ausgegeben werden soll, dafür folgenden Code:
{% der, Fall, es soll der Ersatztext ausgegeben werden. \renewcommand{\@supresspagecontentnotice}{\rmfamily\normalsize Die Danksagung wurde aus Gründen des Datenschutzes in der Online-Version entfernt.\\[10pt]% The acknowledgment was removed in the online version for privacy reasons.}% \setboolean{supresspagecontent}{true} \chapter*{#2} \pagestyle{scrplain} #3 \newpage \renewcommand{\@supresspagecontentnotice}{\relax}% \setboolean{supresspagecontent}{false}
Michael hat dich in die Irre geführt: Er will nicht beliebigen Inhalt sondern immer nur ganze Seiten ersetzen, und das ist ja ziemlich trivial, weil man dann nur die Box beim \shipout ändern muss.Noch so einer hat geschrieben:Kannst Du das mal an einem vollständigen Beispiel zeigen. Mir ist nämlich absolut nicht klar, wie dabei der Inhalt selbst nicht aber stattdessen Freiraum in genau der richtigen Größe ausgegeben wird.
Ulrike Fischer
www.troubleshooting-tex.de
www.troubleshooting-tex.de
Hallo nochmal, hallo Ulrike,
das mit den ganzen Seiten steht im Titel sowie in meiner Anfrage, sorry dass das nicht gut genug rauskam. Es ging natürlich immer nur um das ersetzen ganzer Seiten, allerdings eben unabhängig davon, wie der konkrete Inhalt der Seite aufgebaut ist (Text, floats, Gleichungen,...).
Und Ulrike hat mir Ihrer Antwort natürlich vollkommen recht.
Anstatt den Ersatztext mit "\AtBeginShipoutAddToBox" dem Hintergund hinzuzufügen, hätte ich vermutlich (oder?) auch gleich den entsprechenden Text in die ShipoutBox schreiben können...
@Ulrike: Hat eines der Vorgehen Vor-/Nachteile? Ist das erste Mal, dass ich an den Boxen herummanipuliere...
Im Beispiel oben wird der Text auf Höhe der Kopfzeile gesetzt, was ich persönlich für die Bemerkung gut finde, Mitte der Seite wäre sicherlich aber auch eine Alternative.
Danke und Grüße,
Michael
das mit den ganzen Seiten steht im Titel sowie in meiner Anfrage, sorry dass das nicht gut genug rauskam. Es ging natürlich immer nur um das ersetzen ganzer Seiten, allerdings eben unabhängig davon, wie der konkrete Inhalt der Seite aufgebaut ist (Text, floats, Gleichungen,...).
Und Ulrike hat mir Ihrer Antwort natürlich vollkommen recht.
Anstatt den Ersatztext mit "\AtBeginShipoutAddToBox" dem Hintergund hinzuzufügen, hätte ich vermutlich (oder?) auch gleich den entsprechenden Text in die ShipoutBox schreiben können...
@Ulrike: Hat eines der Vorgehen Vor-/Nachteile? Ist das erste Mal, dass ich an den Boxen herummanipuliere...
Im Beispiel oben wird der Text auf Höhe der Kopfzeile gesetzt, was ich persönlich für die Bemerkung gut finde, Mitte der Seite wäre sicherlich aber auch eine Alternative.
Danke und Grüße,
Michael