PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : automatische Ausgabe geteilt und zusammen



F22
29-11-2005, 12:39
Hi Leute,

habe schon nach Splitten, aufteilen, teilen gesucht, aber wurde nicht fündig:

Ich habe ein Projekt aus mehreren Kapitteln per Include zusammengesetzt.

Es kommen ständig neue Kapittel hinzu.

Ich möchte die Ausgabe nun folgendermaßen gestallten:

1. Beim Compilieren wird automatisch ein Dokument erzeugt, welches alle Kapittel + Inhaltsverzeichniss erhält. (dies existiert bereits, is ja kein Problem)
2. Beim Compilieren wird automatisch jedes Kapittel als extra Dokument ausgegeben, wobei das Inhaltsverzeichniss des Inhaltes des Lokalen Kapittels enthalten ist, aber mit den globalen Zählern.

Ist sowas umsetzbar oder muss ich jedes extra kompilieren und auf mein Inhaltsverzeichniss verzichten?

Danke

F22

Salnic
01-12-2005, 13:10
Hi F22,

wie sieht es mit den Seitenzahlen aus? Willst Du in Deinen Teildokumenten die gleiche Seitennummerierung wie im Gesamtdokument oder sollen die Teildokumente unabhängig voneinander (und unabhängig vom Gesamtdokument) durchnummeriert werden?

Salnic

F22
04-12-2005, 16:00
Mh,

ne Unabhängige Nummerierung wäre nicht schlecht.

THX

F22

rais
04-12-2005, 23:53
Moin moin,
nu hab ich mal n bissl gebastelt :D
...als Hauptdatei.tex:


