t

Tabelas em Org Mode e Excel

Luis Moura / 2020-07-29


A versão em PDF deste post, pode ser encontrada aqui.

Resumo

Toda a gente que trabalha na elaboração de projetos de arquitetura e engenharia conhece o Microsoft Excel. Ele é um dos softwares preferidos dos engenheiros, pela sua fácil utilização, capacidade de partilha, e de grande customização. É fácil a introdução de formulas nas células, e os resultados são obtidos imediatamente. Um número enorme de ferramentas de apoio, tornam este software ainda mais apelativo.

No entanto o Excel tem limitações. As fórmulas não podem ter variáveis. É quase impossível descobrir o valor de uma incógnita x, calcular uma derivada ou primitiva. É aqui que entram as tabelas em Org mode.

As tabelas em Org mode e o Excel, são duas ferramentas distintas. O comum a ambos os softwares é que ambos produzem tabelas. Todo o resto é diferente. A escolha do software, depende do que se pretende fazer.

Só me vou concentrar nas funções básicas da tabela e do Emacs Calculator, que está incluído em qualquer versão do GNU Emacs. Mesmo assim, na sua versão mais simplista, as tabelas em Org Mode superam as funcionalidades do Excel, quando o objetivo é o cálculo estrutural ou outro cálculo associado ao trabalho de engenharia 1

Criar uma Tabela em Org-Mode

Org-Mode faz parte do editor Emacs. É um software com uma possibilidade quase infinita de funções. Por exemplo, este post foi escrito em Org Mode, sendo depois convertido em HTML.

Criar uma tabela em Org-Mode é simples, no entanto, não tão simples como em Excel. Em Excel, basta introduzir os dados nas células, e é fácil movimentar o cursor ao longo da folha. Em Org-Mode o mesmo já não é verdade pois a tabela é construída pelo utilizador.

Em Org-Mode, é necessário “escrever” a tabela. Um exemplo do formato para uma tabela, é aqui apresentado:

| Coluna 1 | Coluna 2 | Coluna 3   |
|----------+----------+------------|
| Linha    |     1000 | A+B        |

E o código em cima, dá origem a esta tabela:

Coluna 1 Coluna 2 Coluna 3
Linha 1000 A+B

Embora existam atalhos que facilitam e muito na criação da tabela, jamais se podem comparar à facilidade com que os dados são introduzidos em Excel. Assim, se o objetivo for a introdução de dados em uma folha, Excel é a ferramenta ideal para o trabalho.

O tempo de aprendizagem de Org-Mode é também bastante superior ao de Excel. Com um número quase infinito de novas possibilidades, a aprendizagem de Org-Mode é um processo lento e contínuo.

Aonde Org-Mode supera o Excel

A lista do que é possível fazer com Org Mode é extensa e vai muito além dos objetivos deste post. O manual do Tabelas em Org Mode tem a lista dos atalhos que são possíveis utilizar assim como algumas das funcionalidades. No entanto, mesmo esta extensa lista, está muito aquém do que é possível fazer. Basta pensar que é possível utilizar Python nas tabelas em Org Mode, e é aberta uma nova janela de possibilidades. E Python é só uma das muitas linguagens informáticas possíveis de utilização.

Excel tem a sua própria linguagem, VBA. No entanto, esta fica muito aquém de Python. É possível conectar Excel com Python recorrendo a outros softwares, mas torna-se um sistema complicado e nada prático.

Prós

  1. É fácil o uso de outras linguagens informáticas, como LaTeX, Python, R, etc.
  2. Org Mode é parte de Emacs, que já inclui uma calculadora bastante completa, equiparável às fórmulas em Excel.
  3. É possível o uso e cálculo de incógnitas como em uma calculadora científica moderna.
  4. As tabelas são formatadas para LaTeX, sendo os documentos em PDF produzidos, de uma qualidade muito superior a Excel.
  5. Recorrendo a Python por exemplo, é possível o cálculo numérico.
  6. Pode facilmente importar os dados de uma folha em Excel. Torna-se assim possível iniciar a recolha dos dados em Excel, e a sua posterior manipulação e análise, já em Org Mode.
  7. Uma vez passada a fase inicial de aprendizagem e customização, tudo fica mais fácil, e torna-se um sistema bastante eficaz para a produção de documentos em PDF.
  8. Org Mode foi criado para ser eficiente. Tal como em LaTeX, o objectivo é apresentar a informação de uma forma direta e clara.
  9. Tal como tudo no universo Emacs, Org Mode é grátis

Contras

  1. O tempo inicial de aprendizagem da utilização de Org Mode em Emacs, é muito superior ao Excel
  2. É necessário decorar as teclas de atalho para o uso eficiente do software.
  3. O editor em si, não é tão visualmente apelativo como o Excel
  4. Tudo pode ser customizado, mas requer muitas linhas de código, o que por sua vez, requer muito tempo de pesquisa na internet.
  5. É necessário escrever o código para o formato da tabela.

Exemplos

Armadura de Flexão

Neste exemplo, é calculado a área de armadura necessária para um dado Momento. Os dados são introduzidos nas colunas 2-6, e os resultados são apresentados nas 3 últimas colunas.

|   | med (kN) | fcd (mPa) | fyd (mPa) | b (m) | d(m) |      U |      W | As (cm2/m) |
|---+----------+-----------+-----------+-------+------+--------+--------+------------|
| # |      100 |      13.3 |       348 |     1 | 0.95 |        |        |            |
#+TBLFM: $7=$2/($5*$6**2*$3*10**3);%.4f::$8=1-sqrt(1-2*$7);%.4f::$9=$8*$5*$6*($3/$4)*10**4;%.2f
med (kN) fcd (mPa) fyd (mPa) b (m) d(m) U W As (cm2/m)
100 13.3 348 1 0.95 0.0083 0.0083 3.01

Uma breve explicação do código: Na primeira coluna, existe o simbolo “#”, que informa ao Emacs, para calcular imediatamente caso novos dados sejam introduzidos (como em Excel). Se não colocasse essa informação/opção, o cálculo só seria efectuado após ser invocado por teclas de atalho.

Por baixo da tabela, é aonde estão as fórmulas das 3 últimas colunas. O simbolo “$” antes de um número, indica o número da coluna ($7 = coluna 7).

Soma de duas funções

\[f(x)+g(x)\]

A soma da função da coluna 2, com a função da coluna 3 (atenção que a coluna 1 é aonde está o “#” que informa o Emacs para executar automaticamente a soma e apresentar os resultados na coluna 4.

|   | Função 1 | Função 2    | Resultado |
|---+----------+-------------+-----------|
| # | 2*x      | 3*x*cos(45) |           |
#+TBLFM: $4=$3+$2;n3

De notar que a coluna 1 não aparece no formato HTML.

Função 1 Função 2 Resultado
2*x 3*x*cos(45) 4.12 x

Taylor

\[f ( x ) = f ( a ) + \frac { f ^ { \prime } ( a ) } { 1 ! } ( x - a ) + \frac { f ^ { ( 2 ) } ( a ) } { 2 ! } ( x - a ) ^ { 2 } + \cdots + \frac { f ^ { ( n ) } ( a ) } { n ! } ( x - a ) ^ { n } + R\]

| função      | n | x   | Resultado   |
|-------------+---+-----+-------------|
| x^2+sqrt(x) | 1 | x=0 |             |
| x^2+sqrt(x) | 0 | x=1 |             |
#+TBLFM: $4=taylor($1,$3,$2);n3
função n x Resultado
x2+sqrt(x) 1 x=0 x*(0.5 / 0)
x2+sqrt(x) 0 x=1 2

Solve

Calcula o valor de uma incógnita em uma função.

|   | função esquerda | função direita | Resultado               |
|---+-----------------+----------------+-------------------------|
| # | x*2             |              1 |                         |
| # | cos(x)          |              0 |                         |
| # | 25+x*2          |            x-5 |                         |
#+TBLfm: $4=fsolve($2=$3,x);n3
função esquerda função direita Resultado
x*2 1 x = 0.5
cos(x) 0 x = 90 s1 + 360 n1
25+x*2 x-5 x = -30

Derivada

Calcula a derivada de uma função

|   | função   | Resultado       |
|---+----------+-----------------|
| # | x        |                 |
| # | sin(x)   |                 |
| # | x**2+2*x |                 |
 #+TBLfm: $3=deriv($2,x)
função Resultado
x 1
sin(x) cos(x) pi / 180
x**2+2*x 2 x + 2

Integral

Também é possível fazer a integração de uma função

|   | função | Resultado   |
|---+--------+-------------|
| # | x      |             |
| # | ln(x)  |             |
#+TBLFM: $3=integ($2,x)
função Resultado
x x2 / 2
ln(x) x ln(x) - x

Ficheiro Org Mode

Uma cópia do ficheiro usado na criação deste post, pode ser visto em baixo. O ficheiro foi criado no editor Emacs. Fazer o click em view raw, no canto inferior direito da janela, para ver o código sem estar formatado.

1 Para a introdução de dados, sua manipulação e visualização e se a lista de dados for extensa, é melhor a utilização de Excel