PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Teile in Text und externe Datei schreiben



rafael
07-02-2011, 13:41
Um zu einem Vortrag ein ahndout mit wichtigen Überschriften, Zitaten usw. zu erstellen, möchte ich aus dem Text gewisse Daten in eine "handout.txt" schreiben, die am Ende zu einem Handout zusammengesetzt werden.

Ein ähnliches Problem findet sich in Latex-hacks von Anselm Lingnau (http://books.google.de/books?id=MPQvrjGGJWIC&pg=PA42&lpg=PA42&dq=anselm+lingau+l%C3%B6sungen&source=bl&ots=akLvbgCcez&sig=yPUtQImpllQzJQzLGRPcgh3vSAc&hl=de&ei=eudPTfbqOcuSswaKl5zDAg&sa=X&oi=book_result&ct=result&resnum=1&ved=0CBoQ6AEwAA#v=onepage&q&f=false)

Das Problem besteht allerdings, dass die Daten sowohl in den Fließtext als auch in die externe Datei geschrieben werden sollen.
Mit "Environ" habe ich das Problem nicht auf Anhieb lösen können.
Hier mal ein nicht lauffähiges Beispiel:

\documentclass{scrartcl}

%\RequirePackage{environ}%damit funktionierte es auch nicht
\RequirePackage{verbatim}
\makeatletter
\newwrite\hand@out
\immediate\openout\hand@out=handout.txt

\newenvironment{handoutwrite}[1]%
{ \@bsphack
\let\do\@makeother\dospecials\catcode`\^^M\active
\def\verbatim@processline{%
\immediate\write\hand@out{\the\verbatim@line}}%
\immediate\write\hand@out{\string \begin{handouting}}%
\verbatim@start}%
{\immediate\write\hand@out{\end{handouting}}\@esph ack}

\newcommand*{\includehandout}{%
\immediate\closeout\hand@out
\cleardoublepage
\InputIfFileExists{handout.txt}
}
\makeatother
%%%anwendung im Text
\newcommand{\myquote}[1]{%
%%%im Text
\begin{quotation}#1\end{quotation}
%%%%externe Datei
\begin{handoutwrite}\begin{quotation}#1\end{quotat ion}\end{handoutwrite}
}

\begin{document}

jetzt kommt ein Zitat, welches später auch auf dem Handout stehen soll:
\myquote{Dies ist ein Testzitat}

\includehandout
\end{document}

Schweinebacke
07-02-2011, 14:44
Ich bin mir nicht sicher, ob Dich richtig verstehe:
\documentclass{article}
\makeatletter
\newwrite\handoutfile
\makeatletter
\newcommand{\handandyet}[1]{%
\def\@tohandout{#1}\@tohandout
\@onelevel@sanitize\@tohandout
\write\handoutfile{\string\item}%
\expandafter\write\expandafter\handoutfile\expanda fter{\@tohandout}%
}
\makeatother
\AtBeginDocument{%
\openout\handoutfile handout.tex
\write\handoutfile{\string\documentclass{article}
\string\begin{document}
\string\begin{enumerate}
}%
\AtEndDocument{%
\write\handoutfile{\string\end{enumerate}
\string\end{document}
}%
}%
}

\begin{document}
Was auch immer: \begin{quote}\handandyet{Ein Zitat.}\end{quote}

Und etwas komplizierter: \handandyet{Siehe Abbildung~\ref{fig:test}
\begin{figure}\caption{test}\label{fig:test}\end{f igure}}

\end{document}

rafael
08-02-2011, 13:27
Danke, das sieht schon mal gut aus, ist aber noch nicht genau das was ich wollte.

(1) Eine Präambel braucht in handout.tex nicht geschrieben werden, aber das ist nicht das Problem
(2) super wäre noch, wenn bestimmte Zähler (zum Beispiel die von sections) fest in handout geschrieben werden, damit die Zählung mit dem Hauptdokument übereinstimmt
z.B. das \mysection{Titel} im Dokument als \section{Titel} ausgeführt werden, in der handoutdatei aber so etwas wie \mysection[1]{Titel}, wobei im optionalen Argument gleich der Zähler section eingeschrieben wird.

Danke für die Mühe

Schweinebacke
08-02-2011, 17:25
Du kannst in die handout-Datei reinschreiben, was immer Du willst:
\documentclass{article}
\makeatletter
\newwrite\handoutfile
\makeatletter
\newcommand{\handandyet}[1]{%
\def\@tohandout{#1}\@tohandout
\@onelevel@sanitize\@tohandout
% \write\handoutfile{\string\item}%
\expandafter\write\expandafter\handoutfile\expanda fter{\@tohandout\par}%
}
\newcommand{\handonly}[1]{%
\protected@write\handoutfile{}{#1}%
}
\makeatother
\AtBeginDocument{%
\openout\handoutfile handout.tex
% \write\handoutfile{\string\documentclass{article}
% \string\begin{document}
% \string\begin{enumerate}
% }%
% \AtEndDocument{%
% \write\handoutfile{\string\end{enumerate}
% \string\end{document}
% }%
% }%
}

\begin{document}
\section{Erster Abschnitt}
Was auch immer: \begin{quote}\handandyet{Ein Zitat.}\end{quote}

Und etwas komplizierter: \handandyet{Siehe Abbildung~\ref{fig:test}
\begin{figure}\caption{test}\label{fig:test}\end{f igure}}
\section{Zweiter Abschnitt}
\handonly{\protect\setcounter{section}{\the\value{ section}}%
\protect\section{Zweiter Abschnitt}}

\end{document}
Natürlich kannst Du die drei Zeilen für den zweiten Abschnitt auch in ein \mysection verpacken, wenn Du das willst.

rafael
09-08-2011, 10:57
Danke. das ist sehr brauchbar.

Wer sich für ähnliche Dinge interessiert, sollte vielleicht noch eine andere Idee in Betracht ziehen:
Mithilfe des tocbasic Pakets kann man derartige Verzeichnisse besser erzeugen


\documentclass[listof=leveldown]{scrreprt}

\begin{filecontents}{handout.sty}
%%%das schöne handout mit tocbasic
\usepackage{xifthen,tocbasic}
\DeclareNewTOC[%
type=handout,%
types=handouts,%
nonfloat,%
name=Handout,%
floatpos=ht,%
listname={Handout},%
owner=handout.sty
]{handout}

%%%%%Gliederungen umdefinieren
%%todo: tocdepth

\newcommand{\myquote}[2][]{%#1Schlagwort#2INhalt
\begin{handout-}
\addtoeachtocfile[handout.sty]{\protect\begin{description}\protect\item[{T\the\value{handout}\ These}]#2\protect\end{description}}
\begin{quotation}#2\end{quotation}
\label{Zitat1}
\end{handout-}
}
\usepackage{blindtext}
%%%%%%%%%%%%%%%%%%%%%%%%
\end{filecontents}

\usepackage{handout}
\begin{document}
\listofhandouts

\tableofcontents

\clearpage
\section{section}

\myquote[Ein Zitat zur Demonstration]{ein Text aus dem Zitat}inder \blindtext}
\end{document}
Mann müsste nun nur noch die Gliederungs mit in das handout aufnehmen, was ja nicht weiter schwierig ist