Solución:
los pylatex
la biblioteca proporciona un Table()
clase como se señaló en la pregunta. Esta clase genera el LaTeX table
medio ambiente, por ejemplo:
table1 = Table(position="htb")
genera
begin{table}[htb]%
end{table}
los tabular
El entorno se puede agregar al Table()
objeto en PyLaTeX, similar a la forma en que se agrega una subsección a una sección. A su vez, la tabla se puede adjuntar a una subsección. Por ejemplo:
test1 = Subsection('MultiColumn')
table1 = Table(position="htb")
tabular1 = Tabular('|c|c|c|c|')
# fill tabular
table1.append(tabular1)
table1.add_caption("My Table Caption")
test1.append(table1)
los Table()
la clase tiene una función add_caption()
para agregar una leyenda. Si también desea agregar una etiqueta, entonces necesita un objeto separado de la clase Label()
y agregue esto al objeto de tabla. Se pueden agregar más objetos o código a la tabla, por ejemplo, un centering
comando para centrar el tabular en el medio de la página.
MWE:
from pylatex import Document, Section, Subsection,
Table, Tabular, MultiColumn, MultiRow, Label, Ref, NoEscape
doc = Document("multirow")
section = Section('Multirow Test')
test1 = Subsection('MultiColumn')
# make table
table1 = Table(position="htb")
# make tabular
tabular1 = Tabular('|c|c|c|c|')
tabular1.add_hline()
tabular1.add_row((1, 2, 3, 4))
tabular1.add_hline()
# horizontally center tabular on page
table1.append(NoEscape(r'centering'))
# append tabular to table
table1.append(tabular1)
# add caption and label
table1.add_caption("My Table Caption")
label1 = Label("tab1")
table1.append(label1)
# append table to subsection
test1.append(table1)
section.append(test1)
# create and print reference to table
ref1 = Ref("tab1")
section.append("The numbers are in Table ")
section.append(ref1)
section.append(".")
doc.append(section)
doc.generate_pdf(clean_tex=False)
LaTeX generado:
documentclass{article}%
usepackage[T1]{fontenc}%
usepackage[utf8]{inputenc}%
usepackage{lmodern}%
usepackage{textcomp}%
usepackage{lastpage}%
begin{document}%
normalsize%
section{Multirow Test}%
label{sec:Multirow Test}%
subsection{MultiColumn}%
label{subsec:MultiColumn}%
begin{table}[htb]%
centering%
begin{tabular}{|c|c|c|c|}%
hline%
1&2&3&4\%
hline%
end{tabular}%
caption{My Table Caption}%
label{tab1}%
end{table}
The numbers are in Table %
ref{tab1}%
.
end{document}
Resultado:
Bueno, Marijn se me adelantó. De todos modos, solo quería señalar que puede anidar los tabulares dentro de las tablas (y las otras estructuras también). De esa manera, obtiene un código mejor estructurado y no necesita declarar variables explícitamente todo el tiempo:
from pylatex import Document, Section, Subsection, Tabular, Table, MultiColumn, MultiRow
doc = Document('multirow')
with doc.create(Section('Multirow Test')):
with doc.create(Subsection('MultiColumn')):
with doc.create(Table(position='h!')) as table:
with doc.create(Tabular('|c|c|c|c|')) as tabular:
tabular.add_hline()
tabular.add_row((1, 2, 3, 4))
tabular.add_hline()
table.add_caption('My Table Caption')
doc.generate_pdf(clean_tex=False)
Como puede ver en el siguiente ejemplo, no es necesario que invente nuevos nombres de variables (tabular1, tabular2, etc.) y no es necesario que lo haga. .append
todo al final:
from pylatex import Document, Section, Subsection, Tabular, Table, MultiColumn, MultiRow
doc = Document('multirow')
with doc.create(Section('Multirow Test')):
with doc.create(Subsection('MultiColumn')):
with doc.create(Table(position='h!')) as table:
with doc.create(Tabular('|c|c|c|c|')) as tabular:
tabular.add_hline()
tabular.add_row((1, 2, 3, 4))
tabular.add_hline()
table.add_caption('My Table Caption')
with doc.create(Subsection('MultiColumn 2')):
with doc.create(Table(position='h!')) as table:
with doc.create(Tabular('|c|c|c|c|')) as tabular:
tabular.add_hline()
tabular.add_row((5, 6, 7, 8))
tabular.add_hline()
table.add_caption('My Table Caption 2')
doc.generate_pdf(clean_tex=False)