Giter Club home page Giter Club logo

pandoc_abnt's Introduction

pandoc_abnt

Filtro pandoc para elaborar documentos de acordo com as normas da abnt.

Instalação

$ gem install pandoc_abnt

Requer pandoc v1.19.2.1 ou superior.

Utilização

O pandoc_abnt foi elaborado para ser utilizado com o limarka, mas projetado para ser utilizado separadamente:

pandoc --wrap=none -s --filter pandoc_abnt documento.md -o documento.pdf

Especificação técnica

A especificação técnica do panco_abnt é baseada em testes automatizados e sempre retrata o funcionamento real e testado da ferramenta.

AVISO: A documentação abaixo pode está desatualizada. Consulte a especificação acima para obter informações mais confiáveis.

Funcionalidades

Fonte de Figuras e Tabelas

Para adicionar uma fonte a figura ou tabela, basta adicionar no parágrafo seguinte: Fonte: texto da fonte.

Exemplo de Figura:

![Título](imagem.png){#id escala=0.3}

Fonte: Autor.

Exemplo de Tabela:

  Right     Left     Center     Default
-------     ------ ----------   -------
     12     12        12            12
    123     123       123          123
      1     1          1             1

: Demonstration of simple table syntax. \label{mytable}

Fonte: Autor.

Você pode utilizar qualquer uma das sintaxes de tabela suportadas pelo pandoc.

OBS: O comando \label{} é necessário para permitir refenciar a tabela no Latex.

Quadros

Exemplo de sintaxe para criar Quadros:

Quadro perfil: Perfil dos voluntários do experimento

|Vol.|Formação acadêmica           |Experiência c/ Latex| Expeiência c/ Markdown|
|:-:|:----------------------------:|:------------------:|:---------------------:|
|1  |Ciência da Computação         |ShareLatex          |    Readme/Github      |
|2  |Engenharia da Computação      |Viu prof. utilizando|         -             |
|3  |Engenheiro elétrico (mestrando)|Utiliza para tudo  |         -             |

Fonte: Autor.

OBS: Esse Quadro deve ser referencia no texto com \autoref{perfil}.

Alíneas

A ABNT especifica que o texto das seções podem ser divididos em Alíneas, na prática você PODE utilizar uma lista ordenada por letras para separar o conteúdo de uma seção:

a) primeira alínea;

    Texto dentro da primeira alínea.

b) segunda alínea;

    Texto dentro da segunda alínea.

    Mais texto dentro da segunda alínea.

c) terceira alínea;

    Texto dentro da terceira alínea.

d) qualquer coisac.

    Texto dentro da quarta alínea.

Texto fora das alíneas.

OBS: Perceba que existem 4 espaços em branco indentado os parágrafos dentro das alíneas.

O pandoc_abnt implementa as seguintes funcionalidas:

  • Adiciona o parêntese automaticamente, caso tenha utilizado ponto: a. -> a)
  • Adiciona o ; em todas as alíneas, menos a última, que finaliza com ponto .. Mesmo que você que você tenha colocado a pontuação errada.
  • Aplica letra minúscula no início das alíneas automaticamente.

A alínea a seguir estaria em não conformidade com as Normas da ABNT (NBR 6024:2012). No entanto, o pandoc_abnt ajusta automaticamente para obter o resultado da alínea apresentada anteriormenete, elas são equivalentes:

a. Primeira alínea

    Texto dentro da primeira alínea.

b. Segunda alínea

    Texto dentro da segunda alínea.

    Mais texto dentro da segunda alínea.

c. Terceira alínea.

    Texto dentro da terceira alínea.

d. Qualquer coisac;

    Texto dentro da quarta alínea.

Texto fora das alíneas.

Pontuação das listas

De forma semelhante as pontuações das listas são inseridas automaticamente:

- Abacate
- Banana
- Côco

Será automaticamente corrigido para:

- abacate;
- banana;
- côco.

Para manter a primeira letra da lista em maiúsculo, deve-se utilizar um nonbreaking space:

- \ Alberto
- \ Bernadete
- \ Charles

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

A documentação é elaborada através das features do cucumber.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/limarka/pandoc_abnt. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

The gem is available as open source under the terms of the MIT License.

pandoc_abnt's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

pandoc_abnt's Issues

Problema na execução dos testes do limarka

