• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Makefile: ifeq (Datei enthält text)

xxxsemoi

Member
Hallo,
Ich habe mir ein Makefile geschrieben, dass mit BibTeX die Zitate in LaTeX einbindet. Falls aber in der kompilierten Datei überhaupt kein Zitat vorhanden ist, so stürzt das Makefile beim ausführen von BibTeX ab. Was ich also zu testen habe ist, ob die Datei Zitate enthält.

Die Datei enthält Zitate, falls DATEINAME.aux eine Zeile mit bibcite enthält. Deshalb dachte ich mir, ich könnte mit "sed" nachschauen, ob das Wort "bibcite" in der Datei enthalten ist und dann über eine if-Abfrage
ifneq (sed -n '/bibcite/p' DATEINAME.aux,"")
den erhaltenen String mit dem leeren String "" vergleichen. Das geht auch wunderbar, falls der sed-Befehl keinen leeren String produziert, aber falls er einen leeren String produziert klappt es nicht. Weiß da jemand Rat?

Gruß Semoi


LÖSUNG:
1) Musste unter der .log-Datei nachschauen und nicht unter .aux-Datei.
2) Muss dort nach "Citation" suchen
Deshalb muss es heißen:
if ! `grep -q Citation DATEINAME.log`;\
then \
echo "BibTeX wird nicht benoetigt";\
else \
echo "Führe BibTeX aus.....";\
for i in $(TEXFILES);\
do \
touch $${i%.tex}.aux;\
done;\
$(BIBTEX) DATEINAME;\
fi

Man braucht die Simikolons und Backslashs, damit alles in der gleichen Shell ausgeführt wird!!!

Vielleicht hilft das ja jemanden.
Gruß xxxsemoi
 

TeXpert

Guru
nein, so kompliziert ist das nicht ;)

ich hab hier leider nur einen alten makefilehack rumliegen, mein aktuelleres (etwas dynamischer und optimierter) hab ich nicht auf der maschine.

da mache ich sowas: (vorsicht: Hack-as-Hack-can)

Code:
pdf: clean $(TEXFILES)
        @$(PDFLATEX) $(TEXFILE)
        @echo "BIBTEX:"
        @if grep '\citation' $(TEXFILE).aux > /dev/null ; then \
                @echo " ----> BIBTEX" \
                @$(BIBTEX) $(TEXFILE) ; \
        fi
        @while ( \
                $(PDFLATEX) $(TEXFILE) ; \
                grep "Rerun to get cross" arbeit.log > /dev/null ) do true ; \
        done
        @$(PDFLATEX) $(TEXFILE)
        @echo " ---------------------------------------"
 
OP
xxxsemoi

xxxsemoi

Member
Hallo TeXpert,
ich brauche die Zeilen
Code:
for i in $(TEXFILES);\
do \
    touch $${i%.tex}.aux;\
done;\
,denn BibTeX braucht zu allen Dateien eine .aux-Datei. In meiner Diplomarbeit habe ich zich Dateien, und zwei davon haben keine Zitate enthalten. Bibtex meckert bei diesen, falls ich die .aux-Datei nicht mit touch erzeuge. Ich werde es noch einmal mit Deinem Vorschlag probieren, aber ich glaube es klappt immernoch nicht.
Gruß xxxsemoi
 

TeXpert

Guru
xxxsemoi schrieb:
Hallo TeXpert,
ich brauche die Zeilen
Code:
for i in $(TEXFILES);\
do \
    touch $${i%.tex}.aux;\
done;\
,denn BibTeX braucht zu allen Dateien eine .aux-Datei. In meiner Diplomarbeit habe ich zich Dateien, und zwei davon haben keine Zitate enthalten. Bibtex meckert bei diesen, falls ich die .aux-Datei nicht mit touch erzeuge. Ich werde es noch einmal mit Deinem Vorschlag probieren, aber ich glaube es klappt immernoch nicht.
Gruß xxxsemoi

langsam, langsam. Hast Du mehrere Dateien, die getrennt übersetzt werden sollen oder was? oder verschiedene Biliographys für die verschiedenen Kapitel? nehmen wir meine Diplomarbeit, viele tex-Files, ein masterfile und da dan \include{foobar], eine Bib, und ein latex materfile kompiliert alle Kapitel und erstellt die *.aux-Files. dann ein bibtex masterfile und alles passt.
 
Oben