Pygments é um excelente pacote em Python destinado à coloração de sintaxe (syntax highlighting), sendo possível utilizá-lo, inclusive, em documentos LaTeX. Este pacote fornece um lexer para a linguagem Portugol Studio.
Após a instalação do Python 3, você provavelmente poderá executar o comando a seguir a fim de instalar o Pygments:
$ pip install pygments
Note que
$
indica o prompt do shell, você não deve digitar isso.
Algumas variações desse comando podem aparecer a depender da plataforma, por exemplo:
$ pip3 install pygments
$ python3 -m pip install pygments
$ python -m pip install pygments
Após instalar com sucesso o Pygments, você pode instalar o lexer para Portugol Studio:
$ pip install pygments-portugol
Para utilizar o lexer, o procedimento é equivalente a qualquer outra linguagem suportada pelo Pygments. Utilize portugol
ou portugolstudio
como nome da linguagem. Por exemplo, o código em Python a seguir ilustra como ler um arquivo code.por
e salvar em HTML no arquivo formatted.html
.
from pygments import highlight
from pygments.lexers import get_lexer_by_name
from pygments.formatters import HtmlFormatter
with open("./code.por", "r") as fl:
code = fl.read()
lexer = get_lexer_by_name("portugol", stripall=True)
formatter = HtmlFormatter(linenos=True, noclasses=True)
result = highlight(code, lexer, formatter)
with open("./formatted.html", "w") as fl:
fl.write(result)
Clique aqui para ver o resultado.
Para tipografar um código em LaTeX com o Pygments, pode-se utilizar o pacote minted
. O código a seguir é um exemplo. A fonte DejaVuSansMono foi utilizada apenas por questões estéticas. As duas linhas referentes à fonte podem ser removidas ou substituídas. Caso queira usar pdfLaTeX, remova-as.
% !TeX program = xelatex
\documentclass{article}
\usepackage{fontspec} % remover caso esteja usando pdfLaTeX
\usepackage{DejaVuSansMono} % remover caso esteja usando pdfLaTeX
\setmonofont[Scale=MatchLowercase]{DejaVuSansMono} % remover caso esteja usando pdfLaTeX
\usepackage{minted} % importa o pacote para que possamos usar
\begin{document}
O código a seguir ilustra um fatorial recursivo no Portugol Studio.
\begin{minted}[autogobble, linenos]{portugol}
programa
{
funcao inicio()
{
inteiro numero
escreva("Digite um número: ")
leia(numero)
limpa()
escreva("O fatorial de ", numero, " é: ", fatorial(numero), "\n")
}
// Função recursiva que calcula o fatorial do número passado
funcao inteiro fatorial(inteiro numero)
{
se (numero == 1 ou numero == 0)
{
retorne 1
}
retorne numero * fatorial(numero - 1)
}
}
\end{minted}
\end{document}
Veja este tutorial se quiser ver outras possibilidades, como escolher cores diferentes ou importar de um arquivo externo.
Caso você tenha o costume de usar Overleaf, pode ter lido a seção anterior e pensado que é impossível instalar um pacote Python no Overleaf. Sim, é verdade. Felizmente, é possível utilizar um lexer sem instalação obrigatória.
-
Copie o arquivo do lexer (este) e salve como, por exemplo,
PortugolStudioLexer.py
. -
Coloque no mesmo diretório do seu arquivo
.tex
; -
Substitua o nome da linguagem por
PortugolStudioLexer.py:PortugolStudioLexer -x
. -
O código deve ser assim (veja o exemplo completo na seção anterior):
% ...
\begin{minted}[autogobble, linenos]{PortugolStudioLexer.py:PortugolStudioLexer -x}
// seu código
\end{minted}
% ...
Isto pode ser recomendado para projetos maiores, para reduzir a quantidade de dependências que outros colaboradores precisarão instalar (o mesmo vale para fontes personalizadas). Para projetos menores, entretanto, é mais prático instalar e apenas utilizar o nome da linguagem.
Caso note algo de errado, fique à vontade para abrir uma issue ou, ainda melhor, enviar o seu Pull Request.
Desenvolvido por Héliton Martins.