latexdiff für mehrere TeX-Files

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


Sluzalek
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Di 15. Mär 2011, 09:33

latexdiff für mehrere TeX-Files

Beitrag von Sluzalek »

Hallo zusammen,

ich schreibe derzeit an meiner Diplomarbeit und verwende dazu TeXnicCenter sowie MiKTeX auf Windows7 bzw auch WindowsXP. Jetzt möchte mein Betreuer bei einer Korrekturlesung nicht immer die ganze Arbeit lesen, sondern nur die Änderungen.

Um Änderungen hervorzuheben gibt es das Tool latexdiff. Jetzt mein Problem:

Meine Arbeit ist so aufgebaut, dass mehrere TeX-Files ineinander verschachtelt sind, siehe Minimalbeispiel:
%Diese Datei soll jetzt Minimalbeispiel.tex heißen

\usepackage{hierstehenvielevielepackages}

\begin{document}

 \include {Titelseite}
 \include {TeX-File1}
 \include {TeX-File2}
 \include {TeX-File3}
 \include {TeX-File4}


  \begin{appendix} %Anhang
    \include{Anhang}           
    \include {formelzeichen} 
 	
 		
    \bibliography{Literatur} 
  \end{appendix}


\end{document}
Wenn ich latexdiff richtig verwendet habe, beachtet es nicht, dass ich die Verschachtelungen habe. Es sieht nur die Änderungen von Minimalbeispiel.tex nicht aber die eigentlichen Änderungen der Dateien TeX-File1.tex etc.

Jetzt gibt es meiner Meinung nach drei Möglichkeiten mein Problem zu lösen:

Lösung1 (optimal): Gibt es eine Möglichkeit, dass latexdiff die Befehle include und input berücksichtigt?
Lösung2 (gut): Gibt es eine Möglichkeit, dass aus den einzelnen TeX-Files EINE TeX-File erstellt wird, die latexdiff dann verwenden kann? Konkrekt sähe das so aus, dass der Inhalt aus TeX-File1.tex und TeX-File2.tex herausgelesen und in eine neue TeX-File (MinimalbeispielNEU.tex) geschrieben wird. Diese neue TeX-File (MinimalbeispielNEU.tex) kann dann mit latexdiff bearbeitet werden.
Lösung3 (nicht so gut): Ich habe bereits versucht die Dateien von Hand ineinander zu kopieren (analog zu Lösung 2, aber eben von Hand). Das hat leider nicht geklappt, ich erhalte den Fehler "TeX capacity exceeded, sorry [input stack size=5000]" sowie diverse andere Fehler auf die ich im Moment nicht eingehe, weil ich hoffe, dass jemand Lösung1 oder Lösung2 für mich parat hat. Lösung3 sehe ich als Notlösung an, da ich nicht nur einmal einen Zwischenbericht abgeben soll, sondern einmal im Monat. Außerdem habe ich Lösung3 schon versucht und bin daran gescheitert.

Ich danke euch für eure Zeit und euren Rat.

Beste Grüße
Robin

PS: Es ist mein erster LaTeX-Beitrag, für Kritik bei zukünftigen Beiträgen bin ich dankbar.

Benutzeravatar
nfa019
Forum-Century
Forum-Century
Beiträge: 115
Registriert: Mi 2. Jun 2010, 22:32

Beitrag von nfa019 »

Ich kenne latexdiff nicht, habe aber eben die Doku gelesen, hast du mal die Option --flatten ausprobiert, die verspricht sowas wie deine Lösung 1

Frauke

Sluzalek
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Di 15. Mär 2011, 09:33

Beitrag von Sluzalek »

Hallo Frauke,

flatten habe ich noch nicht ausprobiert. Ich probiere es spätestens morgen Abend aus und schreibe dann ein feedback in das Forum.
Zwei Anmerkungen vorab, die Doku sagt:
a. include/input innerhalb eingefügter teX-Dateien werden nicht gezählt, es sind also keine Rekursionen möglich.
b. die flatten-option wird nicht empfohlen.

