Skip to content

Commit

Permalink
fix many errors reported by Claudio Beccari thks
Browse files Browse the repository at this point in the history
  • Loading branch information
robitex committed Apr 25, 2021
1 parent 089b008 commit 28a7a78
Show file tree
Hide file tree
Showing 14 changed files with 175 additions and 138 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
![GitHub release (latest by date)](https://img.shields.io/github/v/release/GuITeX/guidalua?label=current%20version)
![GitHub Workflow Status (event)](https://img.shields.io/github/workflow/status/GuITeX/guidalua/Compile%20LuaLaTeX%20main%20file%20guidalua.tex?style=plastic)
![GitHub issues](https://img.shields.io/github/issues/GuITeX/guidalua)
![Lines of code](https://img.shields.io/tokei/lines/github/GuITeX/guidalua)
![GitHub Repo stars](https://img.shields.io/github/stars/GuITeX/guidalua?style=social)
![GitHub issues](https://img.shields.io/github/issues/GuITeX/guidalua)
![License](https://img.shields.io/badge/licence-LPPL%20%3E%3D1.3-green)
![GitHub Repo stars](https://img.shields.io/github/stars/GuITeX/guidalua?style=social)

Guida al linguaggio Lua per LuaTeX
==================================
Expand Down
2 changes: 2 additions & 0 deletions guidalua.tex
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@
\newcommand\code[1]{\normalfont\texttt{#1}}
\newcommand\fn[1]{\normalfont\texttt{#1()}}
\newcommand\gotosec{\textcolor{verdeguit}{\tiny\S}}
\newcommand\BibTeX{\textsc{Bib}\TeX}

% index special macros
\DeclareRobustCommand*\luastd[1]{%
\index{funzioni!#1@\fn{#1}}}
Expand Down
4 changes: 2 additions & 2 deletions section/0-01-intro.tex
Original file line number Diff line number Diff line change
Expand Up @@ -91,13 +91,13 @@ \section{Altre risorse}


\section{Note di lettura}
\label{secIntroNote}
\label{secZeroIntroNote}

Nei listati compilabili riportati nella guida compare alla prima linea la
\emph{riga magica}, un commento utile per dare istruzioni all'editor sul
compilatore da usare, ma che qui aiuterà il lettore a stabilire il contesto del
codice. La sintassi delle righe magiche dipende dall'editor, in questa guida
useremo le regole di TeX~Works.
useremo le regole di TeXworks.

Se presente nel progetto, alla seconda riga dei listati si troverà invece il
nome del file che il lettore potrà scaricare ed eseguire per i propri
Expand Down
6 changes: 3 additions & 3 deletions section/I-01-calc.tex
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ \chapter{Let's start with Lua}

Per dare l'idea di come si possa usare Lua all'interno del sistema di
composizione \TeX{}, questa prima parte della guida è in forma di
\emph{tutorial} cioé di brevi resoconti dei progressi compiuti da un ipotetico
\emph{tutorial} cioè di brevi resoconti dei progressi compiuti da un ipotetico
utente \LuaLaTeX{} indaffarato nel risolvere alcuni problemi con i suoi
documenti: fare calcoli con una calcolatrice o comporre una tabella ripetitiva.

Expand Down Expand Up @@ -187,8 +187,8 @@ \subsection{Arrotondamento numerico}
\subsection{Funzioni matematiche}

Potremo trovare una sintassi un po' più chiara per indicare il numero di cifre a
cui arrontondare il risultato, tuttavia c'è di un problema più urgente: poter
usare funzioni matematiche come seno e coseno. Se scrivessimo
cui arrontondare il risultato, tuttavia c'è di mezzo un problema più urgente:
poter usare funzioni matematiche come seno e coseno. Se scrivessimo
\verb=\expr{sin(1)^2 + cos(1)^2}= non otterremo il valore unitario ma un errore.
Dovremo infatti usare la scomoda notazione
\code{math.}\meta{funzione}/\meta{costante} come in
Expand Down
2 changes: 1 addition & 1 deletion section/I-02-tab.tex
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ \subsection{Template di riga}
quello definito dalla funzione \fn{row\_func}.

Per implementare il template di riga, basta aggiungere alla classe \code{Row} un
iteratore che a ogni passo ritorni la stringa di codice della riga di tabella:
iteratore che a ogni passo generi la stringa di codice della riga di tabella:

\CLRmarginpar{%
\fn{string.gsub}\\
Expand Down
32 changes: 18 additions & 14 deletions section/I-03-howto.tex
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ \section{Motori di composizione e formati}
Un sorgente \TeX{} contiene testo e macro. Il testo formerà i capoversi, i
titoli e il resto del documento, mentre le macro ne stabiliranno l'aspetto e la
struttura. I \emph{motori di composizione} costruiscono il documento eseguendo
macro dette \emph{primitive}, sono cioé implementate in modo nativo per svolgere
macro dette \emph{primitive}, sono cioè implementate in modo nativo per svolgere
compiti elementari, e macro definite con esse per svolgere sequenze ricorrenti.

Le macro sequenze dette di alto livello, possono costituire una vera e propria
Expand Down Expand Up @@ -53,19 +53,23 @@ \section{Motori di composizione e formati}

Quando il nome del formato corrisponde al nome del programma scorciatoia, non li
si deve confondere: il programma \prog{latex} utilizza ancora il compositore
\prog{pdftex} con il formato \LaTeX{} e uscita in DVI.
\prog{pdftex} con il formato \LaTeX{} con uscita in DVI\footnote{DVI sta per
Device Indipendent e oggi è in disuso a favore del formato PDF. Tuttavia è utile
far notare che un programma compositore può fornire anche più formati di
uscita.}.

I file binari dei formati sono usualmente generati o rigenerati in automatico
dalle utility della distribuzione nel momento dell'installazione o quando
l'utente esegue un aggiornamento del sistema che contiene modifiche alle macro
del formato, perciò è molto raro che ci si trovi nella situazione di doverne
generare uno.

Riassumendo, i motori di composizione sono programmi tipografici mentre i
formati sono insiemi coerenti di macro basate sulle primitive del compositore. I
nomi dei programmi disponibili nel sistema \TeX{} possono confondere se non si
conosce questa importante distinzione: alcuni di essi sono comandi scorciatoia
per eseguire un motore di composizione con un particolare formato.
Riassumendo, i motori di composizione sono programmi di composizione tipografica
mentre i formati sono insiemi coerenti di macro basate sulle primitive del
compositore. I nomi dei programmi disponibili nel sistema \TeX{} possono
confondere se non si conosce questa importante distinzione: alcuni di essi sono
infatti comandi scorciatoia per eseguire un motore di composizione con un
particolare formato.


\subsection{Compositori Lua-powered}
Expand Down Expand Up @@ -214,10 +218,10 @@ \section{Passaggio di dati}

Quando \TeX{} incontra una macro utente con un segnaposto\footnote{Fate
riferimento ha una buona guida per \LaTeX{} per saperne di più sulla definizione
di macro utente.} lo sostituisce con i dati corrispondenti token singolo o
gruppo di token tra parentesi graffe. Per questo quando nel sorgente scriviamo
\cs{fattoriale}\code{\{5\}}, dopo la sostituzione il codice Lua effettivamente
eseguito sarà:
di macro utente.} lo sostituisce con i dati corrispondenti a un singolo token
oppure a un gruppo di token tra parentesi graffe. Per questo quando nel sorgente
scriviamo \cs{fattoriale}\code{\{5\}}, dopo la sostituzione il codice Lua
effettivamente eseguito sarà:
\begin{lines}
local n = 5
tex.print(tostring(fact(n)))
Expand Down Expand Up @@ -286,7 +290,7 @@ \section{Espansione di macro}
\section{Caratteri speciali}

Alcuni simboli hanno un diverso significato per \TeX{} e per Lua, per esempio il
carattere cancelletto, la stessa backslash o il simbolo di percento. \LuaTeX{}
carattere cancelletto, lo stesso backslash o il simbolo di percento. \LuaTeX{}
non si occupa direttamente di modificare il significato dei simboli che si
sovrappongono.

Expand Down Expand Up @@ -321,7 +325,7 @@ \section{Caratteri speciali}
trattino si estenderebbe non solo a fine riga ma a tutto il codice che segue.

Per fortuna la grammatica Lua a differenza di Python, consente la libera
scrittura e identazione del codice altrimenti questo meccanismo non potrebbe
scrittura e i rientri del codice altrimenti questo meccanismo non potrebbe
funzionare.


Expand All @@ -334,7 +338,7 @@ \section{Le librerie disponibili in \LuaTeX}
che chiameremo librerie esterne.

Tutte queste librerie formano un nutrito elenco come riporta dettagliatamente il
manuale del compositore. Tra quelle interne più note ricordiamo:
manuale dell'utente. Tra quelle interne più note ricordiamo:
\begin{compactitemize}
\item \code{node}, gestione dei nodi tipografici;
\item \code{token}, scansione dei token per la raccolta di argomenti, creazione
Expand Down
63 changes: 43 additions & 20 deletions section/II-01-fondamenti.tex
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ \section{Lua, proprio un bel nome}

Lua è stato ideato da un gruppo di programmatori esperti
dell'\href{http://www.puc-rio.br/index.html}{Università Cattolica di Rio de
Janeiro} in Brasile. ``Lua'' si pronuncia LOO-ah e significa ``Luna'' in
portoghese!
Janeiro} in Brasile. In portoghese ``Lua'' si pronuncia LOO-ah e significa
``Luna''!


\section{L'assegnamento}
Expand All @@ -34,21 +34,23 @@ \section{L'assegnamento}

Durante l'esecuzione di questo codice, Lua determina dinamicamente il tipo del
valore letterale `123' --- un numero --- creandolo in memoria col nome di
`\texttt{a}'.
`\key{a}'.

L'istruzione di assegnamento omette il tipo di dato non essendone prevista una
dichiarazione esplicita. In altre parole, i dati hanno un tipo, ma ciò entra in
gioco solamente a tempo di esecuzione.
dichiarazione esplicita. In altre parole, i dati hanno un tipo, determinabile
con la funzione \fn{type}\luastd{type}, ma ciò non ha rilevanza semantica ed è
solo in fase di esecuzione che l'interprete determina il tipo di dato e in
funzione di questo ne memorizza il valore in memoria.

Altro concetto importante di Lua è che le variabili sono tutte globali a meno
che non si dichiari il contrario.
che non le si dichiari locali al blocco di codice.


\subsection{Locale o globale?}
\label{secFondLocaleGlobale}

Una proprietà dell'assegnamento è che se non diversamente specificato Lua
istanzia i simboli nell'ambiente globale del codice in esecuzione. Se si
crea i simboli nell'ambiente globale del codice in esecuzione. Se si
desidera creare una variabile locale rispetto al blocco di codice in cui è
definita, occorre premettere alla definizione la parola chiave \key{local}.

Expand All @@ -66,17 +68,36 @@ \subsection{Locale o globale?}

\subsection{Assegnazioni multiple}

In Lua possono essere assegnate più variabili alla volta nella stessa
istruzione. Questo significa che l'assegnamento è in realtà più complesso di
quello presentato fino a ora perché è possibile scrivere una lista di variabili
separate da virgole che assumeranno i valori corrispondenti della lista di
espressioni, sempre separate da virgole che compare dopo il segno di uguale:
In Lua possono essere assegnate più variabili alla volta nella stessa istruzione
con una sintassi in realtà più complessa di quella presentata fino a ora. A
sinistra del simbolo di uguale è ammessa una lista di variabili separate da
virgole e a destra una lista di espressioni sempre separate da virgole che, una
volta valutate, saranno assegnate in ordine.

Se si premette la parola chiave \key{local} tutte le variabili saranno locali.
La sintassi generale dell'assegmento multiplo è la seguente:
\begin{lines}
[local] var_1, var_2, var_3, ... = expr_1, expr_2, expr_3, ...
\end{lines}
perfettamente equivalente a:
\begin{lines}
[local] var_1 = expr_1
[local] var_2 = expr_2
[local] var_3 = expr_3
\end{lines}

Così
\begin{lines}
local a, b = 0.45 + 0.23, "text" -- a = 0.68; b = "text"
\end{lines}
è equivalente a:
\begin{lines}
local a = 0.45 + 0.23
local b = "text"
\end{lines}

Quando il numero delle variabili non corrispondono a quello delle espressioni,
Lua assegnerà automaticamente valori \texttt{nil} o ignorerà le espressioni in
Quando il numero delle variabili non corrisponde a quello delle espressioni, Lua
assegnerà automaticamente valori \texttt{nil} o ignorerà le espressioni in
eccesso. Per esempio:
\begin{lines}
local a, b, c = 0.45, "text" -- c vale nil
Expand Down Expand Up @@ -143,7 +164,7 @@ \subsection{Il tipo \key{nil}}
anch'esso chiamato \key{nil}. Il nome è così sia l'unico valore possibile che il
tipo.

Leggere una variabile non istanziata non è un errore perché Lua restituisce
Leggere una variabile che non esiste non è un errore perché Lua restituisce
semplicemente \key{nil}, mentre assegnare il valore nullo a una variabile la
distrugge:
\begin{lines}
Expand Down Expand Up @@ -181,8 +202,9 @@ \section{Gli identificatori}
Sono invece da evitare i nomi che iniziano con un doppio trattino basso, che
potrebbero collidere con quelli dei metametodi (vedi il capitolo
\ref{chFondOop}) e quelli che pur iniziando con un singolo trattino basso hanno
poi lettere tutte in maiuscolo come per esempio \key{\_VERSION}\luak{\_VERSION},
perché potrebbero collidere con i nomi predefiniti di Lua.
poi lettere tutte in maiuscolo come per esempio
\key{\_VERSION}\luastd{\_VERSION}, perché potrebbero collidere con i nomi
predefiniti di Lua.


\section{Il Garbage Collector}
Expand All @@ -201,9 +223,10 @@ \section{Il Garbage Collector}
\section{Esercizi}

\begin{Exercise}[label=fond-01]
Scrivere il codice Lua che instanzi due variabili \key{x} e \key{y} al valore
12.34. Si assegni alle altre due variabili \key{sum} e \key{prod} la somma e il
loro prodotto delle prime. Si stampi in console i risultati.
Usando due sole istruzioni, scrivere il codice Lua che crea due variabili
\key{x} e \key{y} di valore 12.34 e assegni alle altre due variabili \key{sum} e
\key{prod} rispettivamente la somma e il prodotto delle prime due. Si stampino
in console i risultati.
\end{Exercise}

\begin{Exercise}[label=fond-02]
Expand Down
16 changes: 11 additions & 5 deletions section/II-02-tabella.tex
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,16 @@ \section{La tabella è un oggetto}
assert(t[1] == other[1])
\end{lines}

Con la funzione \fn{assert} si può esprimere l'equivalenza logica tra due
espressioni. Essa ritorna l'argomento se questo è \key{true} oppure se non è
\key{nil}, altrimenti termina l'esecuzione del programma riportando l'errore
descritto eventualmente da un secondo argomento testuale.
Con la funzione \fn{assert}\luastd{assert} si può dichiarare l'equivalenza
logica tra due espressioni oppure imporre la verità di un'espressione prima di
assegnarla a una variabile. Se l'argomento è vero essa si comporta in modo
neutro restituendo l'argomento stesso, ma se è falso, essa termina l'esecuzione
del programma stampando la descrizione d'errore opzionalmente fornita dal
secondo argomento stringa.

Come vedremo nel capitolo \ref{chFondOpLogic}, un'espressione è vera se vale
\key{true} oppure non è \key{nil}, e falsa se vale \key{false} oppure è
\key{nil},

I tipi come i numeri invece non sono oggetti e assegnare una variabile che li
contiene a un'altra comporta la copia del dato, come si può verificare con un
Expand All @@ -89,7 +95,7 @@ \section{Il costruttore e la dot notation}
sufficientemente efficiente. Può essere usata in moltissime diverse situazioni
ed è ancora più utile grazie all'efficacia del suo \emph{costruttore}.

Ispirato al formato dei dati bibliografici di BibTeX, uno dei programmi storici
Ispirato al formato dei dati bibliografici di \BibTeX, uno dei programmi storici
del sistema \TeX{} usato per la gestione delle bibliografie nei documenti
\LaTeX, il costruttore di Lua può creare tabelle da una sequenza di
chiavi/valori inserite tra parentesi graffe:
Expand Down
20 changes: 10 additions & 10 deletions section/II-03-costrutti-base.tex
Original file line number Diff line number Diff line change
Expand Up @@ -107,14 +107,14 @@ \section{Il ciclo \key{while}}
\section{Intermezzo}

In Lua non è obbligatorio inserire un carattere delimitatore sintattico ma è
facoltativo il \key{;}. I caratteri spazio, tabulazione e ritorno a capo vengono
considerati dalla grammatica come separatori, perciò si è liberi di formattare
il codice come si desidera inserendo per esempio più istruzioni sulla stessa
linea. Solitamente non si utilizzano i punti e virgola finali, ma se ci sono due
assegnazioni sulla stessa linea --- stile sconsigliabile perché poco leggibile
--- li si può separare almeno con un \key{;}. Come sempre una forma stilistica
chiara e semplice vi aiuterà a scrivere codice più comprensibile anche a
distanza di tempo.
facoltativo il segno \key{;}. I caratteri spazio, tabulazione e ritorno a capo
vengono considerati dalla grammatica come separatori, perciò si è liberi di
formattare il codice come si desidera inserendo per esempio più istruzioni sulla
stessa linea. Solitamente non si utilizzano i punti e virgola finali, ma se ci
sono due assegnazioni sulla stessa linea --- stile sconsigliabile perché poco
leggibile --- li si può separare almeno con un segno \key{;}. Come sempre una
forma stilistica chiara e semplice vi aiuterà a scrivere codice più
comprensibile anche a distanza di tempo.

Generalmente è buona norma definire le nuove variabili il più vicino possibile
al punto in cui verranno utilizzate per la prima volta, un beneficio per la
Expand Down Expand Up @@ -180,8 +180,8 @@ \section{Esercizi}
\end{Exercise}

\begin{Exercise}[label=cos-03]
Instanziare la tabella seguente con tre tabelle/array di tre numeri e calcolarne
il determinante della matrice corrispondente.
Calcolare il determinante della matrice corrispondente alla seguente tabella,
che contiene tre tabelle/array con tre numeri in sequenza.
\begin{lines}
local t = {
{ 0, 5, -1},
Expand Down
14 changes: 7 additions & 7 deletions section/II-06-funzioni.tex
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ \chapter{Funzioni}
inferiori a quelli previsti allora a quelli mancanti verrà assegnato il valore
\key{nil}\luak{nil}.

Le stesse regole valgono anche per i dati di ritorno quando la funzione è usata
come espressione in un'istruzione di assegnamento. Si scrive dopo l'istruzione
\key{return}\luak{return} la lista delle espressioni separate da virgole che
saranno valutate e assegnate alle corrispondenti variabili.
Le stesse regole valgono anche per i dati di uscita quando la funzione è usata
come espressione in un'istruzione di assegnamento. Dopo l'istruzione
\key{return}\luak{return} si può scrivere una lista delle espressioni separate
da virgole che saranno assegnate alle corrispondenti variabili.

Per esempio, potremo modificare la funzione precedente per restituire anche la
somma dei primi \( n \) numeri di Fibonacci oltre che l'ennesimo elemento della
Expand All @@ -36,8 +36,8 @@ \section{Funzioni: valori di prima classe, I}

In Lua le funzioni sono un tipo. Possono essere assegnate a una variabile,
passate come argomento a un'altra funzione e restituite da una funzione come
valore di ritorno, una proprietà che non si trova spesso nei linguaggi di
scripting e che offre più flessibilità al codice.
valore, una proprietà che non si trova spesso nei linguaggi di scripting e che
offre più flessibilità al codice.

A ben vedere in Lua tutte le funzioni sono memorizzate in variabili e di per se
non hanno un nome. Il modo di definizione è quindi la \emph{sintassi anonima}:
Expand All @@ -58,7 +58,7 @@ \section{Funzioni: valori di prima classe, I}
-- function body
end
\end{lines}
l'interprete Lua la tradurrà automaticamente nel codice equivalente in sintassi
L'interprete Lua la tradurrà automaticamente nel codice equivalente in sintassi
anonima, una caratteristica nascosta detta \emph{zucchero sintattico}:
\begin{lines}
variable_name = function (args)
Expand Down
Loading

0 comments on commit 28a7a78

Please sign in to comment.