2014-01-09 5 views
5

diese Tabelle Betrachten wo pyeval ein Makro, die einen Ausdruck auswertet und ersetzt ihn durch seinen Wert (so kann ich hartzucodieren Werte in der Dokumentation vermeiden):Wie kann ich Sphinx-Tische an die Breite anpassen?

======================= =========================================== 
Subsytem    Default path 
======================= =========================================== 
:pyeval:`constants.FOO` :pyeval:`pathutils.DEFAULT_FOO_STORAGE_DIR` 
:pyeval:`constants.BAR` :pyeval:`pathutils.DEFAULT_BAR_STORAGE_DIR` 
:pyeval:`constants.BAZ` :pyeval:`pathutils.DEFAULT_BAZ_STORAGE_DIR` 
======================= =========================================== 

Das mit diesem HTML rendert:

<table border="1" class="docutils"> 
    <colgroup> 
    <col width="40%"> 
    <col width="60%"> 
    </colgroup> 
    <thead valign="bottom"> 
    <tr class="row-odd"> 
     <th class="head">Subsystem</th> 
     <th class="head">Default storage path</th> 
    </tr> 
    </thead> 
    <tbody valign="top"> 
    <tr class="row-even"> 
     <td><tt class="docutils literal"><span class="pre">foo</span></tt></td> 
     <td><tt class="docutils literal"><span class="pre">/srv/badp/foo-path/</span></tt></td> 
    </tr> 
    <tr class="row-odd"> 
     <td><tt class="docutils literal"><span class="pre">bar</span></tt></td> 
     <td><tt class="docutils literal"><span class="pre">/srv/badp/bar-path/</span></tt></td> 
    </tr> 
    <tr class="row-even"><td><tt class="docutils literal"> 
     <span class="pre">baz</span></tt></td> 
     <td><tt class="docutils literal"><span class="pre">/var/run/badp/baz-path/</span></tt></td> 
    </tr> 
    </tbody> 
</table> 

Wegen des Makros ist die Menge der Breite, die ich der Subsytem Spalte geben muss, nur geringfügig kleiner als die Spalte Default path, aber der Inhalt der Spalte ist viel kürzer. Da Sphinx als „hilfreich“ versucht, versucht es, das Verhältnis der Breiten in der Quelldatei in der HTML-Seite (man beachte den colgroup-Tag) und das Ergebnis ist ziemlich uneben zu übertragen:

enter image description here

Beachten Sie, dass Chrome (genau wie Firefox) "hilfreich" bricht am Trennpunkt und, da dies ein Pfad ist, kann ich Bindestriche nicht zu Bindestrichen ändern; Leute sind einfach zu wahrscheinlich, um diese Werte zu kopieren.

Wenn ich das Element colgroup entferne, bekomme ich jedoch die Tabelle, die ich will.

enter image description here

Wie kann ich sagen, Sphinx zu gefallen mit meinem Tisch weniger intelligent sein?

+1

Ein verwandten Fehlerbericht (Status auf Wurde nicht fix): https://bitbucket.org/birkenfeld/sphinx/ausgabe/1298. – mzjn

Antwort

4

Ich bin auch auf dieses Problem gestoßen. Wenn man die Quelle docutils liest, sieht es so aus, als würden die colgroup-Breiten unter Verwendung der Anzahl von Bindestrichen für die Spalte in den Trennlinien für Gittertabellen und der Anzahl von Zeichen im längsten Spalteneintrag für die Spalte in einfachen Tabellen wie hier verwendet berechnet.

Ein Versuch, eine benutzerdefinierte Anweisung zu schreiben, um eine Tabelle ohne colgroup zu generieren, führte zu einem Fehler in docutils, in dem die spätere Verarbeitung der generierten Elemente eine colgroup erwartet.

Eine Technik, die ich verwendet habe, ist die Verwendung von Aliasen, um Datenelemente zu erstellen, die näher an ihrem realen Text liegen. Zum Beispiel:

.. |FOO| replace:: :pyeval:`constants.FOO` 

was hilft, ist aber nicht perfekt.

Ein Experiment das colgroup Element Deaktivierung der folgenden CSS mit

colgroup { display: none; } 

funktionierte perfekt auf FireFox aber verbarg dies so deutlich in IE9 die Tabelle eingeben entweder keine akzeptable Lösung.

1

Was (zumindest in Firefox) ist zum Zurücksetzen der col Breiten scheint zu funktionieren:

table.docutils col { 
    width: auto; 
}