ppt — Gere apresentações profissionais com código
Apresentações feitas com código, sem arrastar templates: reproduzíveis (mude os dados e reexecute o script), versionáveis no Git, coordenadas precisas até 0.01 polegada; sem WYSIWYG, a verificação visual é feita na Etapa 4.
Etapa 1 · Pesquisa e texto (proibido inventar)
Responda a três perguntas do público antes de começar: Para quem é (leigo / especialista / cliente)? O que o público já sabe sobre o projeto? Que três frases eles devem conseguir repetir depois de ver? Escreva as respostas no cabeçalho do texto; todas as decisões de conteúdo serão baseadas nisso.
Use apenas dados reais do projeto (README / CLAUDE.md / docs / backend de dados, escolha a fonte conforme o tipo). Números sem fonte não entram no PPT; fatos que o público não precisa saber não vão para o corpo — métricas internas (número de funções, constantes de API, codinomes internos) são descartadas por padrão, só ficam se o público for técnico.
Explore conteúdo, não liste nomes: Apenas coletar números e nomes de funcionalidades não é pesquisa. De acordo com o tipo de PPT: técnico/produto → decisões de design + comparação de resultados; portfólio → detalhes e escolhas do trabalho; relatório de dados → metodologia e linha de base; narrativa de marca → pessoas, cenários, reviravoltas.
Esboço antes de página por página: Após a pesquisa, escreva o esboço narrativo — uma linha principal (todo o PPT argumenta uma única coisa) + três respostas de abertura (o que é / para quem / o que resolve) + o papel de cada página na cadeia de argumentação (o que herda da página anterior, o que prepara para a próxima). Conceitos são explicados antes de serem usados, sem referências futuras; duas páginas consecutivas que não se conectam = reorganizar. O texto de cada página (título + pontos principais + roteiro de narração; o roteiro vai para as notas do apresentador) é escrito sob o esboço. Os títulos devem contribuir para a progressão, não ser slogans independentes.
Duas versões: A primeira versão é completa — redação narrativa, assumindo que o público é iniciante, explicando o que é, para quem e o que resolve, permitindo ser longa; a segunda versão é de refinamento — primeiro use o humanizer para remover artificialidade, depois apare conforme as quatro regras abaixo. O humanizer é uma ferramenta de refinamento, não um modelo para a primeira versão; se você escrever a primeira versão seguindo seus padrões, ela ficará enxuta e confusa, começando a gritar slogans sem explicar nada.
- Sem preenchimento vazio: Pontos principais com detalhes (função com motivo do design ou resultado, dados com metodologia), remova listas de nomes vazios.
- Números com contexto: Valor + metodologia + composição ou comparação, e que sejam números que o público se importa; números sem contexto não são o elemento visual principal.
- Cada página com ≥3 fatos verificáveis e específicos; cobrindo o layout e lendo apenas o texto, ele deve "contar" algo, não ser uma "lista".
- Regra de posição: Posições grandes (título principal da capa / texto grande da página final / nome da seção) aceitam apenas frases de afirmação ou identidade (com opinião, que soem como slogan); nomes de domínio, número de versão, datas, estatísticas vão para subtítulo ou metadados.
Tolerância zero para jargões de estilo, em duas camadas: jargões corporativos (empoderar / sinergia / verticalizar / ecossistema / ponta a ponta) são removidos diretamente; jargões técnicos (constantes de API / nomes de funções internas / codinomes de sistema / detalhes de implementação) são filtrados pelo público — PPT para leigos ou remove ou explica na mesma página. Números antes de adjetivos; títulos escrevem opinião, não frases nominais; travessões proibidos (acentuado ou não). Texto de itens importantes deve ser aprovado pelo usuário antes da diagramação.
Etapa 2 · Sistema de design (definido antes de escrever código, sem alterações)
| Dimensão | Regra |
|---|---|
| Paleta | Extraída da linguagem visual do projeto (seção visual do README / cor principal do site / identidade visual da marca); se não houver, use use_theme('warm' / 'tech' / 'forest'). Sistema fechado 7+1 (7 funções + branco), sem adição de cores; texto pequeno sobre fundo ≥4,5:1 |
| Grade | 16:9 (13.333 × 7.5 pol) · Margem 0,55 · Número de página (12,35; 7,02) · Barra curta coral no topo + rótulo da seção |
| Tamanho da fonte | 54 capa / 40 números grandes / 30 título da página / 19 título do card / 13 corpo / 11 secundário / 9 nota, sem valores intermediários |
| Fonte | Chinês: Microsoft YaHei; código / domínio / números / versão sempre Consolas |
| Densidade | Um argumento por página; texto com mais de 3 linhas quebra a página, tabela com mais de 6 linhas reduz linhas |
Etapa 3 · Geração
pip install python-pptx -i https://pypi.tuna.tsinghua.edu.cn/simple(primeira vez)- Copie
templates/primitives.py+animate.pypara a pastascripts/do projeto alvo, escrevagen-<nome>-deck.py - Coordenadas calculadas com expressões (ex.:
Inches(0.55 + i * 3.13)), sem números mágicos; antes de inserir texto, usecheck_fit()para verificar,[FIT-WARN]indica quebra de linha/página
Animações (opcional; Windows + MS Office + pywin32). Por padrão, auto_deck() lida com tudo (capa em cascata / cards float_up / números zoom / links wipe / linhas da tabela em cascata rápida 0,06s / números de seção wipe up). Ajustes manuais apenas:
anim = Anim(prs)
anim.auto_deck() # Anima toda a apresentação automaticamente
anim.fx(footer, 'fade', dur=0.4) # Aplica efeito a um elemento específico
anim.chart(gf, 'series') # Gráfico nativo por série
P.set_transition(prs, 'fade') # Transição uniforme (páginas com morph são puladas automaticamente)
P.auto_show(prs) # Estima duração da narração e avança automaticamente: apresentação inteira reproduzida, gravação = vídeo bruto
prs.save('deck.pptx')
anim.apply('deck.pptx') # Deve ser após save; escreve COM + lê e verifica
# Ajustes: anim.stagger(P.shape_groups(s, 'card'), 'float_up', step=0.12)
# Animação de crescimento (morph real, ocupa duas páginas consecutivas, auto pula automaticamente; verifique EntryEffect==3954; 2019+, WPS degradado para fade):
P.growth_chart(prs, 6, 'Crescimento', 'Título', cats, vals, highlight=2) # Barras/colunas
P.growth_line(prs, 8, 'Tendência', 'Título', cats, vals, highlight=5) # Linha
P.growth_donut(prs, 10, 'Mix', 'Título', cats, vals) # Rosca
Lista de efeitos (testado COM): fade / wipe / appear / float_up / float_down / zoom / grow_turn / ease_in / split / wheel / stretch; efeitos ultrapassados não são usados. Ritmo > efeito: duração 0,40,6s, intervalo em cascata 0,10,2s, ≤2 efeitos por página, decorações fixas (barra curta superior / número de página / linha inferior) não entram na animação; gráficos de dados sempre com growth_*, gráfico nativo apenas quando o PowerPoint precisa alterar dados após entrega.
Editar PPTX existente (por script, proibido manual, salvar com novo nome): P.deck_replace(prs, {'Nome Antigo': 'Nome Novo'}) substitui em toda a apresentação (incluindo notas); P.deck_recolor(prs, dict(zip(P.THEMES['warm'].values(), P.THEMES['tech'].values()))) altera o tema de toda a apresentação.
Padrões de página (dicionário, não checklist: escolha o padrão conforme o esboço narrativo da Etapa 1, não crie conteúdo para preencher padrões; repetir o mesmo padrão é aceitável, uma apresentação com 9 padrões diferentes de uma vez é uma exposição de capacidade, não uma narrativa; densidade é alimentada pela Etapa 1, não pelo padrão):
| Padrão | Função | Uso |
|---|---|---|
| Capa | slide_cover | Abertura: título grande 54 + bloco de cor vertical à direita |
| Página de seção | slide_section | Navegação para apresentações com 12+ páginas, estilo revista (linhas de moldura + número de sequência com marca d'água + itens) |
| Linha do tempo | slide_timeline | Evolução / roteiro, destaca a posição atual |
| Página de comparação | slide_versus | A/B, antes/depois, selo VS no centro |
| Página de citação | slide_quote | Uma frase que vale uma página inteira (PPT com 12+ páginas) |
| Grade de cards | slide_cards | Funções/módulos paralelos, quebra automática de linha |
| Mural de números | slide_numbers | Visão geral de indicadores de mesmo peso |
| Página de mídia | slide_media | Captura de tela + pontos principais; sidebar= imagem grande 60% + anotações + rodapé |
| Painel de alta densidade | slide_dense | Explicar um subsistema em uma página: área principal 60% + lista lateral agrupada |
| Tabela verdadeira | slide_table | Comparação de API/modelo/lista, 6~9 linhas, hierarquia de largura de coluna |
| Diagrama de fluxo | slide_chain | Fluxo de arquitetura, destaque com cor invertida + cartões de subs |
| Lista de duas colunas | slide_rows | Pilha técnica / configuração |
| Gráfico de crescimento | growth_chart / line / donut | Dados de crescimento com morph real |
| Gráfico nativo | bar / line / donut_chart | Quando o PowerPoint precisa alterar dados após entrega |
| Página final | slide_closing | Informações de contato; slogan= texto grande personalizado (frase de afirmação) |
Etapa 4 · Verificação visual (obrigatório, não pule)
Três níveis, automação primeiro, humano apenas na versão final:
① Triagem programática: Converta para PDF via Office COM (Presentations.Open depois SaveAs("<saida>.pdf", 32)) → python <pasta_da_skill>/templates/verify.py <saida>.pdf. Verifique vazamento de página, placeholder, contraste WCAG (texto decorativo ≥72pt isento); código de saída 1 = problema, modifique o script e reexecute.
② Inspeção visual cega: Renderize PNG com pymupdf (fitz + get_pixmap(dpi=100)) → entregue a um subagente sem contexto de geração para duas perguntas: primeiro, página por página, verifique quatro itens (vazamento / glifo / alinhamento / contraste); segundo, teste de reprodução do público — mostre apenas as primeiras 1/3 páginas, pergunte "O que é isso, para quem é, o que resolve". Se não responder, a Etapa 1 (público) ou a abertura não estão corretas, volte e reescreva o texto antes de gerar novamente. No prompt da inspeção cega, não presuma isenções (não diga "isso é intencional"): elementos cortados pela borda da página, texto decorativo grande e de baixo contraste — trate como suspeitas. Encontre problemas, modifique o script e reexecute, proibido editar pptx manualmente.
Use caminhos absolutos para imagens reais na verificação visual; verifique a versão ou hash atual. Quando houver limitação de caminho de ferramentas específicas, escolha um caminho compatível, não force a cópia de diretórios.
③ Aprovação final do usuário: Após os dois primeiros níveis resolverem problemas mecânicos, o usuário vê apenas o resultado final.
Etapa 5 · Entrega
Relatório: número de páginas + lista de páginas / caminho e tamanho do arquivo / conclusão da verificação de três níveis / número de páginas com roteiro de narração / duração total da reprodução automática / localização do script de geração (reproduzível). Envie o script para o repositório Git (o PPTX não vai para o Git).
Limites e Armadilhas
- Sem MS Office → Etapa 4 degradada para LibreOffice
soffice --convert-to pdf; sem ambos → reporte claramente "verificação visual não realizada" - Console GBK: print proibido de caracteres não ASCII, use
OK - Largura de coluna de tabela nativa pptx descontrolada → sempre desenhe linhas de tabela manualmente (box + text linha por linha)
- Falta de glifos chineses → configure YaHei no nível do run (primitives já trata)
- Shape_id é independente por página, não único; animate.py localiza pela árvore XML, em desenvolvimento secundário não pesquise globalmente por id; pywin32:
pip install pywin32 -i https://pypi.tuna.tsinghua.edu.cn/simple - docx / xlsx podem reutilizar a ideia de primitives, mas a tabela de padrões de página se aplica apenas a pptx
Workflow e Arquivamento Atuais
O diretor de conteúdo é responsável pelo público, origem do material e esboço narrativo; o PPT mantém o objetivo de entrega de slides editáveis. Gere após confirmação do design; regras de quadros de vídeo não se aplicam ao PPT. Script de geração, dados de entrada, materiais necessários e seus hashes são preservados com a receita; a lista de entrega declara PPT/PDF/capa; antes da verificação de restauração do arquivo, não limpe. A verificação visual e a aprovação final do usuário são relatadas separadamente.