2012-08-03 4 views
6

Ich habe ziemlich viele Anker in Doxygen, z.Nummerierte Anker in Doxygen

\anchor pic_foo 
\image html foo.gif "My Caption" 
\anchor pic_bar 
\image html bar.gif "My Caption" 

Jedesmal, wenn ich \ref verwenden Sie eine der verknüpfen, muss ich einige schöne Beschreibung bilden so die rohe Namen des Ankers nicht in Ausgabe erscheint.

Ist es möglich, etwas wie nummerierte Anker in doxygen zu haben, wo der Verbindungstext die Nummer dieses Ankers sein wird? Idealer so etwas wie:

\anchor pic_foo 
\image html foo.gif "My Caption" 
\anchor pic_bar 
\image html bar.gif "My Caption" 

As Figure \ref pic_foo shows... Figure \ref pic_bar is... 

sollte idealerweise übersetzen zu:

As Figure 1 shows... Figure 2 is... 

, wo die Zahl der Link. Ich wäre glücklich mit jeder Art von Zählschema (Dokumentation global oder Seite lokal).

Antwort

4

Ich glaube nicht, dass eine automatische Anzahl von Zahlen, entweder innerhalb einer Seite oder über die gesamte Dokumentation, mit Doxygen möglich ist (ich würde mich freuen, hier korrigiert zu werden). Eine einfache Lösung für Ihre Frage ist jedoch, dass Sie den Ankertext durch Zahlen ersetzen, d. H. "Eins", "Zwei", "Drei" usw. Alternativ können Sie, wenn Sie viele Zahlen haben, römische Ziffern verwenden. Einfache Zahlen scheinen nicht als Anker-Links zu funktionieren.

Ihr Beispiel wird dann mit zusätzlichem Text in den Bildunterschriften werden,

\anchor one 
\image html foo.gif "Figure one: My Caption" 
\anchor two 
\image html bar.gif "Figure two: My Caption" 

As Figure \ref one shows... Figure \ref two is... 

was

Here Figure one shows... Figure two is... 

mit one und two Hyperlinks zu Ihren Zahlen.

Sie können dann einen Alias ​​in Ihrer Konfigurationsdatei definieren, sagen wir \fref, definiert als Figure \ref, die automatisch den hyperlinked Nummern mit dem Text "Abbildung" vorangestellt wird.

Ist diese Lösung akzeptabel? Die einzige andere Alternative, die ich mir vorstellen kann, ist die Nachbearbeitung des Doxygen-Ausgangs, aber die obige Lösung ist bei weitem die einfachste.

aktualisieren

Der folgende Python-Code wird Anker Verweis auf einen Vorwärtszähler verwandeln:

# Test documentation. 
s = r""" 
\anchor pic_foo 
\image html foo.gif "My Caption" 
\anchor pic_bar 
\image html bar.gif "My Caption" 

As Figure \ref pic_foo shows... Figure \ref pic_bar is... 
""" 

# Split string into a list of lines. 
s = s.split('\n') 

# Dictionaries for mapping anchor names to an incrementing counter. 
d = {} 

numbers = {1: 'one', 
    2 : 'two', 
    3 : 'three'} 

counter = 1 

# Find all anchor links and map to the next counter value. 
for line in s: 
    if r'\anchor' in line: 
     d[line.split(r'\anchor ')[1]] = numbers[counter] 
     counter += 1 

# Reform original string. 
s = '\n'.join(s) 

# Replace anchor links with appropriate counter value. 
for key, value in d.items(): 
    s = s.replace(key, value) 

print s 

Wenn Sie dieses Skript Ergebnis in der Ausgabe

\anchor one 
\image html foo.gif "My Caption" 
\anchor two 
\image html bar.gif "My Caption" 

As Figure \ref one shows... Figure \ref two is... 

Es ist trivial zu ändern Das obige Skript, um von der Standardeingabe zu lesen und in Standardausgabe zu schreiben, so dass dies leicht in con verwendet werden kann Kreuzung mit der INPUT_FILTER Konfigurationsdatei Option.

Eine Sache zu beachten ist, dass das Wörterbuch numbers erweitert werden muss, damit mehr als drei Zahlen eingeschlossen werden können. Dies ist wiederum trivial, aber wahrscheinlich nicht leicht skalierbar. Lösungen für die Zuordnung von beliebigen Zahlen zu den entsprechenden Wörtern sind verfügbar (siehe andere Fragen auf dieser Seite), so dass ich mich nicht darum gekümmert habe, dies hier umzusetzen.

+0

Ich schätze den Aufwand, aber das kommt nicht in Frage. Stellen Sie sich vor, Sie fügen ein neues Bild zwischen den beiden hinzu. Klar, ich habe immer meine Emacs Funktion Inkrement-Nummer-Wort und kann das so schmerzfrei wie möglich machen. Ich denke immer noch nicht, dass einer meiner Mitwirkenden zustimmen würde. – pmr

+0

Das ist natürlich nicht ideal, aber ich denke, es ist die einfachste Lösung, die Sie finden werden, da [doxygen anscheinend keine Befehle hat] (http://www.stack.nl/~dimitri/doxygen/commands.html)) oder [Autolink-Optionen] (http://www.stack.nl/~dimitri/doxygen/autolink.html) zum Implementieren eines inkrementierenden Zählers. Sie könnten stattdessen ein Skript oder XLST schreiben, um das von doxygen erzeugte XML zu modifizieren. Ich würde jedoch in Frage stellen, ob es sich lohnt, nur einige Male die Umbenennung einiger Zahlenschilder zu vermeiden (vermutlich werden sich die Zahlen, wenn Ihre Dokumentation fast vollständig ist, wahrscheinlich nicht viel ändern). – Chris

+0

Ich würde lieber ein Shell-Skript verwenden, das als INPUT_FILTER verwendet werden kann, um diesen Effekt zu erzielen. Denken Sie an das Kopfgeld, während Sie es umsetzen! ;) – pmr