2010-04-07 4 views
9

Ich habe einige .rst Dateien und ich konvertiere sie in .tex Datei mit Standard Sphinx Converter.Konvertiere Tabellen in first zu LaTeX

In einigen .rst Ich habe Tabellen mit speziellen Breite wie:

.. list-table:: 
    :widths: 50 50 

Die resultierende .tex immer enthält Tabellen wie:

\begin{tabulary}{\textwidth}{|L|L|} 

So wird die Spaltenbreite verloren.

Wie kann ich die Spaltenbreite beibehalten, wenn ich zuerst in Latex umwandele?


I Kommaseparator auch verwendet,

.. list-table:: 
    :widths: 50 , 50 
    :header-rows: 1 

* - SETTING 
    - DESCRIPTION 
* - Enable 
    - Enables or disables internal tracing. 
* - Verbose 
    - Enables or disables extended internal tracing. 

, aber es funktioniert nicht .. vielleicht habe ich einen schlechten Konverter? Welchen Konverter empfehlen Sie?

Antwort

1

Versuch:

:widths: 50, 50 

mit einem Kommaseparator.

Die Ausgabe hängt auch davon ab, wie Ihre Tabelle zuerst geschrieben wird.

Ich nahm an, dass Sie die Standard-Syntax der ersten Tabelle verwendeten, Tabellen nicht aus Aufzählungslisten (wie möglich). Weitere Hilfe http://docutils.sourceforge.net/docs/ref/rst/directives.html#tables

Versuchen Sie auch, wenn die 50, 50 die Spaltenbreite ist, Ihre Latex-Code sollte wie folgt aussehen:

\begin{tabulary}{ 1\textwidth}{ | p{0.5} | p{0.5} | } 

und:

\begin{tabulary}{total width of table}{| column width| column width|} 
+0

ich auch Kommaseparator verwendet, .. list-Tabelle :: : Breite: 50, 50 : Kopfzeilen: 1 * - EINSTELLUNG - BESCHREIBUNG * - Aktivieren - Aktiviert oder interne deaktiviert verfolgen. * - Ausführlich - Aktiviert oder deaktiviert die erweiterte interne Ablaufverfolgung. aber es funktioniert nicht .. kann ich schlechte Konverter verwenden? Welchen Konverter empfehlen Sie? danke – ace

+0

Wenn Sie nicht bereits Docutils verwenden, würde ich das versuchen. Im Handbuch sind mehrere Konverter aufgeführt. Im Allgemeinen mag ich Pandora für einen Konverter, aber ich arbeite nicht viel mit rst, also bin ich mir nicht sicher, wie gut die Konvertierung sein wird. – Mica

+0

-1 weil die Frage über Sphinx ist und Sphinx nicht mit der Docutils-Syntax in diesem Fall funktioniert, musst du '..tabularcolumns ::' – bmu

13

tatsächlich den Befehl

.. tabularcolumns:: |p{4.5cm}|p{8.5cm}| 

.. list-Tabelle ::

kurz vor benötigt wird http://sphinx.pocoo.org/markup/misc.html?highlight=tabularcolumns#dir-tabularcolumns

+0

verwenden, deine Antwort ist richtig, denke ich, aber du könntest die Breite relativ angeben '| p {0.5 /textwidth}|p{0.5/textwidth} |' um das zu bekommen, was ein Ass will. – bmu

+0

Entschuldigung, habe nicht bemerkt, dass Sie die Antwort selbst gegeben haben. – bmu

0

ich dies bestätigen können, dass:

.. list-table:: 
:widths: 10 40 50 

* - Module 
    - Link 
    - Description 

Arbeiten mit rst2latex

\setlength{\DUtablewidth}{\linewidth} 
\begin{longtable*}[c]{|p{0.104\DUtablewidth}|p{0.375\DUtablewidth}|p{0.465\DUtablewidth}|} 
\hline 

Module 
& 
Link 
& 
Description 
\\ 
\hline 

Aber mit Sphinx, bekomme ich was die OP setzen. Also nicht ein rst2latex Problem, das ich sammeln würde.

Die "Auto" Breite Zeug die Dokumente sprechen ist auch nicht sehr funktional für mich, Links neigen dazu, zu bluten.

0

Da ich eine riesige Dokumentation habe, habe ich versucht, die Latex-Generation zu reparieren.Außerdem halte ich die Latexnotation in den ersten Dateien für einen Nachteil, weil sie inkonsistent ist und es den Editoren erfordert, teilweise eine schwierige Auszeichnungssprache zu lernen.

Ich ersetzte LaTeXTranslator.depart_table durch meine eigene Version. Ich kopierte die ursprüngliche depart_table und fügte diesen Code (verkürzt):

def my_depart_table (self, node): 
    totalColwidth = 0 
    givenColwidth = [] 
    hasColwidth = False 

    for tgroup in node: 
     for tableColspec in tgroup: 
      try: 
       if tableColspec.has_key('colwidth'): 
        totalColwidth += tableColspec['colwidth']  
        givenColwidth.append(tableColspec['colwidth']) 
        hasColwidth = True 
      except: 
        print "colspec missing. \n" 
    # original code 

    if hasColwidth: 
     colspec = "" 
     for thisColwidth in givenColwidth: 
      colspec += ('>{\RaggedRight}p{%.3f\\linewidth}' % (0.95 * thisColwidth/totalColwidth))      
      #print "using widths: %.3f %s %s" % ((0.95 * thisColwidth/totalColwidth), thisColwidth, totalColwidth) 
      self.body.append('{' + colspec + '}\n') 

    # more original code 

LaTeXTranslator.depart_table = my_depart_table

Im weder fließend in Python noch Sphinx, so auf eigene Gefahr. Ich hoffe, Sie bekommen die Idee oder können sogar einen Rat geben.

Wenn Sie Python < 3.0 verwenden und den Faktor 0.95 vollständig entfernen möchten, denken Sie daran, entweder eine der ganzen Zahlen zu übergeben oder eine Division von __ future __ zu importieren.