Ergebnis 1 bis 8 von 8

Thema: algorithmc - same identifier error (ext 4)

  1. #1
    Registrierter Benutzer
    Registriert seit
    31.01.2008
    Beiträge
    25

    algorithmc - same identifier error (ext 4)

    Hi!

    Zu der Fehlermeldung "same identifier" habe ich einiges hier im Forum gefunden. Leider aber nicht in Zusammenhang mit algorithmc (oder habe ich nur schlecht geschaut?).

    Auf jeden Fall kommen bei mir wegen 2 "algorithmc-Sachen" massenhaft solche Fehler:
    Code:
    [27]pdfTeX warning (ext4): destination with the same identifier (name{ALC@rem.1
    }) has been already used, duplicate ignored
     
                       \relax 
    l.268 \STATE
                 $pruning\_lvl \leftarrow$ height(BTG)pdfTeX warning (ext4): destin
    ation with the same identifier (name{ALC@line.1}) has been already used, duplic
    ate ignored
     
                       \relax 
    l.268 \STATE
    An der Seitenzahl liegt es denke ich nicht. Ich habe aber auch keine Ahnung an was es sonst liegen könnte.

    Wäre für hilfreiche Tipps sehr dankbar!

    Viele Grüße,
    Tom

    Ein Beispiel-Algorithmus:
    Code:
    \begin{flushleft}
      \captionsetup{style=ruled,type=algorithm,skip=0pt}
      \makeatletter
        \fst@algorithm\@fs@pre
      \makeatother
      \caption{blub}
      \label{alg:blub}
      \makeatletter
        \@fs@mid
      \makeatother
    \algsetup{indent=1em}
    \algsetup{linenodelimiter=.}
    \renewcommand{\algorithmiccomment}[1]{// #1 }
    \textbf{Eingaben:~} Relation $R$, Zwei dimensionale Pareto-Präferenz $P:=P_1\:\otimes P_2$\\
    \textbf{Ausgabe:~} BMO set
    \begin{algorithmic} %[1]
    \STATE $BMO$-$set \leftarrow \emptyset$\\
    \COMMENT{Die Level-Werte des letzten Tupels im BMO-Set speichern}
    \STATE int bla1 = MAX\_INTEGER, bla2 = MAX\_INTEGER;
    ~\\
    ~\\
    \COMMENT{Sortieren nach den Level-Werten von A$_{P_1}$, A$_{P_2}$}
    ~\\
    \STATE SORT(R,level(A$_{P_1}$), level(A$_{P_2}$));
    ~\\
    ~\\
    \FORALL{$t \in R$} 
    	\IF{xy $\leq$ bla1} \label{alg:blub:vgl1a}
    		\IF{yz $\leq$ bla2} \label{alg:blub:vgl1b} 
    			\STATE
    			\COMMENT{$t$ zu Ergebnis hinzufügen}
    			\STATE Ergebnis = Ergebnis $\cup t$ \label{alg:blub:bmo1}
    			\STATE bla1 = xy; 
    			\STATE bla2 = yz;
    		\ENDIF
    	\ELSE  \label{alg:blub:vgl2a}
    		\IF{yz $<$ bla2}  \label{alg:blub:vgl2b}
    			\STATE
    			\COMMENT{$t$ zu Ergebnis hinzufügen}
    			\STATE Ergebnis = Ergebnis $\cup t$ \label{alg:blub:bmo1}
    			\STATE bla1 = xy; 
    			\STATE bla2 = yz;
    		\ENDIF
    	\ENDIF
    \ENDFOR
    \end{algorithmic}
    \makeatletter
        \@fs@post
      \makeatother
    \end{flushleft}
    Geändert von secret3des (26-02-2008 um 15:05 Uhr)

  2. #2
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.604
    Das algorithmic-Paket ist leider nicht an hyperref angepasst. In hyperref gibt es zwar eine Anpassung an das float-Paket, die bei richtiger Ladereihenfolge (siehe hyperref-README) auch bei den algorithm-Umgebungen greift, aber eben nicht bei algorithmic. Behandelt wurde diese Problematik z.B. hier:

    http://groups.google.de/group/comp.t...8d0504aa?hl=de

    Zusammenfassung:

    1. Auf richtige Ladereihenfolge float -> algorithm -> hyperref achten, sofern das algorithm-Paket benutzt wird.

    2. Folgenden Patch ggf. nach dem Laden des algorithmic-Paketes einbinden:
    Code:
    Patch entfernt, da nicht ausreichend, siehe Beitrag #6
    Gruß,
    Axel
    Geändert von sommerfee (28-02-2008 um 07:54 Uhr) Grund: Patch entfernt

  3. #3
    Registrierter Benutzer
    Registriert seit
    31.01.2008
    Beiträge
    25
    Hi Axel!

    Vielen Dank für deine Hilfe! :-)

    Mit dem Patch (2.) funktioniert es super. Die Ladereihenfolge allein scheint (zumindest bei mir) keine Auswirkungen zu haben.

    Hm.. Wenn ich die Zeilennummerierung (wieder) anschalte, kommen die Warnings leider wieder. Kann man den Patch so anpassen, dass es dafür auch geht? Oder mal ganz blöd gefragt: Stören die Warnings (im Moment 49 von dieser Sorte)?

    Viele Grüße,
    Tom
    Geändert von secret3des (26-02-2008 um 17:25 Uhr)

  4. #4
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.604
    Zitat Zitat von secret3des Beitrag anzeigen
    Hm.. Wenn ich die Zeilennummerierung (wieder) anschalte, kommen die Warnings leider wieder. Kann man den Patch so anpassen, dass es dafür auch geht?
    Hast du ein kleines aber vollständiges Beispiel für mich, mit dem ich die Warnungen reproduzieren und ein wenig herumspielen kann?

    Oder mal ganz blöd gefragt: Stören die Warnings (im Moment 49 von dieser Sorte)?
    Keine Ahnung...

    Gruß,
    Axel
    Geändert von sommerfee (26-02-2008 um 17:50 Uhr)

  5. #5
    Registrierter Benutzer
    Registriert seit
    31.01.2008
    Beiträge
    25
    Hast du ein kleines aber vollständiges Beispiel für mich, mit dem ich die Warnungen reproduzieren und ein wenig herumspielen kann?
    Klar, gerne! Hier mal ein vollständiges und nicht allzu großes Beispiel:

    Code:
    \documentclass[titlepage, 12pt, final,oneside]{scrbook}
    \KOMAoptions{paper=a4}
    
    \usepackage[automark,headsepline]{scrpage2} 	% für die Formatierung (der Fuß- und Kopfzeile)
    \usepackage[latin1]{inputenc}									% für die Unterstützung von Umlauten
    \usepackage[ngerman]{babel}										% deutsche Silbentrennung
    
    \usepackage{float}
    
    \usepackage{caption}
    \usepackage{algorithmic}
    \usepackage{algorithm}
    
    \makeatletter
      \newcounter{algorithmic}
      \let\ORIG@algorithmic\algorithmic
      \def\algorithmic{\stepcounter{algorithmic}\ORIG@algorithmic}
      \def\theHALC@line{\thealgorithmic-\theALC@line}
      \def\theHALC@rem{\thealgorithmic-\theALC@rem}
    \makeatother
     
    \usepackage[pdftex,
                colorlinks=true, linkcolor=blue, urlcolor=blue, citecolor=blue,
                raiselinks=true,
                bookmarks=false,
                bookmarksopenlevel=1,
                bookmarksopen=true,
                bookmarksnumbered=true,
                hyperindex=true,
                plainpages=false,% correct hyperlinks
                pdfpagelabels=true%,% view TeX pagenumber in PDF reader
                %pdfborder={0 0 0.5}
                ]{hyperref} % erzeuge Hyperlinks z.B. für pdflatex
    
    \begin{document}
    
    \begin{flushleft}
      \captionsetup{style=ruled,type=algorithm,skip=0pt}
      \makeatletter
        \fst@algorithm\@fs@pre
      \makeatother
      \caption{blub}
      \label{alg:blub}
      \makeatletter
        \@fs@mid
      \makeatother
    \algsetup{indent=1em}
    \algsetup{linenodelimiter=.}
    \renewcommand{\algorithmiccomment}[1]{// #1 }
    \textbf{Eingaben:~} Relation $R$, Zwei dimensionale Pareto-Präferenz $P:=P_1\:\otimes P_2$\\
    \textbf{Ausgabe:~} BMO set
    \begin{algorithmic}[1]
    \STATE Ergebnis $\leftarrow \emptyset$\\
    \COMMENT{Die Level-Werte des letzten Tupels im BMO-Set speichern}
    \STATE int bla1 = MAX\_INTEGER, bla2 = MAX\_INTEGER;
    ~\\
    \COMMENT{Sortieren nach blub}
    ~\\
    \STATE SORT(blub);
    \FORALL{$t \in R$} 
    	\IF{xy $\leq$ bla1} \label{alg:blub:vgl1a}
    			\STATE
    			\COMMENT{$t$ zu Ergebnis hinzufügen}
    			\STATE Ergebnis = Ergebnis $\cup t$ \label{alg:blub:bmo1}
    			\STATE bla1 = xy; 		
    	\ENDIF
    \ENDFOR
    \end{algorithmic}
    \makeatletter
        \@fs@post
      \makeatother
    \end{flushleft} 
    
    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum.
    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum.
    
    
    Referenz auf Zeile \ref{alg:blub:vgl1a} und noch eine Referenz auf Zeile \ref{alg:blub:bmo1}.
     
    \end{document}
    Ich hab mal noch Blindtext eingebaut, um die Referenzen zu testen. Die scheinen trotz Warnings korrekt zu funktionieren.

    Wenn du keine einzelnen Zeilen mit \label+\ref referenzierst, nicht. (Obwohl: Mich würden sie trotzdem stören ) Wenn doch, dann stimmen die Sprungziele bei diesen Referenzen nicht.
    Hm, ja.. es stört mich schon auch. Sonst hätte ich den Thread nicht gestartet. ;-) Wobei das Ergebnis - soweit ich das sehe - nicht darunter leidet.

    Viele Grüße,
    Tom

  6. #6
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.604
    Hallo Tom,

    So, ich habe gestern abend etwas Zeit gefunden und mir die Quellen des algorithmic-Paketes angesehen, um eine Lösung zu basteln, die die Probleme wirklich behebt und nicht nur an den Symptomen herumdoktert. Herausgekommen ist folgendes:

    Das algorithmic-Paket verwendet an 2 Stellen fälschlicherweise \refstepcounter statt \stepcounter, das hat den Nebeneffekt, daß \label ggf. das falsche Label aufgreift, das hat auch der Paket-Autor gemerkt, aber anstatt den Fehler zu beheben hatte er ein Makro namens \ALC@setref erfunden, was das wieder geradebiegen soll. Ohne hyperref klappt das auch, aber mit hyperref macht \refstepcounter etwas mehr, und deswegen klappt die eingebaute Fehler-Umgehung nicht mehr. Abhilfe: Den Fehler beseitigen, also die beiden falschen \refstepcounter durch \stepcounter ersetzen, \ALC@setref streichen.

    Dann braucht man "nur" noch ein eindeutiges \theHALC@line für die Referenzen auf Zeilen und die Sache ist erledigt, diesmal hoffentlich endgültig. Als Nebeneffekt müssten auch die PDFs etwas kleiner werden, weil nicht mehr so unnötig viele Hyperlink-Anker gesetzt werden, nur noch einer pro Zeile.

    Bauanleitung: Man speichere das folgende als algorithmic-fix.sty und lade das algorithmic-Paket mit \usepackage{algorithmic,algorithmic-fix}:
    Code:
    \NeedsTeXFormat{LaTeX2e}[1994/12/01]
    \ProvidesPackage{algorithmic-fix}[2008/03/01 v0.2 Fixes algorithmic for hyperref (caption@sommerfee.de)]
    % 1. Replace the two wrong \refstepcounter's with \stepcounter's
    \begingroup
      \long\def\x#1\refstepcounter#2\@nil{%
        \endgroup
        \def\ALC@item[##1]{#1\stepcounter#2}}%
    \expandafter\x\ALC@item[{#1}]\@nil
    \newcommand\ALC@list{%
      \begingroup
        \long\def\x\refstepcounter##1\@nil{%
          \endgroup
          \def\ALC@it{\stepcounter##1}}%
      \expandafter\x\ALC@it\@nil
      \let\list\ORI@list\list}%
    \renewcommand\ALC@setref{}%
    % 2. Define a unique \theHALC@line
    \newcounter{algorithmic}
    \let\ORI@algorithmic\algorithmic
    \def\algorithmic{%
      \refstepcounter{algorithmic}%
      \let\ORI@list\list\let\list\ALC@list\ORI@algorithmic}
    \def\theHALC@line{\thealgorithmic-\theALC@line}
    % That's all
    \endinput
    Eine Rückmeldung wäre nett, denn wenn das auch bei dir klappt, werde ich dem Paket-Maintainer meine Erkenntnisse zukommen lassen, so daß algorithmic-fix hoffentlich bald nicht mehr notwendig ist. (Aber er scheint nicht auf E-Mails zu antworten, zumindest auf meine letzte nicht )

    Zitat Zitat von secret3des Beitrag anzeigen
    Die Ladereihenfolge allein scheint (zumindest bei mir) keine Auswirkungen zu haben.
    Das liegt daran, daß du die "algorithm"-Umgebung gar nicht verwendest, würdest du es tun, würdest du ansonsten Probleme bekommen. (Du verwendest ja stattdessen \captionsetup{type=...}, und das caption-Paket ist (fast) unabhängig von der Ladereihenfolge.)

    Gruß,
    Axel
    Geändert von sommerfee (01-03-2008 um 12:48 Uhr) Grund: Paketcode auf 0.2 aktualisiert

  7. #7
    Registrierter Benutzer
    Registriert seit
    31.01.2008
    Beiträge
    25
    Hi Axel!

    Eine Rückmeldung wäre nett, denn wenn das auch bei dir klappt, werde ich dem Paket-Maintainer meine Erkenntnisse zukommen lassen, so daß algorithmic-fix hoffentlich bald nicht mehr notwendig ist. (Aber er scheint nicht auf E-Mails zu antworten, zumindest auf meine letzte nicht )
    Nachdem ich herausgefunden hatte, wie ich die algorithmic-fix.sty einbinde, hat es einwandfrei funktioniert. :-) Vielen Dank für deine freundliche und äußerst kompetente Hilfe!

    Ja, wäre super, wenn das eingebaut würde. Ich hoffe, dass der Autor sich bald rührt. ;-)

    Viele Grüße,
    Tom

  8. #8
    Registrierter Benutzer
    Registriert seit
    09.05.2007
    Beiträge
    12
    Herzlichen Dank für das schnelle fixen von >100 Warnungen

    Die oben beschriebene Lösung funktioniert auch für mich.
    Scheint fast ein wenig so, als würde das Packet nicht mehr so recht gewartet.
    Vielleicht sollte man mal ein anderes Packet für Pseudocode nehmen, wobei ich ja sagen muss, dass mir kein wirklich gutes bekannt ist - letztlich haben sie alle irgendwie ihre Macken - und für selbstmachen fehlt mir wohl die TeX Erfahrung

    Nunja, wie dem auch sei, danke für die Lösung!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •