Skip to content
Back to skills

Tcc Abnt Layout

ASecurity

Confere e corrige a formatação ABNT e a paginação do TCC DOCX — numeração de páginas, quebras entre legenda e figura, legendas/fontes, recuo de parágrafo, títulos, listas pré-textuais, numeração de equações. Ativar quando o usuário pedir para "ajustar página", "deixar nas normas da ABNT", "conferir paginação/layout/formatação", "figura separada da legenda", "arrumar o pré-texto", ou reclamar que "o número da página está errado/repetido". Não redige conteúdo — para isso, ver tcc-docx-editor.

  • 2 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 30, 2026
toolspythongoshellbash

Works with

  • cli

Security analysis

A100/100

Pro scans all 9 files and shows the line behind each finding

Scanned September 30, 2026

npx -y skills add GGHB0/pll_stability_9bus --skill tcc-abnt-layout --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Tcc Abnt Layout?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Tcc Abnt Layout
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/gghb0-tcc-abnt-layout/badge)](https://www.skillsdirectory.com/skills/gghb0-tcc-abnt-layout)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: tcc-abnt-layout
description: Confere e corrige a formatação ABNT e a paginação do TCC DOCX — numeração de páginas, quebras entre legenda e figura, legendas/fontes, recuo de parágrafo, títulos, listas pré-textuais, numeração de equações. Ativar quando o usuário pedir para "ajustar página", "deixar nas normas da ABNT", "conferir paginação/layout/formatação", "figura separada da legenda", "arrumar o pré-texto", ou reclamar que "o número da página está errado/repetido". Não redige conteúdo — para isso, ver tcc-docx-editor.
version: 1.1.0
---

# TCC ABNT Layout — Formatação e Paginação

Passagem de **forma**, não de conteúdo. Responde a "está nas normas?" e
"a página quebrou no lugar certo?". O texto em si é escopo do
`tcc-docx-editor`.

**Esta skill não tem pipeline próprio.** Staging, `repack.py`,
`word_finalize.ps1`, `audit_docx.py` e a entrega ao OneDrive são todos do
`tcc-docx-editor` — inclusive o pré-check por MD5 e o backup datado. Aqui
entram só as **regras** (`regras_abnt.md`), as **decisões já tomadas neste
documento** (`decisoes.md`) e os **dois verificadores** abaixo.

## Os dois verificadores

| Script | Lê | Pega |
|---|---|---|
| `scripts/check_abnt.py <document.xml>` | o XML, sem Word | numeração de páginas (seções, `pgNumType`, header/footer even-odd), `keepNext` ausente em legenda/imagem, legenda e `Fonte:` fora do padrão, recuo de parágrafo inconsistente, estilo de título, placeholders de template, rótulo de equação |
| `scripts/pagecheck.py <arquivo.pdf>` | o PDF exportado pelo Word | o que só existe depois de paginado: página em branco, legenda numa folha e imagem na seguinte, `Fonte:` órfã, título no pé da página, lista pré-textual vazia |

`check_abnt.py` é barato e roda a qualquer momento. `pagecheck.py` exige o
PDF, que sai do `word_finalize.ps1 -Pdf` do `tcc-docx-editor`:

```bash
powershell -ExecutionPolicy Bypass -File <tcc-docx-editor>/scripts/word_finalize.ps1 \
  -In C:\Temp\tcc_edit.docx -Out C:\Temp\tcc_check.docx -Pdf C:\Temp\tcc_check.pdf
python.exe scripts/pagecheck.py C:\Temp\tcc_check.pdf
```

Os dois são **read-only**. Nenhum deles altera o documento. Cada um é uma
CLI fina sobre um módulo de conferências ao lado (`checks_xml.py`,
`checks_pdf.py`) — a regra de 200 linhas por arquivo vale para script
também. Conferência nova entra no módulo, não na CLI.

## Por que o PDF é indispensável

Metade dos defeitos de paginação **não existe no XML**. `keepNext` ausente
só vira problema quando a legenda calha de cair no pé de uma folha; um
número de página duplicado só aparece quando o Word resolve a herança de
cabeçalho entre seções. Auditar só o `document.xml` dá falso "tudo certo".

A recíproca também vale: o PDF não diz **por que** quebrou. O fluxo é
sempre `pagecheck.py` para achar → `check_abnt.py` para explicar.

## Ordem de ataque

Corrigir fora de ordem obriga a refazer. A sequência que funciona:

1. **Numeração de páginas** (`sectPr`, `pgNumType`, header/footer) — muda
   todos os números do sumário de uma vez; qualquer conferência de página
   feita antes disso vira lixo.
2. **`keepNext` em legenda + imagem** — fecha as quebras entre legenda e
   figura e **altera a paginação**, então vem antes de qualquer lista.
3. **Recuo, espaçamento e estilo de título** — também mexem na paginação.
4. **Legendas e `Fonte:`** no padrão, com campo `SEQ` se a lista for
   automática.
5. **Pré-texto** (dedicatória, epígrafe, listas, resumo).
6. **Listas de ilustrações/quadros/gráficos e sumário** — por último,
   porque só aí os números de página param de mudar.
7. **Reexportar o PDF e rodar `pagecheck.py` de novo.** A correção de uma
   quebra empurra o texto e pode criar outra adiante.

O passo 7 não é opcional. Em documento com muita figura, uma rodada só
não converge.

## Decisões deste documento — ver `decisoes.md`

A NBR deixa escolha em vários pontos (tamanho de título, recuo,
alinhamento de legenda). O que o Victor decidiu para **este** TCC está em
`decisoes.md`, com a data e o motivo. **Ler antes de propor qualquer
mudança de formatação**: uma "correção" que contraria uma decisão
registrada é regressão, não melhoria.

Se o pedido novo conflitar com uma decisão de lá, perguntar — não decidir
sozinho, e atualizar o arquivo quando a decisão mudar.

## Regras normativas — ver `regras_abnt.md`

Margens, paginação, ordem dos elementos pré-textuais, legenda de
ilustração, numeração progressiva, equações, citação longa, resumo. Cada
regra com a NBR e o item que a sustenta, e a marca de quando este
documento se afasta dela de propósito.

## Divisão de trabalho por modelo

Mesma lógica do `tcc-docx-editor`:

- **Opus** — só para decisão de formatação com trade-off (mudar escala de
  título, reclassificar figura em quadro/gráfico) e para redigir legenda
  que não existe.
- **Sonnet** (default) — rodar os verificadores, ler a saída, mapear
  blocos, escrever os `gen_*.py`.
- **Haiku** (`docx-runner`) — staging, repack, finalize, entrega.

## Ilustração ou equação nova depois da passagem

O documento já está no padrão (entrega de 2026-09-13). Conteúdo novo entra
nele, senão a próxima passagem tem de desfazer:

- **Ilustração**: trio `legenda()` + `imagem()` + `fonte()` de
  `scripts/campos.py`. Tipo por D9: toda ilustração é **Figura** (esquema
  ou curva); grade de texto/dados é **Tabela**. Não existe mais Gráfico nem
  Quadro. O número passado é só o cache; o `word_finalize.ps1` renumera e
  reconstrói as listas.
- **Remissão** concorda com o tipo ("a Figura 5.16", "a Tabela 4.1").
  Inserir no meio do capítulo desloca as seguintes: varrer com `find_text.py`.
- **Equação**: rótulo `(N.M)` na coluna direita da tabela invisível
  (`kb/tcc-word/docx/equacoes.md`), nunca `EQUAÇÃO N.M`.
- **Parágrafo de corpo**: recuo 708, justificado, sem espaço antes e
  depois (D6), via `ppr_edit`.
- **Documento mudou de tamanho**: atualizar o `74 f.` da referência do resumo.
- Fechar com `check_abnt.py` e `pagecheck.py`, como na passagem.

## Armadilhas desta passagem

- **`keepNext` em legenda **e** imagem.** Antes da passagem eram zero
  ocorrências; hoje são 97. A legenda segura a imagem, a imagem segura o
  `Fonte:`. Ilustração nova sem os dois volta a quebrar entre folhas.
- **Um `sectPr` sem `footerReference` herda o da seção anterior.** Foi
  isso que produziu número no topo e no rodapé em toda página par. Não
  basta limpar a seção 1: a seção seguinte precisa declarar o próprio
  rodapé, mesmo que vazio.
- **`evenAndOddHeaders` é global** (`settings.xml`), não por seção. Com
  ele ligado, toda seção precisa dos quatro pares header/footer
  even+default, ou herda o que sobrou.
- **Legenda como texto corrido não gera lista automática.** Sem campo
  `SEQ`, a ilustração some da lista do seu tipo. Montar por
  `scripts/campos.py`.
- **Contar folha ≠ número impresso.** Depois de um `pgNumType w:start`, o
  número da folha e o número impresso divergem. Em relatório para o
  usuário, **sempre dizer qual dos dois** está sendo citado; o padrão
  aqui é "folha" = posição física no PDF.
- **O sumário e as listas se reconstroem sozinhos** no `word_finalize.ps1`
  (duas voltas, porque a lista pode crescer e empurrar o sumário). Nunca
  editar número de página de entrada à mão.
- **Editar `pPr` sempre por `scripts/ppr.py`.** O schema tem ordem de
  filhos, e a regex plana de parágrafo engole o `<w:p .../>` auto-fechado
  junto com o seguinte: editar esse span sem tratar o prefixo deixou uma
  tag aberta em 2026-09-13 e o XML não parseou.
- **O Word ignora espaço-antes logo depois de `pageBreakBefore`.** Para
  levar dedicatória e epígrafe ao pé da folha, a quebra vai num parágrafo
  vazio e o espaço no parágrafo seguinte.
- **Parágrafo só com `<w:br w:type="page"/>` gera folha em branco** quando
  cai numa folha que já acabou cheia. Capítulo abre por `pageBreakBefore`
  no título.
- **O heredoc do Bash neste ambiente reduz barra dupla a simples.** Gerador
  com regex ou instrução de campo (`SEQ Figura \* ARABIC \s 1`) vai para
  arquivo pela ferramenta Write, nunca por `cat <<EOF`.
- **Olhar o PDF renderizado, não só o `pagecheck.py`.** Ele não viu a
  dedicatória no topo nem os parágrafos sem justificar; o render viu.
- As armadilhas gerais de OOXML (`ET.write` que corrompe, `proofErr`,
  `sectPr` por `rindex`) continuam valendo — `kb/tcc-word/docx/armadilhas_xml.md`.

## KB

Estado ABNT do documento e histórico das passagens de formatação:
`kb/tcc-word/docx/abnt_layout.md`. Atualizar junto com a entrega, como manda
`feedback_document_everything`.

Files in this skill

  • SKILL.md8.6 KB
  • decisoes.md8.7 KB
  • regras_abnt.md7.2 KB
  • scripts/campos.py3.4 KB
  • scripts/check_abnt.py2 KB
  • scripts/checks_pdf.py4.8 KB
  • scripts/checks_xml.py7.5 KB
  • scripts/pagecheck.py3.4 KB
  • scripts/ppr.py4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…