Danke schonmal für deine Antwort.
Beste Grüße
Robin

Sluzalek
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Di 15. Mär 2011, 09:33

Beitrag von Sluzalek »

Hallo,

also wie versprochen mein feedback:

Es wird mit der --flatten Funktion eine TeX Datei erstellt, der Teil hat geklappt.
Wenn ich die erstellte TeX-Datei aber "builde" (LaTeX => PDF), erhalte ich 11 Fehler. Diese entsprechen den Fehlern die ich bei Lösung3 erhalte, ich denke, dass es also nicht an der --flatten Funktion liegt, sondern dass das Problem wo anders liegt.
%Die Fehler beginnen ab hier, den Teil vorher habe ich ausgespart.

Kapitel 1.
Runaway argument?
! Paragraph ended before \let was complete.
<to be read again> 
                   \par 
l.65 ...gin \newpage \chapter{\DIFadd{Einleitung}}
                                                  
I suspect you've forgotten a `}', causing me to apply this
control sequence to too much text. How can we recover?
My plan is to forget the whole thing and hope for the best.

! Undefined control sequence.
\UL@on ...\let \hskip \UL@hskip \let \par \UL@par 
                                                  \let \\\UL@cr \let \-\UL@d...
l.65 ...gin \newpage \chapter{\DIFadd{Einleitung}}
                                                  
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Argument of \UL@word has an extra }.
<inserted text> 
                \par 
l.65 ...gin \newpage \chapter{\DIFadd{Einleitung}}
                                                  
I've run across a `}' that doesn't seem to match anything.
For example, `\def\a#1{...}' and `\a}' would produce
this error. If you simply proceed now, the `\par' that
I've just inserted will cause me to report a runaway
argument that might be the root of the problem. But if
your `}' was spurious, just type `2' and it will go away.

Runaway argument?
\@empty 
! Paragraph ended before \UL@word was complete.
<to be read again> 
                   \par 
l.65 ...gin \newpage \chapter{\DIFadd{Einleitung}}
                                                  
I suspect you've forgotten a `}', causing me to apply this
control sequence to too much text. How can we recover?
My plan is to forget the whole thing and hope for the best.

Runaway argument?
|\@empty \protect {\protect \protect \<>-\@ifnextchar {blue}\protect \ETC.
! Paragraph ended before \HyPsd@@ProtectSpacesFi was complete.
<to be read again> 
                   \par 
l.65 ...gin \newpage \chapter{\DIFadd{Einleitung}}
                                                  
I suspect you've forgotten a `}', causing me to apply this
control sequence to too much text. How can we recover?
My plan is to forget the whole thing and hope for the best.

! Undefined control sequence.
\Hy@tempa ...\UL@skip \tw@ \UL@pixel \UL@leadtype 
                                                  \LA@hskip \UL@skip \LA@hsk...
l.65 ...gin \newpage \chapter{\DIFadd{Einleitung}}
                                                  
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
\Hy@tempa ...nskip \unskip \<let>-command \UL@vad 
                                                  \vadjust \<>-\new@ifnextch...
l.65 ...gin \newpage \chapter{\DIFadd{Einleitung}}
                                                  
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
\Hy@tempa ...\UL@vad \vadjust \<>-\new@ifnextchar 
                                                  \<let>-command \-\global \...
l.65 ...gin \newpage \chapter{\DIFadd{Einleitung}}
                                                  
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! Undefined control sequence.
\Hy@tempa ...\UL@skip \tw@ \UL@pixel \UL@leadtype 
                                                  \LA@hskip \UL@skip \LA@hsk...
l.65 ...gin \newpage \chapter{\DIFadd{Einleitung}}
                                                  
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.

! TeX capacity exceeded, sorry [input stack size=5000].
\-->\discretionary {-}{}
                        {}
l.65 ...gin \newpage \chapter{\DIFadd{Einleitung}}
                                                  
If you really absolutely need more capacity,
you can ask a wizard to enlarge me.

 
Here is how much of TeX's memory you used:
 10262 strings out of 495269
 156651 string characters out of 3180500
 357464 words of memory out of 3000000
 13221 multiletter control sequences out of 15000+200000
 14912 words of font info for 22 fonts, out of 3000000 for 9000
 14 hyphenation exceptions out of 8191
 5000i,7n,55p,344b,319s stack positions out of 5000i,500n,10000p,200000b,50000s
!  ==> Fatal error occurred, no output PDF file produced!
Ist der Hauptfehler die stack size oder eher die anderen Fehler?
Bin ratlos und danke schonmal für Lösungsvorschläge

Beste Grüße
Robin

Sluzalek
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Di 15. Mär 2011, 09:33

Beitrag von Sluzalek »

Hallo miteinander,

das Problem von mir ist noch aktuell und ich wollte nochmal nachfragen ob mir jemand weiterhelfen kann, beziehungsweise ob noch Informationen aus der log nötig sind oder ob ich noch etwas anderes tun kann.

Vielen Dank,
beste Grüße
Robin

Benutzeravatar
nfa019
Forum-Century
Forum-Century
Beiträge: 115
Registriert: Mi 2. Jun 2010, 22:32

Beitrag von nfa019 »

Es scheint ja an den

\DIFadd{}

Befehlen zu liegen, den müssten wir dann schon sehen.

Mach doch mal einen neuen Thread auf mit einem Minimalbeispiel ohnen includes, daran scheint es ja nicht zu liegen.

Frauke

Peter_42

So gehts

Beitrag von Peter_42 »

Ich hatte das gleiche Problem.
Auch wenn das Problem für dich sicher nicht mehr aktuell ist, schreib ich hier mal eine Lösung rein. Mir hätte es geholfen ;-)

Es geht mit einer Batch-Datei für Windows (Unter Linux bestimmt ähnlich). Der Trick ist, die Differenz von jeder einzelnen Datei zu bilden:

----------------------------------------------------

set folder_old=C:\..\alt\Minimalbeispielordner
set folder_new=C:\..\neu\Minimalbeispielordner
set folder_diff=C:\...\diff\Minimalbeispielordner

REM diff Ordner löschen und neuen Ordner hier hin kopieren
rmdir /s /q %folder_diff%
xcopy "%folder_new%" "%folder_diff%" /D /E /C /R /I /K /Y

set file_00=Minimalbeispiel.tex
set file_01=Titelseite.tex
set file_02=TeX-File1.tex
set file_03=TeX-File2.tex
REM und so weiter für alle files

latexdiff -t UNDERLINE %folder_old%\%file_00% %folder_new%\%file_00% > %folder_diff%\%file_00%
latexdiff -t UNDERLINE %folder_old%\%file_01% %folder_new%\%file_01% > %folder_diff%\%file_01%
latexdiff -t UNDERLINE %folder_old%\%file_02% %folder_new%\%file_02% > %folder_diff%\%file_02%
latexdiff -t UNDERLINE %folder_old%\%file_03% %folder_new%\%file_03% > %folder_diff%\%file_03%
REM und so weiter für alle files

REM Ausgabe erzeugen:
C:
cd %folder_diff%\
pdflatex Minimalbeispiel.tex
pdflatex Minimalbeispiel.tex
Minimalbeispiel.pdf

----------------------------------------------------

Ich hoffe das passt alles so. Habe meine Version auf dein Beispiel angepasst und dabei hoffentlich keinen Fehler eingebaut. Diese Lösung hat sogar noch einen Vorteil. Solltest du deine Kapitel tauschen, wird nicht alles als Änderung markiert.

LG Peter

Antworten