\documentclass[12pt,a4paper,german]{scrbook}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{amsmath,amssymb}
\newcommand{\writechapterinfo}[1]{%
\immediate\openout0=\jobname---\thechapter.cci\immediate\write0{#1}\closeout0
}
\newcommand{\myinput}[1]{%
\input{#1}%
\writechapterinfo{#1}%
}
\newcommand{\xc}{Hier steht ein wenig Text, um diese Seite nicht total leer erscheinen zu lassen -- ausserdem ist das dann gleichzeitg viel augenfreundlicher\dots}
\begin{document}
\tableofcontents
\typeout{+++ Remember to process me with chapterslatex;)}
\chapter{Einleitung}
Live Long, and Prosper !
\myinput{testinput}
\myinput{testinput}
\end{document}
Die testinput.tex :


\chapter{Bla}
Bla bla blubb
\section{A}
\subsection{AA}
\subsection{AB}
\section{B}
\subsection{BA}
\subsection{BB}
\section{C}

Damit ich die einzelnen Dateien durchdrehen kann, benötige ich noch eine Rahmendatei, naja, vielmehr den Header...
genannt hab ich das Hauptdatei.xci :

\documentclass[12pt,a4paper,german]{scrbook}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{amsmath,amssymb}
\newcommand{\xc}{Hier steht ein wenig Text, um diese Seite nicht total leer erscheinen zu lassen -- ausserdem ist das dann gleichzeitg viel augenfreundlicher\dots}
\begin{document}
\tableofcontents

Man beachte: KEIN \end{document} !
Kann prinzipiell der gleiche Header wie im Hauptdokument sein - sollte er sogar - muß aber zumindest die in den per \input zu ladenden Dateien auftretenden Befehle zur Verfügung stellen.

Zum Kompilieren nimmste dann das Skript chapterslatex.sh :


#!/bin/bash
# 2005-12-04-rais
# chapterslatex Hauptdokument[.tex] [Rahmendatei]
XDBG=jo #auf "" setzen, damit keine weiteren Meldungen kommen
if [ -z "$1" ]; then
echo "Usage: $0 maindocument[.tex] [inputframe]"
echo "where inputframe consists of the preamble and tableofcontents."
echo "The default is maindocument.xci"
else
FBASE=${1%.tex} #Der Basisname der Hauptdatei
latex ${FBASE}.tex
FFILE=${FBASE}.xci
test ! -z "$2" && FFILE=$2
test -z "$XDBG" || echo "${FBASE}.tex processed. Starting single chapters with ${FFILE} as base."
for I in ${FBASE}---*.cci; do
TFILE=${I%.cci}.tex
test -z "$XDBG" || echo "Copying ${FFILE} base to ${TFILE}..."
cp $FFILE $TFILE #Die Rahmendatei in die Kapiteldatei schreiben
test -z "$XDBG" || echo "Adding chapter counter information to ${TFILE}..."
C=${I%.cci}
C=${C#*---}
echo "\setcounter{chapter}{$C}" >> $TFILE #Kapitelnummer in die Kapiteldatei schreiben
echo "\addtocounter{chapter}{-1}" >> $TFILE #und korrigieren
# hier kann man ggf. den Seitenzaehler entsprechend einbauen - muss dann aber auch im
# Hauptdokument geschehen...
test -z "$XDBG" || echo "Adding chapter inclusion file to ${TFILE}..."
echo "\input{`cat $I`}" >> $TFILE #Hoffentlich die richtige Datei erwischt...
test -z "$XDBG" || echo "Adding End-Document to ${TFILE}..."
echo "\end{document}" >> $TFILE #noch ein Dokumentende
test -z "$XDBG" || echo "Processing ${TFILE} through LaTeX..."
latex $TFILE && latex $TFILE #Kapiteldatei kompilieren
done
# bibtex $FBASE
# makeindex $FBASE.glo -s nomencl.ist -o $FBASE.gls
# oder bei der neueren Form von nomencl: makeindex $FBASE.nlo -s nomencl.ist -o $FBASE.nlo
# makeindex $FBASE.idx -s gind.ist -o $FBASE.ind
test -z "$XDBG" || echo "Processing ${FBASE}.tex through LaTeX again..."
# hier kann selbstverständlich auch pdflatex 2x aufgerufen werden bzw. von dvips/ps2pdf gefolgt werden:
latex $FBASE.tex && latex $FBASE.tex #Hauptdatei zuende kompilieren
test -z "$XDBG" || echo "All done..."
fi

Wenn Du also das Skript in den Ordner kopierst, in dem Deine Hauptdatei verweilt, dann kannst Du - nachdem Du Deine \include (warum eigentlich \include und nicht \input?) durch \myinput{} ersetzt hast und die Kommandos von oben in Deiner Präambel ergänzt hast *und* Du Dir eine entsprechende foo.xci gebaut hast, sollte ein


./chapterslatex.sh foo.tex
eigentlich alle notwendigen Dateien zusammenschrauben;)
Aber probier's erstmal aus, vielleicht isses ja noch nicht ganz so, wie Du Dir das vorgestellt hast...
MfG,

F22
12-12-2005, 12:12
Hi,

danke erstmal.

Ich habs einfach mal, um mir den Output anzuschauen, so wie es ist kopiert.

Aber offenbar besteht die Ausgabe nach wie vor nur aus einem Dokument.

Woran kann das liegen?

Ich hab alle Files in einem Ordner liegen. Das sollter doch auch reichen, damit die chapterslatex.sh "eingebunden" wird, oder?

Gruß

F22

rais
12-12-2005, 17:33
Moin moin,
ja und nein...
alle Dateien in einem Ordner ist ja OK, aber "chapterslatex.sh" wird nicht eingebunden, sondern aufgerufen, also statt 'latex foo.tex' mußt Du './chapterslatex.sh foo.tex' nehmen (hier kannst Du die Endung .tex auch weglassen)
D.h. wenn Du lieber pdf direkt erzeugen willst, dann mußt Du mindestens eine Zeile in der chapterslatex.sh anpassen (ziemlich am Ende des Skripts):


pdflatex $FBASE.tex && pdflatex $FBASE.tex #Hauptdatei zuende kompilieren

sowie weiter oben:


pdflatex $TFILE && pdflatex $TFILE #Kapiteldatei kompilieren

dann wird auch direkt pdf erzeugt - sowohl für die Hauptdatei, als auch für die einzelnen Kapiteldateien (naja, wenn denn jede input-Datei genau ein Kapitel enthält)
MfG,

rais
13-12-2005, 00:07
Moin moin,
so, nun hab' ich die chapterslatex.sh nochmal ein wenig angepaßt:


#!/bin/bash
# 2005-12-12-rais
XDBG=jo #auf "" setzen, damit keine weiteren Meldungen kommen
BM="" #run bibtex, if set
BRK="" #break, if set
NM="" #run makeindex for nomenclature (new form:\printnomenclature), if set
GM="" #run makeindex for nomenclature (older form:\printglossary), if set
MM="" #run makeindex for indexing, if set
LATEXPRG=latex
if [ -z "$1" ]; then
echo "Usage: $0 maindocument[.tex] [-b][-g][-m][-n][-dvi|-pdf][-f inputframe]"
echo "where inputframe consists of the common part for each chapterfile."
echo "The default is maindocument.cci"
echo "-b also run bibtex on main document."
echo "-g also run makeindex for nomenclature - older version with \printglossary - on main document."
echo "-m also run makeindex on main document for indexing."
echo "-n also run makeindex for nomenclature - newer version with \printnomenclature - on main document."
echo "-dvi uses latex for dvi output (default)."
echo "-pdf uses pdflatex for pdf output."
else
FBASE=${1%.tex} #Der Basisname der Hauptdatei
FFILE=${FBASE}.xci
while [ ! -z "$2" ]; do
case $2 in
-b)
BM=1
;;
-DVI | -dvi)
LATEXPRG=latex
;;
-PDF | -pdf)
LATEXPRG=pdflatex
;;
-f)
if [ -z "$3" ]; then
echo "Missing frame file. Aborting."
BRK=1
else
FFILE=$3
shift
fi
;;
-g)
GM=1
;;
-m)
MM=1
;;
*)
echo "Unknown option: $2, ignored."
esac
shift
done
$LATEXPRG ${FBASE}.tex
if [ ! -r $FFILE ]; then
echo "Cannot read $FFILE - aborting."
BRK=2
fi
if [ -z "$BRK"]; then
# test ! -z "$2" && FFILE=$2
test -z "$XDBG" || echo "${FBASE}.tex processed. Starting single chapters with ${FFILE} as base."
for I in ${FBASE}---*.cci; do
TFILE=${I%.cci}.tex
test -z "$XDBG" || echo "Copying ${FFILE} base to ${TFILE}..."
cp $FFILE $TFILE #Die Rahmendatei in die Kapiteldatei schreiben
test -z "$XDBG" || echo "Adding chapter counter information to ${TFILE}..."
C=${I%.cci}
C=${C#*---}
echo "\setcounter{chapter}{$C}" >> $TFILE #Kapitelnummer in die Kapiteldatei schreiben
echo "\addtocounter{chapter}{-1}" >> $TFILE #und korrigieren
# hier kann man ggf. den Seitenzaehler entsprechend einbauen - muss dann aber auch im
# Hauptdokument geschehen...
test -z "$XDBG" || echo "Adding chapter inclusion file to ${TFILE}..."
echo "\input{`cat $I`}" >> $TFILE #Hoffentlich die richtige Datei erwischt...
test -z "$XDBG" || echo "Adding End-Document to ${TFILE}..."
echo "\end{document}" >> $TFILE #noch ein Dokumentende
test -z "$XDBG" || echo "Processing ${TFILE} through LaTeX..."
$LATEXPRG $TFILE && $LATEXPRG $TFILE #Kapiteldatei kompilieren
done
test -z "$BM" || bibtex $FBASE
test -z "$GM" || makeindex $FBASE.glo -s nomencl.ist -o $FBASE.gls
test -z "$NM" || makeindex $FBASE.nlo -s nomencl.ist -o $FBASE.nlo
test -z "$MM" || makeindex $FBASE.idx -s gind.ist -o $FBASE.ind
test -z "$XDBG" || echo "Processing ${FBASE}.tex through LaTeX again..."
# hier kann selbstverstaendlich auch pdflatex 2x aufgerufen werden bzw. von dvips/ps2pdf gefolgt werden:
$LATEXPRG $FBASE.tex && $LATEXPRG $FBASE.tex #Hauptdatei zuende kompilieren
test -z "$XDBG" || echo "All done..."
else
echo "Something was wrong. Please check previous output [$BRK]."
fi
fi

damit kannst Du jetzt auch zwischen latex/pdflatex wählen, oder bibtex/makeindex aufrufen...;)
also z.B. ein


./chapterslatex.sh foo -b -m -n -pdf

erzeugt nicht nur PDF (Haupt- und Kapiteldokumente), sondern läßt außerdem bibtex auf Dein Hauptdokument los (-b), erstellt eine Indexdatei (-m) und auch eine Nomenklatur (-n) -- die letzteren allerdings nur auf das Hauptdokument bezogen, sonst müsste ich mir erst die Einzeldateien durchsehen, ob entsprechende Befehle drin auftauchen, aber sooo weit wollte ich das Skript nu nicht aufblähen;)
MfG,