Crie um template em LaTeX, alimente com dados vindos de uma planilha e compile.
- Tenha o
pipenv
instalado na sua máquina. - Dentro desse diretório, rode o comando
pipenv install
para instalar as dependências.
Para compilar o exemplo, rode o script compilar-exemplo.sh
. Se tudo der certo, o arquivo compilado vai estar em exemplos/exemplo_compilado.tex
.
Basicamente o que foi feito, conforme as referências, foi uma pequena modificação
nos templates do Jinja2. Para executar um comando Python em tempo de compilação,
basta iniciar uma linha com %>>>
ou escrevê-lo dentro de \BLOCK{}
.
Para expandir o valor de uma variável x
, usa-se o comando \VAR{x}
.
A planilha exemplos/planilha_exemplo.xlsx
contém apenas uma folha, chamada Apresentacoes
, cujo conteúdo é o seguinte:
Inteiro | Data:data | Horario:hora | Flutuante:numero | Autores:lista | Textao |
---|---|---|---|---|---|
25 | 2021-08-25 00:00:00 | 10:00:00 | 102.55 | Bossa,Luiz,Fernando | Lorem ipsum dolor sit am... |
154 | 2021-08-26 00:00:00 | 14:00:00 | 1024.15 | Alice,Bob | Nulla facilisi. Donec sc... |
104 | 2021-08-27 00:00:00 | 10:25:00 | 20.54 | Donald,Knuth | Vestibulum consectetur, ... |
48 | 2021-08-28 00:00:00 | 22:15:00 | 52.01 | Paul,Erdos | Duis mollis vel odio ac ... |
Note que eu uso o padrão NomeDaColuna:tipo
para declarar o tipo de valor encontrado na coluna. As colunas que não possuem isso têm seu tipo inferido pelo próprio pandas
.
A função planilha2dicionario
lê essa planilha e retorna um dicionário no qual as chaves são os nomes das folhas da planilha, e o conteúdo dentro de cada chave é uma lista contendo os dados de cada linha da planilha, no formado de registros do tipo {coluna: valor}
, como abaixo. Note que os valores já estão convertidos para os tipos python
apropriados.
{
"Apresentacoes": [
{
"Inteiro": 25,
"Data": datetime.datetime(2021,8,25),
"Horario": datetime.time(10, 0),
"Flutuante": 102.55,
"Autores": ["Bossa", "Luiz", "Fernando"],
"Textao": " Lorem ipsum dolor sit am..."
},
[...]
Dentro do template LaTeX
, podemos iterar sobre os valores do nosso banco de dados da
seguinte maneira
% iteramos sobre todos os registros
\BLOCK{ for registro in Apresentacoes }
\textbf{\VAR{registro.Autores[0]}} % vai imprimir o primeiro autor
\par \VAR{registro.Textao} % vai imprimir o Textao
\BLOCK{ endfor }
% fecha o bloco for
Estabeleci os seguintes nomes para os tipos de valor
Nome | Descrição |
---|---|
data | Representa uma data |
hora | Representa uma hora |
datahora | Representa um horário de uma data específica |
numero | Valor de ponto flutuante |
lista | Lista de valores separados por vírgula |
Para uma variável do tipo data
ou do tipo hora
, podemos aplicar um filtro para imprimir
seu valor da maneira desejada. Por exemplo, se tivemos variável x = datetime.datetime(2021,6,29)
, podemos aplicar o filtro formato
para imprimir essa data por extenso
\VAR{ x | formato("Dia, DD de mês de AAAA")}
resultando no valor impresso
Terça, 29 de junho de 2021
O filtro formato
recebe chaves que serão substituidas pelos respectivos valores da data passada.
Chave | Conversão | Exemplo |
---|---|---|
DD | Dia do mês, dois dígitos com zeros à esquerda. | 01, 02, 03, ..., 31 |
D | Dia do mês, numérico sem zeros à esquerda. | 1, 2 , 3, ... , 31 |
MM | Mês, dois dígitos com zeros a esquerda. | 01, 02, ... , 12 |
mmm | Mês, abreviado para três letras em minúsculo. | jan, fev, ..., dez |
mês | Mês, completo com letras em minúsculo. | janeiro, fevereiro, ..., dezembro |
Mês | Mês, completo com inicial maiúscula. | Janeiro, Fevereiro, ..., Dezembro |
AA | Ano, dois dígitos numéricos. | 99, 00, 01, ..., 21 |
AAAA | Ano, quatro dígitos numéricos. | 1999, 2000,..., 2021 |
ds | Dia da semana, três letras em minúsculo. | seg, ter, ..., dom |
Ds | Dia da semana, três letras, inicial maiúscula. | Seg, Ter, ..., Dom |
dia | Dia da semana, somente um nome em minúsculas. | segunda, terça, ..., domingo |
Dia | Dia da semana, somente um nome, inicial maiúscula. | Segunda, Terça, ..., Domingo |
dia-feira | Dia da semana, completo. | segunda-feira, ..., domingo |
Dia-feira | Dia da semana, completo, inicial maiúscula. | Segunda-feira, ..., Domingo |
HH | Hora, dois dígitos, formato 24h. | 00, 01, ..., 23 |
mm | Minutos, dois dígitos. | 00, 01, ..., 59 |
TODO
- Converter a planilha em dicionário
- Ler um arquivo LaTeX com tags e alimentar com dados do dicionário
- Ferramenta de linha de comando para compilar templates
- Feramenta para compilar o tex gerado
- Filtros e funções extra para datas no Jinja Environment