em pdf

LaTeX, SageTex e Python em Português
(com unidades e vírgulas)

Filipe Gama Freire

I T 8 fevereiro 2021

Abstract

Sobre o LaTeX já foi tudo dito, contudo, a junção do LaTeX com uma linguagem de programação já começa a ter pouca informação. Se juntarmos a isso a operação com grandezas físicas (com unidades) e a formatação dos resultados de modo a não termos um resultado esquizofrénico (a utilização simultânea do ponto e da vírgula como marcadores decimais), então talvez o leitor agradeça este documento.

SageTeX

Sobre o SageTeX (ou phyton/pythontex ambos no CTAN ), já há que dizer que são pacotes que incluídos no LaTeXpermitem fazer contas, gráficos etc. utilizando a linguagem correspondente.

Das muitas possíveis utilizações, de momento apenas interessa o seguinte:

Se em LaTeX escrevermos,

\begin{sagesilent}
A = 1/3.
B = 2*A
\end{sagesilent}

A = \sage{A} + \sage{B} = \sage{A+B}

resulta em:

A = 0.333333333333333 + 0.666666666666667 = 1.00000000000000

O que é engraçado mas ainda pouco utilizável.

Unidades

E se fosse possível fazer conversões de unidades para além dos cálculos em que o Sagemath/Python podem ajudar.

Com o pacote de python PhysicalQuantities (entre outros, mas este é o que mais gosto, principalmente quando trabalho em Jupyter ) é possível fazer contas com unidades sem nos preocuparmos com as conversões.

Por exemplo, se em LaTeX dentro de um bloco de Sage escrevermos:

     from PhysicalQuantities import q
     a = 1/3.*q.m + 1*q.cm
     a=a.to(’cm’)

e depois em LaTeX

a = \sage{a}

resulta em:

a = 34.3333333333333  cm

Parece formidável, mas pode-se fazer ainda melhor.

Se o preâmbulo do documento LaTeX contiver (preâmbulo deste documento)

\usepackage{sagetex}
\usepackage{siunitx}
\sisetup{
           output-decimal-marker = {,},
           scientific-notation=false,
           round-mode=places,
           }
\newcommand{\sageSI}[3][]{\sagestr{’\SI[#1]{’+str(#2)+’}{#3}’}}
\newcommand{\sageSIu}[3][]{\sagestr{’\SI[#1]{’+str(#2.value)+’}
                                           {’+str(#2.unit)+’}’}}

dermos o comando com a instrução definida no preâmbulo ( única instrução que não foi obtida pelo =oogle e tenha sido eu a escrever.)

a = \sageSIu[{}]{a}{}

resulta em:

a = 34,33cm

No preâmbulo encontra-se também a instrução de formatar números sem unidades. Por exemplo

a = \sageSI[{}]{A+B}{m^2}

resulta em:

          2
A = 1,00m

Se examinar o preâmbulo com atenção, verá que é fácil formatar o número, por exemplo em notação científica ou o número de casas decimais. Por exemplo:

A = \sageSI[{scientific-notation=true, decimal-places=3 }]
                   {(A+2*B)*1000}{m^2}
B = \sageSIu[{scientific-notation=true, decimal-places=3 }]
                   {a.to(’km’)}{}

resulta em:

A =  1,667 × 103m2

              - 4
B = 3,433 × 10  km

O que é ainda mais espantoso.