Erro: /home/travis/.rvm/gems/ruby-2.3.1/gems/pandoc_abnt-0.1.2/lib/pandoc_abnt/figura_filter.rb:60:in `filtra_json': undefined method `each' for nil:NilClass (NoMethodError)
	from /home/travis/.rvm/gems/ruby-2.3.1/gems/pandoc_abnt-0.1.2/exe/pandoc_abnt:12:in `<top (required)>'
	from /home/travis/.rvm/gems/ruby-2.3.1/bin/pandoc_abnt:23:in `load'
	from /home/travis/.rvm/gems/ruby-2.3.1/bin/pandoc_abnt:23:in `<main>'
	from /home/travis/.rvm/gems/ruby-2.3.1/bin/ruby_executable_hooks:15:in `eval'
	from /home/travis/.rvm/gems/ruby-2.3.1/bin/ruby_executable_hooks:15:in `<main>'
pandoc: Error running filter pandoc_abnt

Incluir opção para usar o formato de citação do Pandoc Markdown

(A partir de sugestão dada no canal do Limarka no gitter).

Eduardo, no último mês fiz uma extensa pesquisa para ferramentas que possam substituir o Word para escrever minha dissertação de mestrado e o Limarka foi uma das mais promissoras que encontrei...
A automatização da formatação da abnt usando a simplicidade do markdown com templates de latex acertou na mosca.

Após a formatação do padrão, acho que o segundo ponto que pode ser facilitado é o uso das citações a partir do arquivo .bib durante a escrita... Nesse ponto alguns editores de texto como o sublime, o brackets e o atom apresentam alguns plugins que tem a intenção de cumprir esse papel para documentos acadêmicos.

Acontece que a maioria desses plugins acadêmicos para editores se utilizam da sintaxe do Pandoc Markdown para as citações [@citekey], o que não é o caso do Limarka (apesar de fazer uso do Pandoc como seu interpretador para markdown, se é que entendi direito)... O que acaba tornando o limarka incompatível com algumas dessas ferramentas de automação da escrita...

Nesse sentido, destaco aqui o plugin autocomplete-bibtex para o atom. Esse plugin pretende mostrar uma lista suspensa abaixo do cursor com base no arquivo .bib após o usuário inserir o código de citação, facilitando a consulta à bibliografia no momento mesmo da escrita. Eu tentei usar o formato de citção do latex na configuração do plugin, mas sem sucesso e o mesmo ocorreu com outras ferramentas do tipo. A única que consegui que funcionasse bem até agora foi Citebibtex para o Sublime, mas só porque essa ferramenta mostra a lista ao pressionar o F10 ao invés de usar o autocomplete.

Resumindo, no fim das contas a falta dessas ferramentas não atrapalha e nem impede o uso do Limarka, mas são recursos extras úteis que podem ser incorporados facilmente no fluxo de trabalho se a compatibilidade total com o Pandoc Markdown for adotada, por isso que penso que uma opção de configuração que permita escolher entre um formato ou outro de citação pode tornar o Limarka mais aberto a diferentes soluções de trabalho e portanto mais completo...

Obrigado!

Adicionar pontuação final quando alinea termina em ')'

Ver como ficou:

• Identificar linguagem de marcação mais apropriada para escrita de TCCs;
• Analisar requisitos de formatação de TCCs (incluir as normas da ABNT)
• Implementar uma aplicação que possibilite usuários escrever TCCs nacionais utilizando uma linguagem de marcação leve;
• Avaliar o uso da linguagem de marcação leve para a escrita de TCCs nacionais por estudantes.

Geração automática de siglas a partir do texto

Segundo as normas da ABNT as siglas devem ser apresentadas antes de utilizadas.

A funcionalidade consiste em ler o texto e procurar por apresentação de siglas, independente de onde são utilizadas:

A ABNT é responsável por...
A Associação Brasileira de Normas Técnicas (ABNT) define que...

Nesse texto acima percebe-se que a sigla foi apresentada na segunda linha. O que estaria errado, deveria ser apresentado na primeira vez que foi utilizada. Essa funcionalidade iria encontrar as siglas, adicionar à lista de siglas e re-organizar o texto para apresentar a sigla na primeira utilização. O texto seria alterado para:

A Associação Brasileira de Normas Técnicas (ABNT) é responsável por...
A ABNT define que...

E a sigla ABNT seria adicionada à lista de siglas.

Problema de execução ou instalação no Windows

@RodrigoDAlmeida relatou o seguinte problema no windows:

Senhores, estou tentando gerar o PDF a partir do modelo "trabalho-academico-limarka-master", segui todos as instruções do tutorial do wiki no github, mas segue apresentando esse erro. A instalação do pandoc_abnt foi feita conforme a imagem 3. Alguém poderia me auxiliar?

Erro ao compilar com item vazio de lista

Comportamento esperado: Que o limarka compile mesmo se faltar algum item na lista.

Passos para reprodução:

Lista:

1. exemplo de item 1;
2. exemplo de item 2;
3. exemplo de item 3;
4.

Erro:

╰─$  limarka exec
Erro: /home/yzakius/.rvm/gems/ruby-2.4.0/gems/pandoc_abnt-1.1.2/lib/pandoc_abnt/lista_filter.rb:131:in `primeiro_tolken_do_item': undefined method `[]' for nil:NilClass (NoMethodError)
    from /home/yzakius/.rvm/gems/ruby-2.4.0/gems/pandoc_abnt-1.1.2/lib/pandoc_abnt/lista_filter.rb:85:in `block in processa_items_da_lista'
    from /home/yzakius/.rvm/gems/ruby-2.4.0/gems/pandoc_abnt-1.1.2/lib/pandoc_abnt/lista_filter.rb:80:in `each'
    from /home/yzakius/.rvm/gems/ruby-2.4.0/gems/pandoc_abnt-1.1.2/lib/pandoc_abnt/lista_filter.rb:80:in `processa_items_da_lista'
    from /home/yzakius/.rvm/gems/ruby-2.4.0/gems/pandoc_abnt-1.1.2/lib/pandoc_abnt/lista_filter.rb:62:in `block in filtra_json'
    from /home/yzakius/.rvm/gems/ruby-2.4.0/gems/pandoc_abnt-1.1.2/lib/pandoc_abnt/lista_filter.rb:60:in `each'
    from /home/yzakius/.rvm/gems/ruby-2.4.0/gems/pandoc_abnt-1.1.2/lib/pandoc_abnt/lista_filter.rb:60:in `filtra_json'
    from /home/yzakius/.rvm/gems/ruby-2.4.0/gems/pandoc_abnt-1.1.2/exe/pandoc_abnt:13:in `<top (required)>'
    from /home/yzakius/.rvm/gems/ruby-2.4.0/bin/pandoc_abnt:23:in `load'
    from /home/yzakius/.rvm/gems/ruby-2.4.0/bin/pandoc_abnt:23:in `<main>'
    from /home/yzakius/.rvm/gems/ruby-2.4.0/bin/ruby_executable_hooks:15:in `eval'
    from /home/yzakius/.rvm/gems/ruby-2.4.0/bin/ruby_executable_hooks:15:in `<main>'
pandoc: Error running filter pandoc_abnt
Filter returned error status 1

Especificações do sistema:
limarka 0.7.2

Cadastrado originalmente em abntex/limarka#151 por @yzakius

Aplicando minúsculo no primeiro caracter de listas não ordenadas

Veja o problema:

• aBNT NBR 14724, Informação e documentação - Trabalhos acadêmicos - Apresentação;
• aBNT NBR 6023, Informação e documentação - Referências - Elaboração;
• aBNT NBR 6024, Informação e documentação - Numeração progressiva das seções de um documento escrito - Apresentação;
• aBNT NBR 6027, Informação e documentação - Sumário - Apresentação;
• aBNT NBR 6028, Informação e documentação - Resumo - Procedimento;
(...)

Parágrafo com "XXX." causa erro

Erro: /var/lib/gems/2.3.0/gems/pandoc_abnt-1.0.2/lib/pandoc_abnt/lista_filter.rb:127:in `primeiro_tolken_do_item': undefined method `[]' for nil:NilClass (NoMethodError)
	from /var/lib/gems/2.3.0/gems/pandoc_abnt-1.0.2/lib/pandoc_abnt/lista_filter.rb:80:in `block in processa_items_da_lista'
	from /var/lib/gems/2.3.0/gems/pandoc_abnt-1.0.2/lib/pandoc_abnt/lista_filter.rb:75:in `each'
	from /var/lib/gems/2.3.0/gems/pandoc_abnt-1.0.2/lib/pandoc_abnt/lista_filter.rb:75:in `processa_items_da_lista'
	from /var/lib/gems/2.3.0/gems/pandoc_abnt-1.0.2/lib/pandoc_abnt/lista_filter.rb:56:in `block in filtra_json'
	from /var/lib/gems/2.3.0/gems/pandoc_abnt-1.0.2/lib/pandoc_abnt/lista_filter.rb:54:in `each'
	from /var/lib/gems/2.3.0/gems/pandoc_abnt-1.0.2/lib/pandoc_abnt/lista_filter.rb:54:in `filtra_json'
	from /var/lib/gems/2.3.0/gems/pandoc_abnt-1.0.2/exe/pandoc_abnt:11:in `<top (required)>'
	from /usr/local/bin/pandoc_abnt:23:in `load'
	from /usr/local/bin/pandoc_abnt:23:in `<main>'
pandoc: Error running filter pandoc_abnt
Filter returned error status 1

Requisito inicial: figuras

$ pandoc -t json
![Título](imagem.png){#id width=30%}                              

Fonte: Autor.

[{"unMeta":{}},[{"t":"Para","c":[{"t":"Image","c":[["id",[],[["width","30%"]]],[{"t":"Str","c":"Título"}],["imagem.png","fig:"]]}]},{"t":"Para","c":[{"t":"Str","c":"Fonte:"},{"t":"Space","c":[]},{"t":"Str","c":"Autor."}]}]]

Transformar o seguinte código:

![Título](imagem.png){#id width=30% fonte="Fonte da *figura*"}

Em:

\begin{figure}[htbp]
\caption{\label{id}Legenda da figura.}
\begin{center}
\includegraphics[width=0.30\textwidth]{imagem.png}
\end{center}
\legend{Fonte da \emph{figura}}
\end{figure}

Referências:

$ pandoc -t json
![Título](imagem.png){#id width=30% fonte="Fonte da *figura*"}

[{"unMeta":{}},[{"t":"Para","c":[{"t":"Image","c":[["id",[],[["width","30%"],["fonte","Fonte da *figura*"]]],[{"t":"Str","c":"Título"}],["imagem.png","fig:"]]}]}]]

$ pandoc -t json
![Título](imagem.png){#id width=30% fonte="Fonte da *figura*"}
dentro do parágrafo.

[{"unMeta":{}},[{"t":"Para","c":[{"t":"Image","c":[["id",[],[["width","30%"],["fonte","Fonte da *figura*"]]],[{"t":"Str","c":"Título"}],["imagem.png",""]]},{"t":"SoftBreak","c":[]},{"t":"Str","c":"dentro"},{"t":"Space","c":[]},{"t":"Str","c":"do"},{"t":"Space","c":[]},{"t":"Str","c":"parágrafo."}]}]]

$ pandoc -t latex
![Título](imagem.png){#id width=30% fonte="Fonte da *figura*"}

\begin{figure}[htbp]
\centering
\includegraphics[width=0.30000\textwidth]{imagem.png}
\caption{Título}\label{id}
\end{figure}

$ pandoc -t json
![Título](imagem.png){#id width=30%}                              

Fonte: Autor.

[{"unMeta":{}},[{"t":"Para","c":[{"t":"Image","c":[["id",[],[["width","30%"]]],[{"t":"Str","c":"Título"}],["imagem.png","fig:"]]}]},{"t":"Para","c":[{"t":"Str","c":"Fonte:"},{"t":"Space","c":[]},{"t":"Str","c":"Autor."}]}]]


$ pandoc -t json
![Título](imagem.png){#id width=30%} Fonte: Autor.

[{"unMeta":{}},[{"t":"Para","c":[{"t":"Image","c":[["id",[],[["width","30%"]]],[{"t":"Str","c":"Título"}],["imagem.png",""]]},{"t":"Space","c":[]},{"t":"Str","c":"Fonte:"},{"t":"Space","c":[]},{"t":"Str","c":"Autor."}]}]]


$ pandoc -t json
![Título](imagem.png){#id width=30%} 
Fonte: Autor.          

[{"unMeta":{}},[{"t":"Para","c":[{"t":"Image","c":[["id",[],[["width","30%"]]],[{"t":"Str","c":"Título"}],["imagem.png",""]]},{"t":"SoftBreak","c":[]},{"t":"Str","c":"Fonte:"},{"t":"Space","c":[]},{"t":"Str","c":"Autor."}]}]]

Quadros devem ter linhas verticais

Os quadros devem ter linhas verticais:

\begin{longtable}[]{@{}clr@{}}

transformar em:

\begin{longtable}[]{|c|l|r|}

https://en.wikibooks.org/wiki/LaTeX/Tables

Ver exemplo de diferença:

Quadro qq: Conteúdo irrelevante

|Outra   | Tabela    |
|--------|-----------|
|Mais    | coisas    |
|Qualquer| coisa mais|

Fonte: demais coisas.

quadro-fechado

\renewcommand\LTcaptype{quadro}
\begin{longtable}[]{@{}ll@{}}
\caption{Conteúdo irrelevante\label{qq}}\tabularnewline
\toprule
Outra & Tabela\tabularnewline
\midrule
\endhead
Mais & coisas\tabularnewline
Qualquer & coisa mais\tabularnewline
\bottomrule
\caption*{Fonte: demais coisas.}
\end{longtable}
\renewcommand\LTcaptype{table}

DEVERIA SER:

\renewcommand\LTcaptype{quadro}
\begin{longtable}[]{|l|l|}
\caption{Conteúdo irrelevante\label{qq}}\tabularnewline
\toprule
Outra & Tabela\tabularnewline
\midrule
\endhead
Mais & coisas\tabularnewline
Qualquer & coisa mais\tabularnewline
\bottomrule
\caption*{Fonte: demais coisas.}
\end{longtable}
\renewcommand\LTcaptype{table}

Inclusão de Quadros

  • A ABNT faz distinção entre Tabela e Quadro.
  • Markdown possui sintaxe apenas para criação de Tabelas.

Este issue é para definir uma sintaxe para criação de Quadros e implementá-la.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.