Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 3

21 Sep '13, 13:04

saputello's gravatar image

saputello
11.1k174365

Hier nun die von mir bereits angedeutete Lösung auf Basis von [`filecontents`][1]: \documentclass{article} \usepackage{selinput} \SelectInputMappings{ adieresis={ä}, germandbls={ß}, } \usepackage{filecontents} \newcounter{extquotes} \newcommand*{\extquotesbasename}{\jobname} \newenvironment*{extquote}{% \stepcounter{extquotes} \aftergroup\inputcurrentextquote \filecontents{\extquotesbasename-\theextquotes.ext}% }{% \endfilecontents } \newcommand*{\inputcurrentextquote}{% \begin{quote} \begin{quote}% Diese Umgebung kann auch durch eine eigene Umgebung ersetzt werden, % wenn das Zitat anders formatiert werden soll, beispielsweise kleiner % gesetzt oder mit einer Überschrift versehen werden soll. \input{\extquotesbasename-\theextquotes.ext}% \end{quote} } \newcounter{extquote} \newcommand*{\inputallextquotes}[1][\extquotesbasename]{% \inputextquotesfromtill[#1]{1}{\value{extquotes}}% } \makeatletter \newcommand*{\inputextquotesfromtill}[3][\extquotesbasename]{% \setcounter{extquote}{#2}% \addtocounter{extquote}{-1}% \@whilenum \value{extquote}<#3\do {% \stepcounter{extquote}% \begin{quote} \begin{quote}% Diese Umgebung kann auch durch eine eigene Umgebung ersetzt werden, % wenn die später geladenen Zitate anders formatiert werden sollen, % beispielsweise kleiner gesetzt oder mit einer Überschrift versehen % werden sollen. \input{#1-\theextquote.ext} \end{quote} }% } \makeatother \usepackage{lipsum} \begin{document} \section{Test} \begin{extquote} \lipsum\relax \end{extquote} \begin{extquote} Auch Fußnoten\footnote{Das ist eine Fußnote} funktionieren hier, genau wie auch \emph{Hervorhebung} und \textbf{fett} oder \begin{verbatim} Verbatim-Umgebungen mit Dingen wie \texttt{\undefined}. \end{verbatim} \end{extquote} \section{Load} \inputallextquotes \end{document} Und wenn man die ganzen ausgelagerten Zitate gerne in einer anderen Datei ebenfalls auf einen Schlag laden will, dann kann man das auch machen, indem man dort dieselben Definitionen verwendet und dann bei `\inputextquotesfromtill` als erstes optionales Argument den gemeinsamen Teil der Dateinamen angibt und als weitere Argumente die Nummern des ersten und des letzten Zitats, das eingebunden werden soll. Trickreich sind daran eigentlich nur zwei Dinge: 1. Die Ausführung von `\inputcurrentextquote` via `\aftergroup` nach dem Ende der `extquotesbasename`-Umgebung. Das ist notwendig, weil man nicht einfach Code nach `\endfilecontents` ausführen kann. Das hat mit der Besonderheit der `filecontents`-Umgebung zu tun. Aus demselben Grund muss auch `\filecontents` und `\endfilecontents` statt `\begin{filecontents}` und `\end{filecontents}` bei der Definition der neuen Umgebung verwendet werden. 3. Die Verwendung der Schleifenanweisung `\@whilenum`, die intern im LaTeX-Kern definiert ist. Diese kann man ggf. auch durch ein Schleifenkonstrukt aus einem Paket wie [`ifthen`][2] ersetzen. [1]: http://www.ctan.org/pkg/filecontents [2]: http://www.ctan.org/pkg/ifthen
Klicke auf Einblenden/Ausblenden von Überarbeitungen 2

20 Sep '13, 16:30

saputello's gravatar image

saputello
11.1k174365

Hier nun die von mir bereits angedeutete Lösung auf Basis von [`filecontents`][1]: \documentclass{article} \usepackage{selinput} \SelectInputMappings{ adieresis={ä}, germandbls={ß}, } \usepackage{filecontents} \newcounter{extquotes} \newcommand*{\extquotesbasename}{\jobname} \newenvironment*{extquote}{% \stepcounter{extquotes} \aftergroup\inputcurrentextquote \filecontents{\extquotesbasename-\theextquotes.ext}% }{% \endfilecontents } \newcommand*{\inputcurrentextquote}{% \begin{quote} \input{\extquotesbasename-\theextquotes.ext}% \end{quote} } \newcounter{extquote} \newcommand*{\inputallextquotes}[1][\extquotesbasename]{% \inputextquotesfromtill[#1]{1}{\value{extquotes}}% } \makeatletter \newcommand*{\inputextquotesfromtill}[3][\extquotesbasename]{% \setcounter{extquote}{#2}% \addtocounter{extquote}{-1}% \@whilenum \value{extquote}<#3\do {% \stepcounter{extquote}% \begin{quote} \input{#1-\theextquote.ext} \end{quote} }% } \makeatother \usepackage{lipsum} \begin{document} \section{Test} \begin{extquote} \lipsum\relax \end{extquote} \begin{extquote} Auch Fußnoten\footnote{Das ist eine Fußnote} funktionieren hier, genau wie auch \emph{Hervorhebung} und \textbf{fett} oder \begin{verbatim} Verbatim-Umgebungen mit Dingen wie \texttt{\undefined}. \end{verbatim} \end{extquote} \section{Load} \inputallextquotes \end{document} Und wenn man die ganzen ausgelagerten Zitate gerne in einer anderen Datei ebenfalls auf einen Schlag laden will, dann kann man das auch machen, indem man dort dieselben Definitionen verwendet und dann bei `\inputallextquotes` oder `\inputextquotesfromtill` als erstes optionales Argument den gemeinsamen Teil der Dateinamen angibt. angibt und als weitere Argumente die Nummern des ersten und des letzten Zitats, das eingebunden werden soll. Trickreich sind daran eigentlich nur zwei Dinge: 1. Die Ausführung von `\inputcurrentextquote` via `\aftergroup` nach dem Ende der `extquotesbasename`-Umgebung. Das ist notwendig, weil man nicht einfach Code nach `\endfilecontents` ausführen kann. Das hat mit der Besonderheit der `filecontents`-Umgebung zu tun. Aus demselben Grund muss auch `\filecontents` und `\endfilecontents` statt `\begin{filecontents}` und `\end{filecontents}` bei der Definition der neuen Umgebung verwendet werden. 3. Die Verwendung der Schleifenanweisung `\@whilenum`, die intern im LaTeX-Kern definiert ist. Diese kann man ggf. auch durch ein Schleifenkonstrukt aus einem Paket wie [`ifthen`][2] ersetzen. [1]: http://www.ctan.org/pkg/filecontents [2]: http://www.ctan.org/pkg/ifthen
Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

20 Sep '13, 14:13

saputello's gravatar image

saputello
11.1k174365