2010-04-07 7 views
9

J'ai quelques fichiers .rst et je les convertis en fichier .tex en utilisant un convertisseur sphinx standard.Conversion de tables en premier à LaTeX

Dans certains .rst J'ai des tables avec une largeur spéciale comme:

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

Le .tex résultant contient toujours des tables comme:

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

Ainsi, la largeur de la colonne est perdue.

Comment puis-je conserver la largeur de colonne lors de la conversion première au latex?


je virgule de séparation aussi,

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

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

mais il ne fonctionne pas .. peut-être j'utilisé un mauvais convertisseur? Quel convertisseur recommandez-vous?

Répondre

1

essayer:

:widths: 50, 50 

avec un séparateur de virgule.

La sortie dépend aussi de la façon dont votre table est écrit en premier.

Je suppose que vous utilisiez la syntaxe de table de première norme, ne pas faire des tableaux de listes à puces (comme cela est possible). Pour plus d'aide, essayez http://docutils.sourceforge.net/docs/ref/rst/directives.html#tables

En outre, si le 50, 50 est la largeur de colonne, votre code de latex devrait ressembler à ceci:

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

et:

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

je virgule de séparation aussi .. liste des tables :: : largeur: 50, 50: tête rangs: 1 * - Cadre - DESCRIPTION * - enable - Active ou désactive interne tracé. * - Verbose - Active ou désactive le suivi interne étendu. mais cela ne fonctionne pas .. peut-être utiliser un mauvais convertisseur? Quel convertisseur recommandez-vous? merci – ace

+0

Si vous n'utilisez pas déjà docutils, je voudrais essayer cela. Plusieurs convertisseurs sont répertoriés dans le manuel. J'apprécie généralement le format pandoc pour un convertisseur, mais je ne travaille pas beaucoup avec le premier, donc je ne suis pas sûr de la qualité de la conversion. – Mica

+0

-1 parce que la question sur le sphinx et le sphinx ne fonctionne pas avec la syntaxe docutils dans ce cas, vous devez utiliser '..tabularcolumns ::' – bmu

0

Le docutils écrivain rst2latex a quelques-uns problèmes avec les tables: http://docutils.sourceforge.net/docs/dev/todo.html#tables, alors peut-être que votre problème est lié à cela? Je pense que l'écrivain Sphinx est basé sur rst2latex et pourrait donc avoir les mêmes problèmes.

0

je peux confirmer que ceci:

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

* - Module 
    - Link 
    - Description 

Fonctionne avec rst2latex

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

Module 
& 
Link 
& 
Description 
\\ 
\hline 

Mais avec sphynx, je reçois ce que l'OP a mis. Donc pas un problème de rst2latex que je rassemblerais.

« Auto » choses largeur les documents parlent est pas très fonctionnel pour moi, des liens ont tendance à saigner plus.

0

Depuis que j'ai une documentation énorme, j'ai essayé de corriger la génération de latex.En outre, je considère la notation Latex dans les premiers fichiers comme un inconvénient, car elle est incohérente et nécessite que les éditeurs apprennent en partie un langage de balisage très sensible.

J'ai remplacé LaTeXTranslator.depart_table avec ma propre version. J'ai copié le depart_table original et ajouté ce code (raccourci):

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 ne parle couramment Python ni Sphinx, donc utiliser à vos propres risques. J'espère que vous avez l'idée ou pouvez même donner des conseils.

Si vous utilisez Python < 3.0 et que vous voulez supprimer complètement le facteur 0.95, pensez à lancer l'un des entiers pour flotter ou importer la division de __ future __.