Skip to content

fix: espaçamento entre linhas mais compacto em legenda e referência - #1328

Merged
Rossi-Luciano merged 1 commit into
scieloorg:masterfrom
Rossi-Luciano:fix/pdf-caption-reference-line-spacing
Sep 8, 2026
Merged

fix: espaçamento entre linhas mais compacto em legenda e referência#1328
Rossi-Luciano merged 1 commit into
scieloorg:masterfrom
Rossi-Luciano:fix/pdf-caption-reference-line-spacing

Conversation

@Rossi-Luciano

@Rossi-Luciano Rossi-Luciano commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

O que esse PR faz?

Reduz o espaçamento entre linhas de legendas (figuras e tabelas) e de cada referência bibliográfica no pdf_generator, para não ficarem tão "soltas" quanto o texto do corpo.

SCL Table Heading (usado nas legendas) e SCL Paragraph Reference não têm line_spacing próprio no template. A legenda só parecia um pouco mais compacta que o corpo por usar fonte 7pt (vs 8pt do corpo) — efeito proporcional da fonte, não espaçamento proposital. A referência usa a mesma fonte 8pt do corpo, então renderizava com espaçamento idêntico ao texto corrido, sem nenhuma diferenciação visual.

Medi em pixels (200dpi) contra o corpus real: a legenda da Figura 2 de a13.xml tinha ~29.5px de distância entre linhas, proporcionalmente igual ao corpo. SCL Affiliation (que já tem line_spacing=1.0 explícito no template, de um fix anterior) mede ~26px. Apliquei paragraph_format.line_spacing = 1.0 direto no código — mesmo padrão já usado em table.py para célula de tabela — na legenda de tabela, legenda de figura e em cada parágrafo de referência. Resultado: a legenda cai para ~25.5px, equivalente ao das afiliações.

Onde a revisão poderia começar?

  • packtools/sps/formats/pdf/renderer/docx/table.py_add_caption_paragraph
  • packtools/sps/formats/pdf/renderer/docx/figure.py_add_caption
  • packtools/sps/formats/pdf/pipeline/docx.pydocx_references_pipe

Em ambas as legendas, o line_spacing é setado antes do try/except que aplica o nome do estilo, para não depender de o estilo resolver.

Como este poderia ser testado manualmente?

python -m packtools.sps.formats.pdf_generator \
  -i <artigo-com-legenda-ou-referencia-longa>.xml \
  -l layout.docx \
  -o saida.pdf \
  --libreoffice-binary libreoffice

Conferir uma legenda de figura/tabela com 2+ linhas e uma referência com 2+ linhas.

Algum cenário de contexto que queira dar?

Achado revisando visualmente o corpus de teste de 26 artigos reais (layout_examples_rafael/corpus/). Ao investigar, descartei um terceiro item do mesmo lote (afiliação de autor): medi e confirmei que SCL Affiliation já tem line_spacing=1.0 explícito no template, então já estava correto — o pitch medido (~26px) já é mais apertado do que a fonte 7pt sozinha explicaria.

Screenshots

itemB_before_after

Quais são os tickets relevantes?

Nenhuma issue aberta associada; achado durante revisão visual do corpus de teste do gerador de PDF.

Referências

N/A


Segurança da informação (NSI.04)

Seção obrigatória. Marque as opções aplicáveis e justifique quando necessário. Referência: NSI.04 - Norma de Desenvolvimento Seguro.

Este PR manipula dados sensíveis ou pessoais (LGPD)?

  • Sim — descreva os controles de proteção aplicados (criptografia, mascaramento, anonimização, etc.):
  • Não

Este PR altera autenticação, autorização, controle de acesso ou gerenciamento de sessão?

  • Sim — descreva o que mudou e por quê:
  • Não

Este PR introduz, atualiza ou remove dependências de terceiros?

  • Sim — as novas dependências foram verificadas no SBOM/Trivy sem vulnerabilidades críticas/altas em aberto?
    • Verificado e aprovado
    • Pendente / vulnerabilidade aceita com justificativa:
  • Não

Este PR foi validado pelo pipeline de segurança (SonarQube / Trivy)?

  • Sim — link do job:
  • Não aplicável a este PR (justifique): mudança isolada de formatação de espaçamento (propriedade de parágrafo do python-docx), sem I/O externo ou entrada não confiável

Este PR concatena, monta ou executa comandos SQL, HTML ou JavaScript a partir de entrada externa?

  • Sim — confirme que há sanitização/parametrização (prepared statements, escaping, etc.):
  • Não

Este PR expõe novos endpoints, telas ou serviços?

  • Sim — HTTPS obrigatório está garantido e o acesso segue o princípio de menor privilégio?
  • Não

Algum segredo, senha, chave ou token está sendo adicionado ao código-fonte?

  • Não, nenhum segredo foi commitado
  • Sim (bloquear merge e corrigir antes de prosseguir)

🤖 Generated with Claude Code

https://claude.ai/code/session_01X8r2LRJ3PGTT9vLaPtb373

SCL Table Heading (legenda de figura/tabela) e SCL Paragraph Reference
nao tem line_spacing proprio no template; a legenda so parecia um
pouco mais apertada que o corpo por usar fonte 7pt vs 8pt (efeito
proporcional da fonte, nao espacamento proposital), e a referencia usa
a MESMA fonte 8pt do corpo, entao rendia identica ao texto corrido -
sem nenhuma diferenciacao.

Medido em px (200dpi) contra o corpus real: legenda da Figura 2 de
a13.xml tinha pitch ~29.5px entre linhas, igual proporcionalmente ao
corpo; SCL Affiliation (que ja tem line_spacing=1.0 explicito no
template) mede ~26px. Aplicando paragraph_format.line_spacing = 1.0
direto no codigo (mesmo padrao ja usado em table.py pra celula de
tabela) na legenda de tabela, legenda de figura e cada paragrafo de
referencia, a legenda cai pra ~25.5px - equivalente ao das afiliacoes.

Setado antes do try/except de estilo em ambas as legendas, pra nao
depender de o nome do estilo resolver.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X8r2LRJ3PGTT9vLaPtb373
@pitangainnovare

Copy link
Copy Markdown
Contributor

Pode ser interessante, em algum momento, tratar a situação (não sei se por estilo no layout.docx ou por outra forma) situações em que o fim de uma figura coincide com o início de outra seção. Nesses casos, há pouco respiro entre as partes.

image

@Rossi-Luciano
Rossi-Luciano merged commit 1245545 into scieloorg:master Sep 8, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants