[Guida] Fogli di calcolo in LaTeX usando Org Mode di Emacs

  • Creatore
    Topic
  • #55936
    Up
    0
    Down
    ::


    Una delle pochissime cose che rimpiango in LaTeX è l’impossibilità di avere un foglio di calcolo all’interno di un documento (cosa invece possibile nei word processor come Writer di OpenOffice.org/LibreOffice). Questa lacuna può essere più o meno colmata da chi usa l’onnipotente GNU Emacs con la Org Mode.

    Fra le miriadi di cose che permette di fare la Org Mode (che dovrebbe essere originariamente una modalità per prendere note e scrivere appunti e ricordare appuntamenti e cose da fare) c’è la possibilità di esportare il testo scritto in formato LaTeX (e per la cronaca anche in HTML). La cosa interessante della Org Mode è che permette di creare tabelle che sfruttano la calcolatrice di Emacs, altro strumento potentissimo (fa sia calcolo numerico che simbolico).

    Riporto un paio di esempi di tabelle composte con la Org Mode:
    `#+CAPTION: Sviluppi in serie di Taylor di alcune funzioni.
    |—+————-+—+—–+————————————-|
    | | Funzione | n | x | Risultato |
    |—+————-+—+—–+————————————-|
    | # | exp(x) | 1 | x | 1 + x |
    | # | exp(x) | 2 | x | 1 + x + x^2 / 2 |
    | # | exp(x) | 3 | x | 1 + x + x^2 / 2 + x^3 / 6 |
    | # | x^2+sqrt(x) | 2 | x=0 | x*(1:2 / 0) + x^2 (2 – 1:4 / 0) / 2 |
    | # | x^2+sqrt(x) | 2 | x=1 | 2 + 5:2 x – 5:2 + 7:8 (x – 1)^2 |
    | # | cos(x) | 4 | x | 1 – x^2 / 2 + x^4 / 24 |
    | # | sin(x) | 5 | x | x – x^3 / 6 + x^5 / 120 |
    | * | tan(x) | 3 | x | x + 1:3 x^3 |
    |—+————-+—+—–+————————————-|
    #+TBLFM: $5=taylor($2,$4,$3);RFn3

    #+CAPTION: Quadrati, cubi, quarte potenze, radici quadrate e quarte di alcuni numeri interi.
    |—+—-+—–+—–+——+———–+———–|
    | | N | N^2 | N^3 | N^4 | N^{1/2} | N^{1/4} |
    |—+—-+—–+—–+——+———–+———–|
    | / | <> | < | | > | < | > |
    | # | 1 | 1 | 1 | 1 | 1 | 1 |
    | # | 2 | 4 | 8 | 16 | 1.4142136 | 1.1892071 |
    | # | 3 | 9 | 27 | 81 | 1.7320508 | 1.3160740 |
    | # | 4 | 16 | 64 | 256 | 2 | 1.4142136 |
    | # | 5 | 25 | 125 | 625 | 2.2360680 | 1.4953488 |
    | # | 6 | 36 | 216 | 1296 | 2.4494897 | 1.5650846 |
    | # | 7 | 49 | 343 | 2401 | 2.6457513 | 1.6265766 |
    | # | 8 | 64 | 512 | 4096 | 2.8284271 | 1.6817928 |
    | # | 9 | 81 | 729 | 6561 | 3 | 1.7320508 |
    |—+—-+—–+—–+——+———–+———–|
    #+TBLFM: @3$2=1::$2=(@-1$2 +1)::$3=$2^2::$4=$2^3::$5=$2^4::$6=sqrt($2)::$7=sqrt(sqrt(($2)))
    `
    Per esempio, nella seconda tabella, per calcolare tutte le grandezze N^2, N^3, N^4, N^{1/2} e N^{1/4} è sufficiente scrivere il numero sotto la colonna N e poi premere TAB: Emacs calcolerà tutti i campi mancanti (grazie alla presenza del simbolo `#’ nella prima colonna) controllando i valori dei campi mancanti nella riga che inizia con `#+TBLFM’. Inoltre ho fatto in modo (con l’istruzione `$2=(@-1$2 +1)’) che nella seconda colonna ci sia sempre il numero precedente + 1 (e nella prima riga c’è 1 grazie all’istruzione `@3$2=1′), quindi per aggiungere una nuova riga basta in realtà andare a capo, scrivere
    `|#|`
    e premere TAB (e questo è esattamente quello che ho fatto per arrivare fino a N=9, la tabella originale si fermava a N=3)

    Allo stesso modo, nella prima tabella in ciascun rigo bisogna inserire la funzione, l’ordine in cui fermare lo sviluppo in serie di potenze e la variabile rispetto a cui fare lo sviluppo, eventualmente specificando il punto iniziale se diverso da 0. Premendo TAB verrà riempita la quinta colonna.

    Penserete che sia molto complicato realizzare le tabelle precedenti perché bisogna anche far in modo che le celle siano allineate, invece a tutto ciò ci pensa Emacs. Infatti è sufficiente scrivere la prima riga con la spaziatura minima o anche senza spaziatura:
    `||N| N^2 | N^3 |N^4 | N^{1/2} |N^{1/4} |`
    andare a capo con Invio, scrivere | e premere TAB: verranno scritte automaticamente tutte le celle. Se qualche campo è più grande della colonna in cui si trova, premendo TAB la tabella verrà aggiornata e tutta la colonna sarà aggiornata.

    Esportando in formato LaTeX (`C-c C-e d’ per creare il file .tex, compilarlo con pdflatex e aprire direttamente il visualizzatore PDF) si ottiene qualcosa di simile a questo:
    `% Created 2011-02-14 lun 13:10
    \documentclass[11pt]{article}
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage{fixltx2e}
    \usepackage{graphicx}
    \usepackage{longtable}
    \usepackage{float}
    \usepackage{wrapfig}
    \usepackage{soul}
    \usepackage{t1enc}
    \usepackage{textcomp}
    \usepackage{marvosym}
    \usepackage{wasysym}
    \usepackage{latexsym}
    \usepackage{amssymb}
    \usepackage{hyperref}
    \tolerance=1000
    \providecommand{\alert}[1]{\textbf{#1}}

    \title{prova}
    \author{elrond}
    \date{14 febbraio 2011}

    \begin{document}

    \maketitle

    \setcounter{tocdepth}{3}
    \tableofcontents
    \vspace*{1cm}
    \begin{table}[htb]
    \caption{Sviluppi in serie di Taylor di alcune funzioni.}
    \begin{center}
    \begin{tabular}{lrll}
    \hline
    Funzione & n & x & Risultato \\
    \hline
    exp(x) & 1 & x & 1 + x \\
    exp(x) & 2 & x & 1 + x + x$^2$ / 2 \\
    exp(x) & 3 & x & 1 + x + x$^2$ / 2 + x$^3$ / 6 \\
    x$^2$+sqrt(x) & 2 & x=0 & x*(1:2 / 0) + x$^2$ (2 – 1:4 / 0) / 2 \\
    x$^2$+sqrt(x) & 2 & x=1 & 2 + 5:2 x – 5:2 + 7:8 (x – 1)$^2$ \\
    cos(x) & 4 & x & 1 – x$^2$ / 2 + x$^4$ / 24 \\
    sin(x) & 5 & x & x – x$^3$ / 6 + x$^5$ / 120 \\
    tan(x) & 3 & x & x + 1:3 x$^3$ \\
    \hline
    \end{tabular}
    \end{center}
    \end{table}

    \begin{table}[htb]
    \caption{Quadrati, cubi, quarte potenze, radici quadrate e quarte di alcuni numeri interi.}
    \begin{center}
    \begin{tabular}{r|rrr|rr}
    \hline
    N & N$^2$ & N$^3$ & N$^4$ & N$^{\mathrm{1/2}}$ & N$^{\mathrm{1/4}}$ \\
    \hline
    1 & 1 & 1 & 1 & 1 & 1 \\
    2 & 4 & 8 & 16 & 1.4142136 & 1.1892071 \\
    3 & 9 & 27 & 81 & 1.7320508 & 1.3160740 \\
    4 & 16 & 64 & 256 & 2 & 1.4142136 \\
    5 & 25 & 125 & 625 & 2.2360680 & 1.4953488 \\
    6 & 36 & 216 & 1296 & 2.4494897 & 1.5650846 \\
    7 & 49 & 343 & 2401 & 2.6457513 & 1.6265766 \\
    8 & 64 & 512 & 4096 & 2.8284271 & 1.6817928 \\
    9 & 81 & 729 & 6561 & 3 & 1.7320508 \\
    \hline
    \end{tabular}
    \end{center}
    \end{table}

    \end{document}`
    Probabilmente il codice andrà rimaneggiato un poco, però la comodità è che si è ottenuta una tabella completa con il minimo sforzo.

    Il mio scopo era quello di ottenere solo una tabella da includere in un documento con input, quindi ho cercato di esportare solo le tabella senza il preambolo (che in pieno spirito Emacs è completamente personalizzabile, una possibilità sarebbe quella di impostare il preambolo come vuoto) ma non sono stato in grado di farlo, dovrei documentarmi meglio.

    Riconosco che non sia un sistema comodissimo (il codice che si ottiene non è spesso direttamente utilizzabile), però almeno permette di generare delle tabelle che sono fogli di calcolo anche piuttosto complessi.

    Per gli approfondimenti rimando alla ricca documentazione della Org Mode che trovate sul sito o in Emacs con `C-h i d m Org Mode ‘.

Visualizzazione 2 filoni di risposte
Visualizzazione 2 filoni di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top