Gestione ‘quasi automatica’ dei valori numerici
in esempi di calcolo ed esercizi svolti
‘asi-automatic’ management of numbers
in calculation examples and solved exercises
Agostino De Marco
Università degli Studi di Napoli “Federico II”
guIt Gruppo utilizzatori Italiani di TEX
guIt 2012
meeting
Università degli Studi di Napoli “Federico II”
Napoli, 27 oobre 2012
Gestione ‘quasi automatica’ dei numeri in esercizi svolti
Plan of the presentation
1. Introduction
2. Example of solved exercise
3. Example ‘engineered’ with an external tool – Matlab
4. Example ‘engineered’ with an external tool – Mathcad
5. Example ‘engineered’ with internal tools – LuaLATEX, LATEX3
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
2 / 31
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Introduction
Motivations
• Organizing a scientific textbook
• Examples of calculation & solved exercises
• Using internal/external tools to produce numbers
• Efficient workflow
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
3 / 31
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Introduction
A scientific textbook with ‘inserts’
Quaderno 7 Equazioni del moto di un velivolo rigido
7.5 Equazioni del moto longitudinal-simmetrico
Va notato, peraltro, che affinché le ipotesi di moto longitudinal-simmetrico restino soddisfatte si deve assumere che il pilota non agisca sui comandi determinando una
asimmetria delle azioni esterne, sia aerodinamiche che propulsive. Ciò significa che, ad
esempio, gli alettoni e il timone di direzione vengono mantenuti in posizione neutra,
(7.44)
e che, nel caso di velivoli plurimotore, non si realizza mai un’asimmetria dell’erogazione
della spinta. Ad esempio, per un velivolo bimotore dovrà essere
ıT;left .t / D ıT;right .t / D ıT .t /
ver. 2012.a Copyright © A. De Marco, D. P. Coiro
DRAFT
i
1 h
D C XT cos ˛B C ZT sin ˛B mg cos ˛B sin sin ˛B cos VP D
m
i
1 h
L C ZT cos ˛B XT sin ˛B C mg cos ˛B cos C sin ˛B sin C q
mV
˛P B D
T
x
(7.46)
E;G
D .V cos ˛B / cos C .V sin ˛B / sin zP E;G D
.V cos ˛B / sin C .V sin ˛B / cos xB
retta di portanza nulla
del velivolo parziale
zB
Le (7.46)-(7.47) possono essere ulteriormente trasformate con l’ausilio della figura 7.4, potendo porre:
XT D T cos T ;
ZT D
T sin T ;
MT D T eT C MT?
(7.49)
dove T è l’angolo formato dalla risultante della spinta con l’asse xB (positivo se il vettore
di spinta è in posizione cabrata rispetto all’asse longitudinale) ed eT è l’eccentricità nel
piano xB zB dell’asse di spinta rispetto al baricentro (distanza orientata di G dalla direttrice
della spinta, negativa se è tale l’intercetta dell’asse di spinta con l’asse zB ). Per un’eccentricità eT D 0 si ha un velivolo con spinta baricentrica; per un calettamento T D 0 si ha
un vettore spinta agente lungo l’asse baricentrico xB .
Si osservi dalla terza delle (7.49) che, in generale, il sistema propulsivo esercita un
momento di beccheggio che si compone di due contributi. Il primo, T eT , è dovuto alla
eventuale eccentricità dell’asse di spinta. Il secondo, MT? , è una coppia pura la cui intensità è funzione dell’angolo ˛B C T . Esso è spesso trascurabile nelle normali condizioni
di volo ma può divenire — anche in caso di asse di spinta baricentrico
ˇ e a calettamento
ˇ
nullo — tanto più significativo quanto più è grande il valore ˇ˛ C T ˇ, cioè quanto più
la condizione di funzionamento dei propulsori si discosta da quella nominale di flusso
assiale.
Iy qP D MA C MT
† xP
iT
T
G
(7.45)
Pertanto, affinché un moto longitudinal-simmetrico resti tale si deve assumere che il pilota agirà soltanto sui comandi di volo simmetrici, oltre che sulla manetta variando il grado
di ammissione ıT . Si ammetterà una legge di comando dell’elevatore ıe .t / non identicamente nulla e, eventualmente, delle leggi non nulle ıs .t / — stabilatore o regolazione
del calettamento dell’impennaggio orizzontale —, ıcan .t / — regolazione simmetrica delle alette canard —, ıspoil .t / — azionamento simmetrico degli spoiler —, ıflap .t / e così
via. Per semplicità ci limiteremo a considerare d’ora in avanti le sole leggi di comando
dell’equilibratore e della manetta.
A questo punto è possibile andare a particolarizzare le equazioni generali ricavate
ai paragrafi precedenti, valide per un velivolo rigido a massa costante, al caso del volo
longitudinal-simmetrico. Si dovranno considerare le equazioni di equilibrio relative alle
variabili simmetriche. Queste vanno scelte tra quelle che compaiono nel sistema formato
dalle (7.40), (7.11), (2.26) e (2.27). In esse si sostituiscano le condizioni (7.42a)–(7.42c).
Si otterrà:
˚
ta e retta di portanza
nulla del velivolo parziale (Wing-Body). Le
grandezze T e x rappresentate nel disegno
sono per definizione positive mentre l’eccentricità eT è negativa.
(7.47)
P D q
Nelle equazioni così ricavate si è tenuto conto delle (7.16) che per le ipotesi fatte diventano:
u D V cos ˛B ; w D V sin ˛B
(7.48)
essendo il vettore velocità VG del baricentro del velivolo contenuto nel suo piano longitudinale. Inoltre, si osservi che il momento d’inerzia Iy che compare nella terza equazione
del sistema (7.46) coincide, per le ipotesi di simmetria introdotte, con un momento centrale d’inerzia. L’asse velivolo yB coincide infatti con l’asse centrale d’inerzia e si può
porre Iy I , detto anche B D m2 , dove è il raggio d’inerzia corrispondente.
A. De Marco, D. P. Coiro – Laurea Magistrale in Ingegneria Aerospaziale, Università degli Studi di Napoli “Federico II”
Esempio 7.1:
Un modello aerodinamico per il moto a 3-DoF
✎
A partire dal sistema (7.46)-(7.47) valido per un moto a tre gradi di libertà si vanno a
ricavare in questo esempio delle equazioni differenziali del moto in forma chiusa. Ad
esse sarà possibile associare un insieme di condizioni iniziali e formulare un problema di
valori iniziali.
Per semplicità si assume una spinta costante ed assegnata. Ciò può ritenersi accettabile
qualora, ad esempio, non interessi osservare il fenomeno del moto vario per tempi lunghi
ed ci si focalizzi sull’analisi delle risposte del velivolo nel breve periodo — dell’ordine di
qualche secondo — successivo all’istante iniziale.
Nota la spinta T , insieme con i dati geometrici T ed eT , restano da esplicitare le
espressioni che forniscono le azioni aerodinamiche: D, L ed MA . Per quanto riguarda la
resistenza aerodinamica si può porre
1
D D V 2 S CD
2
con CD D CD0 C k CLm
(7.50)
ver. 2012.a Copyright © A. De Marco, D. P. Coiro
ıa .t / D ır .t / D 0
17
eT
Figura 7.4 Asse di spin-
DRAFT
16
Dinamica e simulazione di volo – Quaderni dalle lezioni
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
4 / 31
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Introduction
A scientific textbook with ‘inserts’
Quaderno 11 Equazioni del moto delle superfici di governo
11.5 Momenti aerodinamici di cerniera
✎Ï
Sviluppare un programma per l’integrazione numerica del sistema di equazioni (11.74).
Se si sceglie di lavorare con Matlab è possibile utilizzare convenientemente la funzione ode45. Essa può essere predisposta per risolvere sistemi algebrico-differenziali
(Differential-Algebraic Equations, DAE) del tipo:
M.t; x/
˚ ˚
xP D f .t; x/
(11.78)
dove la matrice di massa ŒM  (mass matrix) può avere eventuali righe nulle.
Nel caso del moto a comandi liberi la ŒM  corrisponde alla matrice di massa a primo
membro della (11.74). Essa è definibile impostando un’apposita funzione il cui puntatore
sarà reso noto a ode45 attraverso la funzione di utilità odeset.
Un possibile esempio di funzione di calcolo della matrice di massa è dato dal listato
seguente.
function M = MassStickFree(t,x)
global ...
g ...
% gravity acceleration
myAC
% the aircraft object
% Give variable proper names
V
= x(1);
alpha
= x(2);
q
= x(3);
xEG
= x(4);
zEG
= x(5);
theta
= x(6);
dot_delta_e = x(7);
delta_e
= x(8);
% Using Matlab built-in ISA model for density
[air_Temp, sound_speed, air_pressure, rho] = atmosisa(-zEG);
% Aircraft relative density
mu_rel = (myAC.W/g)/(rho*myAC.S*myAC.b);
DRAFT
ver. 2012.a Copyright © A. De Marco, D. P. Coiro
% Mass matrix
M = eye(8);
M(3,2) = ...
-(1/(4*mu_rel))*(myAC.mac^2/myAC.k_y^2) ...
*(V/myAC.b)*myAC.Cm_alpha_dot;
M(3,8) = ...
-(1/(4*mu_rel))*(myAC.mac^2/myAC.k_y^2) ...
*(V/myAC.b)*myAC.Cm_delta_e_dot;
end
La funzione MassStickFree può essere salvata in un M-file avente lo stesso nome e
conservato nella cartella di lavoro.
Si rimanda alla guida in linea di Matlab per i dettagli sulla soluzione di problemi retti
da sistemi DAE.
❖
Esercizio 11.2: Angolo di “flottaggio” dell’equilibratore
M(7,3) = ...
cos(myAC.Lambda_e) ...
- myAC.mac_e*myAC.ec_adim*myAC.x_C_e/myAC.k_e^2;
M(7,6) = ...
-(myAC.mac_e*myAC.ec_adim)/myAC.k_e^2 ...
*V*cos(alpha-myAC.mu_x);
A. De Marco, D. P. Coiro – Laurea Magistrale in Ingegneria Aerospaziale, Università degli Studi di Napoli “Federico II”
Ï
A partire dall’esercizio precedente si proceda ad integrare numericamente le equazioni
del moto a comandi liberi a (3 C 1)-DoF.
Per iniziare, si trovi una condizione di volo equilibrato a quota costante, a comandi
bloccati, per assegnate quota e velocità determinando la deflessione ıe;0 corrispondente.
Quest’ultima non è altro che la posizione dell’equilibratore che il pilota deve mantenere
per proseguire il volo equilibrato.
In una prima fase del moto, ad esempio fino al tempo t1 D 1 s, si imponga il volo a
comandi bloccati. Stabilito un tempo finale della fimulazione tf D 30 s, per t1 < t tf
si consideri un volo a comandi liberi, cioè si immagini che il pilota lasci il comando
longitudinale nell’istante t1 . Per semplicità si assuma una deflessione identicamente nulla
dell’aletta tab.
Si tratti opportunamente il passaggio dalla risoluzione numerica del sistema (11.64)
alla risoluzione del sistema (11.74). A tale scopo è opportuno osservare che la soluzione del moto a comandi liberi al tempo t1 , con x7 .t1 / D 0 e x8 .t1 / D ıe;0 , diventa la
condizione iniziale della fase di moto successiva a comandi liberi.
In questo caso sarà possibile osservare il cosiddetto angolo di “flottaggio” dell’equilibratore, cioè la posizione angolare a cui tende a disporsi la superficie di governo quando
viene lasciata libera di ruotare. Verificare che in questa condizione asintotica il momento di cerniera tende ad annullarsi. Confrontare i valori finali della velocità e dell’angolo
d’attacco con i valori iniziali V0 ed ˛0 corrispondenti alla condizione di trim scelta.
Si riportino in forma di diagramma cartesiano le storie temporali delle variabili di
stato.
M(7,1) = ...
(myAC.mac_e*myAC.ec_adim)/myAC.k_e^2 ...
*sin(alpha-myAC.mu_x);
M(7,2) = ...
((myAC.mac_e*myAC.ec_adim)/myAC.k_e^2) ...
*V*cos(alpha-myAC.mu_x) ...
-rho*V*myAC.S_e*myAC.mac_e^2/(4*myAC.I_e) ...
*(1 - myAC.DepsDalpha)*myAC.Ch_e_alpha_dot;
35
M(7,8) = ...
-rho*V*myAC.S_e*myAC.mac_e^2/(4*myAC.I_e) ...
*myAC.Ch_e_delta_e_dot;
❖
Esercizio 11.3: Angolo di “flottaggio” dell’equilibratore ed effetto del trim tab
Ï
A partire dall’esercizio precedente si studi l’effetto della deflessione di un’eventuale aletta tab sull’angolo di flottaggio dell’equilibratore. Ad esempio, si trovi la deflessione ıt
necessaria ad avere un angolo ıe asintotico pari a ıe;0 .
Si assegni un valore plausibile al gradiente CHıt , riferendosi, ad esempio, ai grafici
della figura 11.14.
❖
ver. 2012.a Copyright © A. De Marco, D. P. Coiro
Esercizio 11.1: Soluzione delle equazioni del moto a comandi liberi
DRAFT
34
Dinamica e simulazione di volo – Quaderni dalle lezioni
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
5 / 31
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example of solved exercise
1. Introduction
2. Example of solved exercise
3. Example ‘engineered’ with an external tool – Matlab
4. Example ‘engineered’ with an external tool – Mathcad
5. Example ‘engineered’ with internal tools – LuaLATEX, LATEX3
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
6 / 31
la parte esercitativa e deve quindi preparare una
di gestione
collezione di
esempi
di calcolo che andrà inserita
A
simple
example
from
Aerodynamics
lla preparanel testo.
olti. Questa
Immaginiamo che a un certo punto del suo madagli
auto-you are the author of a book on Aerodynamics.
Suppose
nuale il nostro autore presenti al lettore il concetto
i scientifici
Somewhere in
book you di
introduce
a basic
concept: the li coefficient CL
di the
“coefficiente
portanza”
dicendo:
esempi di
Il coefficiente di portanza
ella fase di
. CL di un aeromobile
che
vola
alla
velocità
V
si definisce come
ratica delle
errori tipoL
CL = 1 2
(1)
tra qui una
2 ρV S
rodotti con
lche cenno
dove L è la portanza aerodinamica (lift), ρ è
i LuaLATEX
la densità dell’aria alla quota di volo ed S la
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example of solved exercise
superficie alare.
L’introduzione del concetto di coefficiente di forza
si presta
ad un
esempio
calcolo
Now you want adimensionale
to give a practical
example:
what
is thedi
value
of CL for a
basato
sulla
formula
(1).
Volendo
fornire
al
lettore
uesgiven
to manairplane in cruise flight?
preparation un esempio realistico l’autore sceglie un velivolo
t exercises. di riferimento, esegue una ricerca per trovarne le
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
7 / 31
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example of solved
exercise
si ipotizza
avercalculation
annotato i valori numerici
necessari,
AeccoDopo
basic
example
come si presenterà l’esempio di calcolo:
la condizione
= mg
Tenere traccia di L
tutti
gli esempi svolti è (2)
un
impegno che cresce ovviamente con il numero di
cioè che la portanza uguaglia il peso del velivolo.
esercizi che l’autore intende inserire nel volume.
Sulla base dei dati su riportati si calcola il peso
Esempio 1
✎
Alcuni di essi potrebbero essere ben più complessi,
altri potrebbero
unakgvariazione
W = mg essere
= 350000
· 9,81 m/s2sul tema
Calcoliamo il coefficiente di portanza di un veli(3)
rispetto ad alcuni proposti in
6 precedenza.
volo Boeing 747-400 che procede alla velocità di
= 3,43 · 10 N
Pertanto, per manoscritti di grandi dimensioni
crociera Vcr = 900 km/h, alla quota h = 11000 m.
sarebbe
utilediescogitare
unadata
strategia
di lavoro in
una forza
riferimento
dal denominatore
Si può assumere una massa m = 350000 kg ed una ed
viene automatizzato
calcolo dei valori numemembro della il(1)
superficie di riferimento S = 541,2 m2 (l’area della acuisecondo
rici nonché l’inserimento dei risultati nel sorgente
forma in pianta dell’ala).
F = 0,5 · 0,364 kg/m3
A
Alla quota di volo stabilita, secondo il mo- L TEX. r
�
�2
Tipicamente nella pratica1000
quotidiana
dello di atmosfera standard (ISA, International
m/km un autore
·
900
km/h
(4)
di s/h
calcolo scientifiStandard Atmosphere), si ha una densità dell’aria utilizza uno o più programmi
3600
co (Octave, ScicosLab, Sagemath, Matlab, Matheρ = 0,364 kg/m3 .
· 541,2
m2 = 6,16
· 106 N almeno un
eccetera)
e conosce
Detta g = 9,81 m/s2 l’accelerazione di gravità, matica, Mathcad,
linguaggio
di
programmazione
(Python,
C++, Forsi ipotizza la condizione
Infine,
tenendo
dellatutti
(3), strumenti,
il valore diquesti,
CL è
tran, Java,
Lua, conto
eccetera);
dal rapporto
L = mg
(2) dato
in grado
di esportare dati e formattare stringe su
6
file di testo. Molti
questi
sono esterni
W di 3,43
· 10software
N
cioè che la portanza uguaglia il peso del velivolo.
CLTE=X ma=possono essere
=utilizzati
0,558 per(5)
al sistema
so6
F
6,16
·
10
N
Sulla base dei dati su riportati si calcola il peso
r
stituire il metodo ‘carta e penna’ e generare valori
numerici affidabili. I numeri
così generati potrebW = mg = 350000 kg · 9,81 m/s2
❖
(3) bero essere conservati in appositi file di testo per
= 3,43 · 106 N
essere
letti in fase
di composizione
del documento.
Check out: initial data, units of measure,
decimal
digits,
intermediate
Questo
esempio
non
presenta
difficolVa osservato
che
esiste
ancheparticolari
la possibilità
di
ed una forza di riferimento data dal denominatore
tà
di calcolo.
Evidentemente
esso
èprocesso
utile all’interno
calculations,
final
result.
effettuare
calcoli
all’interno
del
di
coma secondo membro della (1)
di
un testo ad
di Aerodinamica
di base
posizione,
esempio usando
LuaLAperché:
TEX oppure
3
Agostino De F
Marco
| guIt· Gruppo
utilizzatori
Italiani di TEX | IX guItmeeting,
Napoli, 2012un’idea A
8 / 31
• fornisce
dell’ordine di grandezza del
= 0,5
0,364 kg/m
li
t
in
fi
a
s
n
b
e
e
p
il
c
r
c
2
C
p
p
g
b
p
\relsize{4}\Keyboard\hspace{2pt}%
Gestione
‘quasi automatica’ dei numeri in esercizi svolti | Example of solved exercise
\ComputerMouse}%
E
Tenere traccia
di tutti gli
esempi
svolti èall’interun
An environment for the example
L’ambiente
myExample
viene
utilizzato
ewcommand\myExampleMarkKeyboardMouse{%
Dopo aver annotato i valori numerici necessari,
\raisebox{-2pt}[0pt][0pt]{%
ecco come si presenterà l’esempio di calcolo:
\relsize{4}\Keyboard\hspace{2pt}%
\ComputerMouse}%
impegno
che cresce ovviamente
consegue:
il numero di
no
di un documento
LATEX come
esercizi che l’autore intende inserire nel volume.
\begin{myExample}
Alcuni di essi potrebbero essere ben più complessi,
\noindent%
altri potrebbero essere una variazione sul tema
ewcommand\myExampleEndMark{%
Calcoliamo il coefficiente di portanza di un veli- Calcoliamo il coefficiente di portanza di un
rispetto ad
alcuni proposti
precedenza.
velivolo
Boeing~747-400
in in
volo
alla velocità
{\ding{118}}% \ding{111}
volo Boeing 747-400 che procede alla velocità di
di crociera
...
Pertanto,
per
manoscritti
di
grandi dimensioni
crociera
V
=
900
km/h,
alla
quota
h
=
11000
m.
cr
\end{myExample}
environment per gli Esempi
sarebbe utile escogitare una strategia di lavoro in
Si può assumere una massa m = 350000 kg ed una
ewenvironment{myExample}[1][\ding{46}]{%
cui
automatizzato
il calcolo
dei valori nume- delIl viene
comando
di apertura
\begin{myExample}
superficie di riferimento S = 541,2 m2 (l’area della
\begin{myExampleT}%
rici nonché per
l’inserimento
risultati
nelvolta
sorgente
l’ambiente
l’esempiodeiapre
a sua
un teo\adjustbox{%
forma in pianta dell’ala).
A
L TEX.myExampleT ed imposta tipograficamente
set
Allaheight=1.1\baselineskip,
quota di volo stabilita, secondo il mo- rema
set di
depth=0.5\baselineskip,valign=m,
Tipicamente (posizionando
nella pratica quotidiana
autore
dello
atmosfera standard (ISA, International l’intestazione
in una un
fascia
grigia
center=\linewidth,bgcolor=gray!15}{%
utilizza
uno o più programmi
scientifiStandard
Atmosphere), si ha una densità dell’aria larga
A di calcolo
\linewidth
l’intestazione
“Esempio
1” e il
\adjustbox{left=0.6\linewidth}{%
3
co (Octave,
ScicosLab,
Matlab,
Matheρ = 0,364
kg/m .
simbolo
della
matita Sagemath,
giustificato
a destra).
Il co\myExampleLabelFormat%
Detta g = 9,81 m/s2 l’accelerazione di gravità, matica, Mathcad, eccetera) e conosce almeno un
}%
mando di chiusura \end{myExample} chiude
anche
linguaggio di programmazione (Python, C++, Forsi \adjustbox{right=0.4\linewidth}{%
ipotizza la condizione
iltran,
teorema
tipograficamente
la fascia
Java, ed
Lua,imposta
eccetera);
tutti strumenti, questi,
#1\ % myExample mark
di
chiusura
(con
il
simbolo
❖
al
centro).
L = mg
(2) grigia
}
in grado di esportare dati e formattare stringe su
}
file di testo. Molti di questi software sono esterni
cioè che la portanza uguaglia il peso del velivolo.
\medskip
al sistema TEXnumerici
ma possono essere
utilizzati per
importati
daso-file
Sulla base dei
su riportati si calcola il peso 3 Valori
\par\upshape%
testodati
normale
stituire il metodo ‘carta e penna’ e generare valori
%
numerici
affidabili.
I numeri
così generati
potrebCome
si può
rendere
più raffinata
l’infrastruttura
W = mg = 350000 kg · 9,81 m/s2
\end{myExampleT}
(3) del
A file di testo
bero
essereLAconservati
in appositi
per
codice
T
X
che
genera
l’esempio
di
calcolo?
6
\smallskip
E
= 3,43 · 10 N
essere letti in fase di composizione del documento.
\adjustbox{
La
1 suggerisce
possibile
organizzazioVafigura
osservato
che esisteuna
anche
la possibilità
di
edset
unaheight=0.55\baselineskip,
forza di riferimento data dal denominatore
ne
dei file ecalcoli
delle cartelle
di un
di grandepth=0.11\baselineskip,valign=m,
effettuare
all’interno
del manoscritto
processo di coma set
secondo
membro della (1)
center=\linewidth,bgcolor=gray!15}{%
diposizione,
dimensioni.
Tutto ilusando
materiale
siATtrova
nella carad esempio
LuaL
EX oppure
\relsize{-2}\myExampleEndMark%
Fr = 0,5 · 0,364 kg/m3
il pacchetto
l3fp di
LATEmain.tex
X3. Vedremo
avantiprintella
�book root�.
Il file
è il più
sorgente
}%
Agostino De Marco | g It Gruppo utilizzatori Italiani di T X | IX g Itmeeting, Napoli, 2012
9 / 31
Esempio 1
✎
.
type the rest of
LTEX code here
Implement a customized environment myExample with the LTEX macro
\newenvironment.
Manage numbering with ntheorem package.
.
�u
�
E
u
come ciò è possibile. In questa parte l’attenzione è
\ComputerMouse}%
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example of solved exercise
ArsTEXnica Nº 0, Dicembre 2099
} automatica’ di esempi di calcolo ed esercizi svol
Gestione ‘quasi
\newcommand\myExampleEndMark{%
Seing up the environment myExample
{\ding{118}}% \ding{111}
}
\usepackage{relsize}
% font size change
% environment per gli Esempi
\usepackage{pifont}
% for dingbats
\newenvironment{myExample}[1][\ding{46}]{%
\usepackage{marvosym} % for \Keyboard etc
\begin{myExampleT}%
\usepackage{mathtools} % for amsmath
\adjustbox{%
\usepackage{adjustbox} % advanced boxes
set height=1.1\baselineskip,
\usepackage[amsmath,hyperref]{ntheorem}
set depth=0.5\baselineskip,valign=m,
% new theorem−like environment
center=\linewidth,bgcolor=gray!15}{%
\newtheorem{myExampleT}{}
\adjustbox{left=0.6\linewidth}{%
% myExample label & format
\myExampleLabelFormat%
\newcommand\myExampleLabel{Esempio}
}%
\newcommand\myExampleLabelFormat{%
\adjustbox{right=0.4\linewidth}{%
\textbf{\upshape\hspace{3pt}\myExampleLabel%
#1\ % myExample mark
\ \themyExampleT}%
}
}
}
\newcommand\myExampleMarkPencilKeyboardMouse{%
\medskip
\bf\ding{46}\ %
\par\upshape% testo normale
\raisebox{-2pt}[0pt][0pt]{%
}{%Figura 1: Organizzazione del materiale relativo agli esem
di\end{myExampleT}
calcolo in un manoscritto di grandi dimensioni.
\relsize{4}\Keyboard\hspace{2pt}%
\ComputerMouse}%
\smallskip
}
\adjustbox{
\newcommand\myExampleMarkKeyboardMouse{%
set Boeing~747-400
height=0.55\baselineskip,
velivolo
in volo alla velocità
\raisebox{-2pt}[0pt][0pt]{%
set depth=0.11\baselineskip,valign=m,
di crociera
...
\relsize{4}\Keyboard\hspace{2pt}%
center=\linewidth,bgcolor=gray!15}{%
\end{myExample}
\ComputerMouse}%
\relsize{-2}\myExampleEndMark%
}
}%
Il comando di apertura \begin{myExample} de
\newcommand\myExampleEndMark{%
\medskip per l’esempio apre a sua volta un te
l’ambiente
{\ding{118}}% \ding{111}
}
rema myExampleT ed imposta tipograficamen
}
La
macro \newtheorem
imposta
un fascia
nuovogrig
ti% environment per gli Esempi
l’intestazione
(posizionando
in una
\newenvironment{myExample}[1][\ding{46}]{%
po larga
diNapoli,
teorema,
chiamato
myExampleT.
La
\linewidth
l’intestazione
“Esempio
1”
Agostino De Marco | g It Gruppo utilizzatori Italiani di T X | IX g Itmeeting,
2012
10 / ma31 e
u
E
u
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Matlab
Where are we up to?
1. Introduction
2. Example of solved exercise
3. Example ‘engineered’ with an external tool – Matlab
4. Example ‘engineered’ with an external tool – Mathcad
5. Example ‘engineered’ with internal tools – LuaLATEX, LATEX3
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
11 / 31
si ipotizza la condizione
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Matlab
We want all those numbers …
Dopo aver annotato i valori numerici necessari,
ecco come si presenterà l’esempio di calcolo:
Tenere traccia di L
tutti
gli esempi svolti è (2)
un
= mg
impegno che cresce ovviamente con il numero di
cioè
che che
la portanza
il peso del
esercizi
l’autore uguaglia
intende inserire
nelvelivolo.
volume.
Sulla di
base
dati su riportati
si calcola
il peso
Esempio 1
✎
Alcuni
essidei
potrebbero
essere ben
più complessi,
altri potrebbero essere una variazione 2sul tema
Calcoliamo il coefficiente di portanza di un veliW = mg = 350000 kg · 9,81 m/s
rispetto ad alcuni proposti in precedenza.
(3)
volo Boeing 747-400 che procede alla velocità di
= 3,43 · 106di
N grandi dimensioni
Pertanto,
per manoscritti
crociera Vcr = 900 km/h, alla quota h = 11000 m.
sarebbe
utilediescogitare
unadata
strategia
di lavoro in
Si può assumere una massa m = 350000 kg ed una ed
una forza
riferimento
dal denominatore
viene automatizzato
calcolo dei valori numesuperficie di riferimento S = 541,2 m2 (l’area della acuisecondo
membro della il(1)
rici nonché l’inserimento dei risultati nel sorgente
forma in pianta dell’ala).
3
A
Alla quota di volo stabilita, secondo il mo- L TEX. Fr = 0,5 · 0,364 kg/m
Tipicamente �
nella pratica quotidiana�un
2 autore
dello di atmosfera standard (ISA, International
1000 m/km
programmi
di calcolo scientifi900
km/h
(4)
Standard Atmosphere), si ha una densità dell’aria utilizza uno o· più
3600 s/h
co (Octave, ScicosLab, Sagemath, Matlab, Matheρ = 0,364 kg/m3 .
2
eccetera)
e conosce
Detta g = 9,81 m/s l’accelerazione di gravità, matica, Mathcad,
· 541,2
m2 = 6,16
· 106 N almeno un
linguaggio di programmazione (Python, C++, Forsi ipotizza la condizione
Infine,
tenendo
dellatutti
(3), strumenti,
il valore diquesti,
CL è
tran, Java,
Lua, conto
eccetera);
L = mg
(2) dato
dal rapporto
in grado
di esportare dati e formattare stringe su
file di testo. Molti di questi software
sono esterni
cioè che la portanza uguaglia il peso del velivolo.
W
3,43 · 106 N utilizzati per soal sistema
CLTE=X ma=possono essere
= 0,558
(5)
6
Sulla base dei dati su riportati si calcola il peso
Fr ‘carta
6,16e ·penna’
10 N e generare valori
stituire il metodo
2
numerici affidabili. I numeri così generati potrebW = mg = 350000 kg · 9,81 m/s
(3) bero essere conservati in❖ appositi file di testo per
= 3,43 · 106 N
essere
letti in fase
di the
composizione
How many calculation examples have you
planned
for
book? del documento.
Va osservato
che
esiste
ancheparticolari
la possibilità
di
Questo
esempio
non
presenta
difficoled una forza di riferimento data dal denominatore
AT X source?
Do
you really
to type all those numbers
incalcoli
the
Lall’interno
effettuare
del èprocesso
di comtà
di calcolo.
Evidentemente
esso
utile all’interno
E
a secondo
membrowant
della (1)
posizione,
esempio usando
LuaLAperché:
TEX oppure
di
un testo ad
di Aerodinamica
di base
3
Agostino De F
Marco
| guIt· Gruppo
utilizzatori
Italiani di TEX | IX guItmeeting,
Napoli, 2012l3fp di LAT X3. Vedremo più avanti
12 / 31
= 0,5
0,364 kg/m
il pacchetto
li
t
in
fi
a
s
n
b
e
e
p
il
c
r
c
2
C
p
p
g
b
p
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Matlab
Numbers … as results of TEX macros expansions
\input{chapter_1/examples/example_1_data}
\begin{myExample}
\noindent%
Calcoliamo il coefficiente di portanza di un velivolo Boeing~747-400 in volo alla velocità di crociera
$V_\mathrm{cr}=\SI{\myCruiseSpeedKMH}{km/h}$, alla quota $h=\SI{\myAltitudeMT}{m}$.
Si può assumere una massa $m=\SI{\myMassKG}{kg}$ ed una superficie di riferimento
$S=\SI{\myWingSurfaceMTsquared}{m^2}$ (l’area della forma in pianta dell’ala).
.
here we store numbers
Alla quota di volo stabilita, secondo il modello di atmosfera standard
(ISA, \emph{International Standard Atmosphere}), si ha una densità dell’aria
$\rho=\SI{\myAirDensityKGMTcubed}{kg/m^3}$.
Detta $g=\SI{\myGravityAccelerationMTSsquared}{m/s^2}$ l’accelerazione di gravità, si ipotizza
la condizione
\begin{equation}\label{eq:Lift:equal:Weight}
L = mg
\end{equation}
cioè che la portanza uguaglia il peso del velivolo.
For each numeric value we want to expand a TEX macro.
For correct typeseing we rely on the siunitx package.
.
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
13 / 31
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Matlab
Typeseing units
ottenuta con il codice:
eName);
uise);
ed{%g}\n’,g);
’,S);
,rho);
);
ρ = 0,364 kg/m3
%−−−−−−−−−−−−−−−−−−− nel preambolo
\usepackage{siunitx}
\sisetup{
load=derived, unitsep=thin,
valuesep=thin, decimalsymbol=comma,
round-mode=places,
expproduct=cdot,
group-separator={\thinspace},
sepfour=false
}
%−−−−−−−−−−−−−−−−−−−
...
\[
\rho =
\SI[round-precision=3]
{\myAirDensityKGMTcubed}{kg/m^3}
\]
La figura 2 mostra il codice completo del fiρ = che
0,364
kg/m3il testo dell’ele example_1.tex
compone
sempio 1. Scorrendo il codice LATEX si osserva che l’esempio di calcolo è stato completaAgostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
14 / 31
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Matlab
Numbers … as results of TEX macros expansions
.
(continued)
Sulla base dei dati su riportati si calcola il peso
\begin{equation}\label{eq:Weight:calc}
\begin{split}
W = mg ={}& \SI{\myMassKG}{kg} \cdot \SI{\myGravityAccelerationMTSsquared}{m/s^2} \\
={}& \underline{\SI{\myLiftN}{N}}
\end{split}
\end{equation}
ed una forza di riferimento data dal numeratore a secondo membro della (\ref{eq:CL:Definition}):
\begin{equation}\label{eq:Fr:calc}
\begin{split}
F_\mathrm{r} ={} &
\num{0.5} \cdot \SI{\myAirDensityKGMTcubed}{kg/m^3} \\[2pt]
& \cdot \left(\SI{\myCruiseSpeedKMH}{km/h} \, \frac{\SI{1000}{m}}{\SI{3600}{s}}\right)^2 \\[4pt]
& \cdot \SI{\myWingSurfaceMTsquared}{m^2} = \underline{\SI{\myReferenceForceN}{N}}
\end{split}
\end{equation}
Infine, il valore di $C_L$ è dato dal rapporto
\begin{equation}\label{eq:CL:calc}
C_L =
\frac{W}{F_\mathrm{r}} =
\frac{ \SI{\myLiftN}{N} }{ \SI{\myReferenceForceN}{N} } =
\underline{\num{\myCL}}
\end{equation}
\end{myExample}
Segregate macro definitions in a specific file example_1_data.tex
Put the above code in a LATEX source named example_1.tex
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
15 / 31
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Matlab
Big projects need good directory structure
Promotes good practice.
Facilitates the preparation of add-on soware.
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
16 / 31
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Matlab
Externalizing calculations to Matlab
main LATEX source
pdflatex
main.tex
main.pdf
final PDF of the book
\input
.
example_1.tex
LATEX source of the calculation example
\input
example_1_data.tex
TEX macros expanding to numbers
Matlab
example_1.m
M-file producing numbers
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
17 / 31
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Matlab
Producing numbers externally with Matlab
h = 11000; % m
% calculate: air temperature, sound speed,
% pressure, density from ISA model
% (aerospace toolbox needed)
[T, a, P, rho] = atmosisa( h );
m = 350000; % kg
V_cruise = ...
convvel(900,’km/h’,’m/s’); % m/s
g = 9.81; % m/s^2
S = 541.2; % m^2
L = m*g
F_r = 0.5*rho*V_cruise^2*S
C_L = L/F_r
.
% write on file
fileName = ’example_1_data.tex’;
fileID = fopen(fileName,’w’);
fprintf(fileID,’%% -- FILE: %s\n’,fileName);
fprintf(fileID, ...
’\\def\\myAltitudeMT{%g}\n’,h);
fprintf(fileID, ...
’\\def\\myMassKG{%g}\n’,m);
fprintf(fileID, ...
’\\def\\myCruiseSpeedMTS{%g}\n’,V_cruise);
fprintf(fileID, ...
fprintf(fileID, ...
’\\def\\myCruiseSpeedKMH{%g}\n’, ...
convvel(V_cruise,’m/s’,’km/h’));
fprintf(fileID, ...
’\\def\\myGravityAccelerationMTSsquared{%g}\n’,g);
fprintf(fileID, ...
’\\def\\myWingSurfaceMTsquared{%g}\n’,S);
fprintf(fileID, ...
’\\def\\myAirDensityKGMTcubed{%g}\n’,rho);
fprintf(fileID, ...
’\\def\\myReferenceForceN{%g}\n’,F_r);
fprintf(fileID, ...
’\\def\\myLiftN{%g}\n’,L);
fprintf(fileID, ...
’\\def\\myCL{%g}\n’,C_L);
fclose(fileID);
M-file: example_1.m
Output: file example_1_data.tex
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
18 / 31
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Matlab
Importing numbers stored on file
-
% -- FILE: example_1_data.tex
\def\myAltitudeMT{11000}
\def\myMassKG{350000}
\def\myCruiseSpeedMTS{250}
\def\myCruiseSpeedKMH{900}
\def\myGravityAccelerationMTSsquared{9.81}
\def\myWingSurfaceMTsquared{541.2}
\def\myAirDensityKGMTcubed{0.363918}
\def\myReferenceForceN{6.15476e+06}
\def\myLiftN{3.4335e+06}
\def\myCL{0.55786}
ArsTEXnica Nº 0, Dicembre 2099
Gestione ‘quasi
This set of macro definitions is simply loaded within example_1.tex with
the command:
\input{chapter_1/examples/example_1_data}
\begin{myExample}
before the macros
are used.
\noindent%
Calcoliamo
il of
coefficiente
di portanza
di un velivolo B
The \def primitive
command
TEX enables easy
macro re-definitions.
$V_\mathrm{cr}=\SI{\myCruiseSpeedKMH}{km/h}$, alla quot
Agostino De Marco | guIt Si
Gruppo
utilizzatori
Italiani di TEX | una
IX guItmeeting,
2012
19 / 31una
può
assumere
massaNapoli,
$m=\SI{\myMassKG}{kg}$
ed
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Mathcad
Where are we up to?
1. Introduction
2. Example of solved exercise
3. Example ‘engineered’ with an external tool – Matlab
4. Example ‘engineered’ with an external tool – Mathcad
5. Example ‘engineered’ with internal tools – LuaLATEX, LATEX3
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
20 / 31
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Mathcad
Problems solved with Mathcad Prime 2
Mathcad Prime 2 is a scientific worksheet soware primarily intended for
the verification, validation, documentation and re-use of engineering
calculations.
Mathcad Express is a free version of Mathcad.
ArsT Xnica Nº 0, Dicembre 2099
Agostino De Marco
E
Calculating
the li coefficient
with a Mathcad
worksheet:
PRELIMINARY OPERATIONS
Out1 ≔ [[ 999 “myInitialValueA” ]]
Initialize output matrix
m
[
mOut1 ≔ [ 999
PRELIMINARY OPERATIONS
AIRCRAFT GENERAL DATA
“myInitialValueA” ]]
mTOT ≔ 350000
= ⎛⎝7.716(Boeing
⋅ 10 5 ⎞⎠ 747-400)
Aircraft mass
AIRCRAFT
GENERAL DATA
W
≔350000
mTOT ⋅
TOT≔
mTOT
hASL ≔≔11000
W
mTOT ⋅
TOT
hASL ≔ 11000
Aircraft
= ⎛⎝7.716
⋅ 10 5 ⎞⎠ weightAircraft mass
Above-Sea-Level
Aircraft weight (ASL) flight altitude
Above-Sea-Level (ASL) flight altitude
AIR DENSITY CALCULATION
⋅
Rair ≔ 287 ⋅ ――
⋅
γair ≔ 1.4
Initialize output matrix
(Boeing 747-400)
WTOT = ⎛⎝3.5 ⋅ 10 5 ⎞⎠
h
= ⎝⎛3.609
⋅ 105 4⎞ ⎞⎠
⎛
WASL
TOT = ⎝3.5 ⋅ 10 ⎠
hASL = ⎛⎝3.609 ⋅ 10 4 ⎞⎠
WTOT = ⎛⎝3.432 ⋅ 10 6 ⎞⎠
WTOT = ⎛⎝3.432 ⋅ 10 6 ⎞⎠
ISA atmospher model
Perfect gas constant of air
Air adiabatic index (specific heat coefficient ratio)
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
21 / 31
⎛⎝7.716
⎞⎠ esercizi
Gestione AIRCRAFT
‘quasi
numeri
svolti
| Example ‘engineered’ with an external tool – Mathcad
mTOTautomatica’
≔ 350000
=dei
⋅ 10 5 in
Aircraft
mass
GENERAL DATA
(Boeing
747-400)
W
≔350000
mTOT ⋅
TOT≔
mTOT
WTOT = ⎛⎝3.5 ⋅ 10 5 ⎞⎠
Aircraft
= ⎛⎝7.716
⋅ 10 5 ⎞⎠ weightAircraft mass
WTOT = ⎛⎝3.432 ⋅ 10 6 ⎞⎠
Example with Mathcad – intermediate calculations
hASL ≔≔11000
W
mTOT ⋅
TOT
hASL ≔ 11000
Above-Sea-Level
Aircraft weight (ASL) flight altitude
Above-Sea-Level (ASL) flight altitude
AIR DENSITY CALCULATION
⋅
Rair ≔ 287 ⋅ ――
⋅
h
= ⎛⎝3.609
⋅ 105 4⎞ ⎞⎠
⎛
WASL
TOT = ⎝3.5 ⋅ 10 ⎠
hASL = ⎛⎝3.609 ⋅ 10 ⎠
Perfect gas constant of air
Air adiabatic index (specific heat coefficient ratio)
LRISA ≔ −0.0065 ⋅ ―
Lapse rate (LR), valid for troposhere only, up to 36000 ft
TSL ≔ 288.16 ⋅
Temperature at sea level (SL)
f_TISA ((h)) ≔ TSL + LRISA ⋅ h
2
Air temperature at altitude h
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
γair ⋅ Rair ⋅ f_TISA ((h))
ρSL ≔ 1.225 ⋅ ――
3
Air sound speed at altitude h
Air density at sea level
−⎛―――
+ 1⎞
⎝ LRISA ⋅ Rair ⎠
⎛ f_TISA ((h)) ⎞
f_σISA ((h)) ≔ ⎜――――
⎟
TSL
⎝
⎠
( )) ≔ ρSL ⋅ f_σISA (h
( ))
f_ρISA (h
Check results
ρ ≔ f_ρISA ⎛⎝hASL⎞⎠
WTOT = ⎛⎝3.432 ⋅ 10 6 ⎞⎠
ISA atmospher model
γair ≔ 1.4
f_aISA ((h)) ≔
4⎞
Power term:
Density ratio at altitude h
Air density at altitude h
ρ = 0.364 ――
3
FLIGHT SPEED
Vcr ≔ 900
WING DATA
S ≔ 541.2
a ≔ f_aISA ⎛⎝hASL⎞⎠ = 295.049 ―
Vcr
Mach ≔ ――
= 0.847
a
2
⎛
⎞
−⎜――――
+ 1⎟ = 4.257
⎝ LRISA ⋅ Rair
⎠
W
Agostino De Marco | guIt Gruppo utilizzatori
Italiani di TEX | IX guItmeeting, Napoli, 2012
Vcr = 250 ―
22 / 31
Gestione ‘quasi
automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Mathcad
Check results
ρ ≔ f_ρISA ⎛⎝hASL⎞⎠
a ≔ f_aISA ⎛⎝hASL⎞⎠ = 295.049 ―
ρ = 0.364 ――
3
Example with Mathcad – write data on file
Vcr
Mach ≔ ――
= 0.847
a
FLIGHT SPEED
Vcr ≔ 900
WING DATA
SW ≔ 541.2
REFERENCE FORCE
1
Fr ≔ ―⋅ ρ ⋅ Vcr 2 ⋅ SW = ⎛⎝6.153 ⋅ 10 6 ⎞⎠
2
Vcr = 250 ―
2
WTOT
⎛
((Mach
⎡ Cround
⎤⎞
LIFT COEFFICIENT
= 0.558
, 3))
“myCruiseMach”
L ≔ ――
⎜
⎢
⎥⎟
−1
⎛ Fr
, 2⎞⎠ “myCruiseSpeedKMH” ⎟
mOut1 ≔ stack ⎜mOut1 , ⎢ round ⎝Vcr ⋅
⎥
−1
⎛
⎞
⎛ ⎞
⎜
⎢
⎥⎟
⎜
⎢ round ⎜Vcr ⋅ ⎜―⎟ , 2⎟ “myCruiseSpeedMS” ⎥⎟
⎣
⎦⎠
⎝
⎝
⎝ ⎠
⎠
STACK DATA-MACRO
COUPLES
2
⎛
⎡
⎛
⎞
⎤⎞
mOut1 ≔ stack ⎜mOut1 , ⎢ round ⎜ ⋅ ―, 2⎟ “myGravityAccelerationMTSsquared” ⎥⎟
⎣
⎦⎠
⎝
⎠−1 , 1⎞ “myMassKG” ⎤⎞
⎛ ⎝Out1 , ⎡⎣ round
⎛m
≔
Out1
stack
⎦⎠
m
⎝m
⎝ TOT ⋅
⎠
⎛⎛
⎡⎡
⎛⎛
stack
≔≔
stack
, ⎣,round
⎣ round⎝W
⎝STOT
mOut1
mOut1
W⋅ ⋅
⎝m⎝Out1
mOut1
⎤⎦⎞
, 2, ⎞⎠1⎞⎠“myWingSurfaceMTsquared”
“myLiftN” ⎤⎦⎞⎠
⎠
−2−1
−1
⎛
⎡
⎛
, 1⎞⎠ “myAltitudeMT” ⎤⎦⎞⎠
mOut1 ≔ stack ⎝mOut1 , ⎣ round ⎝hASL ⋅
−1
⎛
⎡
⎛
, 3⎞⎠ “myReferenceForceN” ⎤⎦⎞⎠
mOut1 ≔ stack ⎝mOut1 , ⎣ round ⎝Fr ⋅
−1
⎛
⎛
⎞
⎤⎞
⎡
⎛ ⋅ ⎞
⎜
⎜
⎟
⎢
⎥⎟
mOut1 ≔ stack mOut1 , round Rair ⋅ ⎜――⎟ , 3 “myISAAirGasConstNMTKGK”
⎜⎝ ⎛
⎜⎝ ⎛
⎢⎣ ⎡
⎥⎦⎟⎠
⎝⎞ ⋅ ⎠
⎤⎟⎠⎞
mOut1 ≔ stack ⎝mOut1 , ⎣ round ⎝CL , 3⎠ “myCL” ⎦⎠
write numbers and
TEX macro names
⎛
⎡
⎛
⎞
⎤⎞
⎛ ⎞
⎞⎠
res ≔≔
WRITETEXT
a text file
Out1
stack ⎜ Out1⎛⎝,“example_1_data.txt”
⎟ “myISALapseRateKMT”
⎟
⎢ round ⎜LR ⋅ ⎜―⎟ ,, 5Out1
⎥on
⎣
⎦⎠
⎝
⎝
⎝ ⎠
⎠
⎛
⎡
WRITE OUTPUT FILES
⎛
⎞ “myISAAirAdiabaticIndex” ⎤⎦⎞⎠
mOut1 ≔ stack ⎝mOut1 , ⎣ round ⎝γair , 2⎠
m
.
m
⎛
−1
ISA
⎡
⎛
mOut1 ≔ stack ⎝mOut1 , ⎣ round ⎝TSL ⋅
−1
m
, 3⎞⎠ “myISAAirTemperatureSeaLevelK” ⎤⎦⎞⎠
Figura 3: Foglio di calcolo Mathcad Prime 2 che genera un file di output testuale con i dati relativi all’esempio 1.
Agostino De Marco | guIt Gruppo utilizzatori Italiani
di TEX | IX guItmeeting, Napoli, 2012
−1
23 / 31
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Mathcad
Externalizing calculations to Mathcad
main LATEX source
pdflatex
main.tex
main.pdf
final PDF of the book
\input
.
example_1.tex
LATEX source of the calculation example
\parseMathcadOutput
example_1_data.txt
⟨number⟩ ⟨tab⟩ ⟨TEX macro name⟩
Mathcad Prime 2
example_1.mcdx
Mathcad worksheet producing numbers
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
24 / 31
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool
H– Mathcad
D �31;9 N m
e;C
Figura 6: Estratto dello svolgimento del tema d’esame della figura 5. I valori numerici co
sono stati usati anche per costruire un grafico con il pacchetto pgfplots.
Importing numbers stored on file by Mathcad
Ala con flap deflessi
fileilexample_1_data.txt
Per quanto riguarda
sistema di ipersostentazione, i dati assegnati permettono di ricavare agevolme
999
"myInitialValueA"
per tutte le righe de
con flap deflessi.
Si ha:
350000 "myMassKG"
del problema è ottenu
3432327.5
"myLiftN"
Sflap
5;71 m2
possibilità
˛0L;W;flap D ˛0L;W C �˛0L
D �0;018 rad C .�0;070
rad/ di program
D �0;0
11000 "myAltitudeMT"
S
S
dei file di testo
e defi
287
"myISAAirGasConstNMTKGK"
1.4
"myISAAirAdiabaticIndex"
macro con il comando
Il valore del
CM0;f per flap deflessi è calcolabile come:
-0.0065 "myISALapseRateKMT"
Ecco la porzione d
�
�
�
�
�
� �
�
288.16 "myISAAirTemperatureSeaLevelK"
CM0 f;flap D CM0 f C CM˛ f ˛0L;W;flap � ˛0L;W D �0;059 C 0;3552 rad�1 � .�
ambolo,
che definisced
ArsT1.225
nica
"myISAAirDensitySeaLevelKGMTcubed"
X
Nº
0,
Dicembre
2099
Gestione
‘quasi
automatica’
E
0.364 "myAirDensityKGMTcube"
file formattati
come e
avendo ritenuto CM˛;f;flap � CM˛;f . Tale approssimazione può essere evitata
se è nota la pendenza
0.847 "myCruiseMach"
%%
see:
http://tex.stacke
deflessi. La
presenza dell’ala con ipersostentazione attivata determina sul momento di beccheggio de
900
"myCruiseSpeedKMH"
�
�
%%
Parse Mathcad outpu
ancora più"myCruiseSpeedMS"
forte che nel caso di ala con flap retratti CM˛;f;flap > CM˛;f . Si veda la figura 3.
250
la macro
\parseMathcadOutput
che accetta come\makeatletter
Vanno segn
9.81
"myGravityAccelerationMTSsquared"
Punto neutro
\newread\myMathcadOutp
A X (?)
argomento
il
nome
del
file
da
leggere
applicando
LuaL
541.2
"myWingSurfaceMTsquared"
E "#2"{
Il punto neutro è quel punto, tipicamente individuato sulla corda media
aerodinamica T
dell’ala,
che
\def\parseline#1
6153357.817
"myReferenceForceN"
\newcommand{\parseMath
coefficiente di ad
momento
di riga
beccheggio
delvuota.
velivolo costante al variare dell’angolo
d’attacco.
mo
\parseline
ogni
non
sione
l3fpDal
cari
0.558 "myCL"
è calcolato rispetto
a un polo coincidente
con il baricentro,
il punto neutro \def\@tempb{\par}%
è la posizione
del baricent
expl3
(?).
Pertanto,
il comando
che sostituisce
la chiamata
\openin\myMathcadOut
ciascuna
riga ⟨T
del
filemacro
un numero
La In
posizione
del punto
neutro
a comparirà
comandi bloccati
xO N , intesaincome distanza
dal
This array of couples
(⟨number⟩,
name⟩)
is parsed
in\loop\unless\ifeof\m
the adimensionale
LATEX
a \input
all’inizio
del
file
example_1.tex
nella
EXun
aerodinamica,
essere valutata
sapendo
che essa
è collegata alla posizione x4.1
O cg del baricentro
tram
virgola
fissapuò
seguito
da
carattere
di tabulazione
Uso di
\read\myMathcadOut
source example_1.tex
the
command:
figura
è with
ilstringa
seguente:
e da2una
delimitata
da una coppia di doppi
\ifx\@tempa\@tempb
CM˛ La prima pos
\expandafter\par
xO cg � xO N D
apici
(").
\parseMathcadOutput%
CL˛ ;tot
\fi
interna
al mo
In
questo
caso
il
problema
di
automatizzazione
{chapter_1/examples/example_1_data.txt}
\repeat
dove C
il gradiente della
rettadelicato
di portanzadi
del quelvelivolo completo,compilazione
comprendente i con
;tot � CL˛ èall’autore
che
siL˛presenta
è più
\closein\myMathcadOu
before the macros
used.
�
�}
loare
risolto
agevolmente
in precedenza
con d’esame
Matlab.
Nella
figura
4 è riportato
un tema
d" diSH te di eseguire
\makeatother
�H
CL˛ D CLPrime
1�
˛ ;W C CL
˛ ;H perLa
versione
attuale
di
Mathcad
non
d˛ in S
Meccanica
del divolo
gli allievi
della laurea
composizione
Agostino De Marco | guIt Gruppo
utilizzatori Italiani
TEX | IXper
guItmeeting,
Napoli, 2012
25 / 31
Ecco la porzione di codice, da inserire
�
� ˛0L;W D �0;059 C 0;3552 rad�1 � .�0;021 rad/ D �0;0664
nel pre(54)
ambolo,
che
definisce
una
funzione
di
lettura
dei
Low-level TEX programming for \parseMathcadOutput
file formattati
come example_1_data.txt:
one può essere evitata
se è nota la pendenza
C
per la configurazione a flap
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with an external tool – Mathcad
flap
M˛;f;flap
%%
see: http://tex.stackexchange.com/questions/47519
vata determina sul
momento
di beccheggio della fusoliera un effetto instabilizzante
�
%%
Parse Mathcad output
>
C
.
Si
veda
la
figura 3.
M˛;f;flap
M˛;f
\makeatletter
\newread\myMathcadOutput
ulla corda media
aerodinamica dell’ala,
che se assunto come polo dà luogo a un
\def\parseline#1
"#2"{\@namedef{#2}{#1}}
\newcommand{\parseMathcadOutput}[1]{%
ante al variare dell’angolo
d’attacco. Dal momento che il momento di beccheggio
ro, il punto neutro \def\@tempb{\par}%
è la posizione del baricentro che dà luogo a una stabilità neutra.
\openin\myMathcadOutput=#1
umero
come distanza adimensionale dal bordo d’attacco della corda media
N , intesain
\loop\unless\ifeof\myMathcadOutput
ollegata alla posizione xO cg del baricentro tramite la seguente relazione:
bulazione
\read\myMathcadOutput to \@tempa
di doppi
\ifx\@tempa\@tempb\else
CM˛
\expandafter\parseline\@tempa
xO cg � xO N D
(55)
CL˛ ;tot
\fi
zzazione
\repeat
adi
del quelvelivolo completo, comprendente i contributi dell’ala e del piano di coda:
\closein\myMathcadOutput
�
�}
Matlab.
d" SH
\makeatother
�H
1�
L
˛ ;H pernon
d˛
S
� 4;60
uale
comando
\newread
un 2012.
nuovo canale
Forpiù
details �seeIl the
article
on
14, October
mA2rsTEXnicadefinisce
(56)
C 4;245 rad�1 � 1 � 0;361 �
� 0;95
2
di lettura chiamato
\myMathcadInput.
Viene poi
19;04 m
Agostino De Marco
�1| guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
26 / 31
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with internal tools – LuaLATEX, LATEX3
Where are we up to?
1. Introduction
2. Example of solved exercise
3. Example ‘engineered’ with an external tool – Matlab
4. Example ‘engineered’ with an external tool – Mathcad
5. Example ‘engineered’ with internal tools – LuaLATEX, LATEX3
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
27 / 31
Gestione
‘quasiDe
automatica’
esercizi svolti | Example ‘engineered’
with"}"
internal tools –ALuaL
TEX
X,nica
LATEX3Nº
Agostino
Marco dei numeri in
rsTAE
"\\def\\myAltitudeMT{"
.. h ..
"\\def\\myAltitudeMT{" .. h .. "}"
S=
0, Dicembre 2099
)
)
Vcr =
tex.print(
tex.print(
A
h=
"\\def\\myMassKG{" .. m .. "}"
"\\def\\myMassKG{" .. m .. "}"
)\\
\documentclass{standalone} )
ρ=
tex.print(
\usepackage{mathtools,array,siunitx}
$C_L$
Fr =
tex.print(
"\\def\\myWingSurfaceMTsquared{"
.. S .. "}"
\usepackage{luacode}% easier catcode management
& \SI[round-precision=3]{\myCL}{}
"\\def\\myWingSurfaceMTsquared{"
.. S .. "}"
L=
)\\ \hline
\begin{luacode*}
)
tex.print(
CL =
function myExample1()
\end{tabular}
tex.print(
"\\def\\myAirDensityKGMTcubed{" .. rho .. "}"
Vcr = 900*1000/3600; -- m/s
\end{document}
"\\def\\myAirDensityKGMTcubed{"
.. rho .. "}"
)
h = 11000; -- m
nella quale, ancora, i
)
Il codice precedente va compilato con il pro
tex.print(
m = 350000; -- kg
parametrizzati con del
tex.print(
"\\def\\myGravityAccelerationMTSsquared{"
gramma
lualatex e produce la seguente tabella
S = 541.2; -- m^2
"\\def\\myGravityAccelerationMTSsquared{"
Nel sorgente LATEX
.. g .. "}"
rho = 0.364; -- kg/m^3
.. g .. "}"
)
Lua all’interno di un a
g = 9.81; -- m/s^2
)
tex.print(
m = 350000
W = m*g; -- N
Lua kg
definisce la funzio
"\\def\\myLiftN{" ..SW=..541,2
"}" m2
Fr = 0.5*rho*S*Vcrˆ2; -- Ntex.print(
accetta
argomenti. Si
"\\def\\myLiftN{"
..
W
..
"}"
)
CL = W/Fr;
Vcr = 250può
m/sessere inserito anc
)
tex.print(
tex.print(
h = 11000
mFr .. "}"
tex.print(
"\\def\\myReferenceForceN{"
..La
"\\def\\myCruiseSpeedMTS{"..
Vcr .. "}"
funzione myExa
"\\def\\myReferenceForceN{"
) .. Fr .. "}"
ρ = 0,364 kg/m3
)
riabili
necessarie ed
)
tex.print(
tex.print(
Fr = 6,16 · 106 N
Infine, tra
"\\def\\myCL{" .. CL .. "}"li richiesti.
"\\def\\myAltitudeMT{" ..tex.print(
h .. "}"
6
L = 3,43 · 10 N
"\\def\\myCL{" .. CL .. "}"
)
)
la funzione tex.print
CL = 0,558
)
end
tex.print(
ghe formattate (corris
\end{luacode*}
"\\def\\myMassKG{" .. m end
.. "}"
example_1_data.tex
\end{luacode*}
\begin{document}
nella quale, ancora, i valori
numerici sono stat
)
\directlua{myExample1()}%
definisce
le macro
Nel
codice che gener
tex.print(
parametrizzati con delle
macro.
\renewcommand*{\arraystretch}{1.1}
\begin{document}
"\\def\\myWingSurfaceMTsquared{"
.. S .. "}"
l’ambiente
document,
AT X è stato
Nel
sorgente
L
inserito
del codice
E
\begin{tabular}{@{}r@{${}={}$}l@{}}
...
)
a Lua attraverso la m
LuaLua
all’interno
\directlua{myExample1()}%\hline
invoke
function di un ambiente luacode. Il codice
tex.print(
di \directlua
$m$Lua definisce la funzione mento
\input{chapter_1/examples/example_1}
"\\def\\myAirDensityKGMTcubed{"
.. rho .. "}"
myExample1()
che non
& \SI[round-precision=0]{\myMassKG}{kg}
...
)
myExample1(),
accetta argomenti. Si noti che l’ambiente pensat
luacode
\\
\end{document}
tex.print(
nire macro e comunica
$S$può essere inserito anche nel preambolo.
"\\def\\myGravityAccelerationMTSsquared{"
ne. Dopo
l’istruzione
\
& \SI[round-precision=1]
La funzione
myExample1()
definisce
.. gDe..
"}"| g It Gruppo utilizzatori
\renewcommand*{\arraystretch}{1.1}
Agostino
Marco
Italiani di TEX | IX guItmeeting,
Napoli,
2012
28 /le31 va
u
Using LuaLTEX
$\rho$
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’
with internal
tools – LuaLATEX, LATEX3
\fp_set:Nn
\myAirDensityKGMTcubed{
& \calcSI[round-precision=3]
Una possibile gestione in LATEX3 dell’esempio di
\fn_rho_ISA{
{\myAirDensityKGMTcubed}{kg/m^3}
calcolo di questo articolo è la seguente:
\fp_use:N \myAltitudeMT
\\
}
\documentclass{article}
$F_\mathrm{r}$
}
& \calcSI[round-mode=figures,
\fp_new:N \myReferenceForceN
\usepackage{expl3}% in preamble
scientific-notation=engineering,
\fp_set:Nn
\myReferenceForceN{
% ...
round-precision=3]
0.5 * \fp_use:N \myAirDensityKGMTcubed
{\myReferenceForceN}{N}
* \fp_use:N \myCruiseSpeedMTS ^2
\ExplSyntaxOn
\\
* \fp_use:N \myWingSurfaceMTsquared }
% ISA density vs altitude
$L$
\fp_new:N \myCL
\cs_new:Npn \fn_rho_ISA #1
& \calcSI[round-mode=figures,
\fp_set:Nn \myCL{
{1.225*((288.16 - 0.0065*#1)/288.16)^(4.257)}
scientific-notation=engineering,
\fp_use:N \myLiftN
round-precision=3]
/
\fp_use:N
\myReferenceForceN }
\newcommand\myExampleFP{%
{\myLiftN}{N}
}
\fp_new:N \myMassKG
\\
% similar to siuntix macros, but able
\fp_set:Nn \myMassKG{350000}
$C_L$
% to manage expressions
\fp_new:N \myAltitudeMT
& \calcSI[round-precision=3]{\myCL}{}
\NewDocumentCommand{ \calcnum } { o m }
\fp_set:Nn \myAltitudeMT{11000}
\\ \hline
{ \num[#1]{ \fp_to_scientific:n {#2} } }
\fp_new:N \myCruiseSpeedMTS
\end{tabular}
\NewDocumentCommand{ \calcSI } { o m m }
\fp_set:Nn \myCruiseSpeedMTS{900 *1000/3600}
\end{document}
{ \SI[#1]{ \fp_to_scientific:n {#2} }{#3} }
\fp_new:N \myWingSurfaceMTsquared
\ExplSyntaxOff
\fp_set:Nn \myWingSurfaceMTsquared{541.2}
Using LATEX3 – package l3fp
Questo sorgente compone la stessa tabella ri-
\fp_new:N \myLiftN
nica 14)
AT Xdetails
(more
in ArsTEX
prodotta con LuaL
precedente.
E al paragrafo
\fp_set:Nn \myLiftN{ \fp_use:N \myMassKG * 9.81 }
Si
esamini
la
macro
\myExampleFP
che definisce
\fp_new:N \myAirDensityKGMTcubed
e assegna le variabili contenenti i dati attraverso
\fp_set:Nn \myAirDensityKGMTcubed{
\fn_rho_ISA{
i comandi fp\_new:N e fp\_set:Nn di l3fp. Que\fp_use:N \myAltitudeMT
sta macro valuta anche una funzione fn_rho_ISA
}
definita dall’utente per assegnare il valore della
}
\fp_new:N \myReferenceForceN
densità dell’aria alla quota assegnata.
\fp_set:Nn \myReferenceForceN{
Nel preambolo del documento sono definite due13
0.5 * \fp_use:N \myAirDensityKGMTcubed
macro di utilità \calcnum e \calcSI con la sintassi
* \fp_use:N \myCruiseSpeedMTS ^2
di LATEX3. Esse si basano sulle macro \num e \SI
* \fp_use:N \myWingSurfaceMTsquared }
\fp_new:N \myCL
di siunitx
ed accettano espressioni numeriche.
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting,
Napoli, 2012
29 / 31
Invoke \myExampleFP in document to define and use all macros.
A A EXnica Nº 0, Dicem
Agostino
De
Marcodei numeri in esercizi svolti | \\
Gestione ‘quasi
automatica’
Example ‘engineered’ with internal tools – LuaLATEX, rsT
LTEX3
$V_\mathrm{cr}$
π
& \calcSI[round-precision=3]
sin = 0,707
{\myCruiseSpeedMTS}{m/s}
4
uasi automatica’ A
di esempi
di calcolo ed esercizi svolti
Using LTEX3 – package l3fp
\\
Si \documentclass{standalone}
osservi che i comandi di expl3 devono es- $h$
round-precision=3]{\myReferenceForc
& \calcSI[round-precision=0]{\myAltitudeMT}{m}
sere
racchiusi dalle macro \ExplSyntaxOn e
\usepackage{mathtools,array,siunitx}
\\
\begin{document}
\\
\ExplSyntaxOff.
\myExampleFP% invokes macros easier catcode management
\usepackage{luacode}%
$L$
$\rho$
Una
possibile gestione in LATEX3 dell’esempio di
\begin{luacode*}
\renewcommand*{\arraystretch}{1.1}
calcolo
di questo
articolo è la seguente:
function
myExample1()
& \calcSI[round-precision=3]
& \SI[round-mode=figures,
{\myAirDensityKGMTcubed}{kg/m^3}
scientific-notation=engineering,
\begin{tabular}{@{}r@{${}={}$}l@{}}
\\
\documentclass{article}
\hline= 900*1000/3600; -- m/s
Vcr
round-precision=3]{\myLiftN}{N}
$F_\mathrm{r}$
$m$= 11000; -- m
& \calcSI[round-mode=figures,
h
\\
\usepackage{expl3}%
in preamble
& \calcSI[round-precision=0]{\myMassKG}{kg}
scientific-notation=engineering,
$C_L$
% ... m
\\ = 350000; -- kg
round-precision=3]
$S$= 541.2; -- m^2
{\myReferenceForceN}{N}
S
& \SI[round-precision=3]{\myCL}{}
\ExplSyntaxOn
&
\calcSI[round-precision=1]
\\
= vs0.364;
\\ \hline
% ISArho
density
altitude -- kg/m^3
{\myWingSurfaceMTsquared}{m^2}
$L$
g
-- m/s^2
\end{tabular}
\cs_new:Npn
\fn_rho_ISA
#1
\\ = 9.81;
& \calcSI[round-mode=figures,
{1.225*((288.16
- 0.0065*#1)/288.16)^(4.257)}
$V_\mathrm{cr}$
scientific-notation=engineering,
W
= m*g; -N
\end{document}
&
\calcSI[round-precision=3]
round-precision=3]
Fr = 0.5*rho*S*Vcrˆ2; -- N
\newcommand\myExampleFP{%
{\myCruiseSpeedMTS}{m/s}
{\myLiftN}{N}
CL
\fp_new:N
\myMassKG
\\ = W/Fr;
\\
\myMassKG{350000}
$h$
$C_L$
s-\fp_set:Nn
tex.print(
\fp_new:N
\myAltitudeMT
&"\\def\\myCruiseSpeedMTS{"..
\calcSI[round-precision=0]{\myAltitudeMT}{m}
& \calcSI[round-precision=3]{\myCL}{}
e \fp_set:Nn
Vcr
..
"}"
\myAltitudeMT{11000}
\\
\\ \hline
)
\fp_new:N
$\rho$ \myCruiseSpeedMTS
\end{tabular}
m = 350000 kg
\myCruiseSpeedMTS{900 *1000/3600}
& \calcSI[round-precision=3]
\end{document}
tex.print(
di \fp_set:Nn
\fp_new:N \myWingSurfaceMTsquared
{\myAirDensityKGMTcubed}{kg/m^3}
S = 541,2 m2
"\\def\\myAltitudeMT{"
.. h .. "}"
\fp_set:Nn
\myWingSurfaceMTsquared{541.2}
Questo
sorgente
compone
la
stessa
tabella
ri\\
)
\fp_new:N
\myLiftN
Vcr = 250 m/s
$F_\mathrm{r}$
prodotta con LuaLATEX al paragrafo precedente.
\fp_set:Nn
\myLiftN{
\fp_use:N
\myMassKG
*
9.81
}
& \calcSI[round-mode=figures,
tex.print(
Si esamini la macro \myExampleFP che definisce
h = 11000 m
\fp_new:N \myAirDensityKGMTcubed
scientific-notation=engineering,
"\\def\\myMassKG{"
.. m .. "}"
e assegna le variabili contenenti i dati attraverso
\fp_set:Nn
\myAirDensityKGMTcubed{
round-precision=3]
ρ = 0,364 kg/m3
)
\fn_rho_ISA{
{\myReferenceForceN}{N}
i comandi fp\_new:N e fp\_set:Nn di l3fp. Que\fp_use:N
\myAltitudeMT
Fr = 6,16 · 106 N
\\
tex.print(
sta macro valuta anche una funzione fn_rho_ISA
} $L$
"\\def\\myWingSurfaceMTsquared{"
..
S
..
"}"
definita
dall’utente
per
assegnare
il
valore
della
L = 3,43 · 106 N
}
& \calcSI[round-mode=figures,
)
\fp_new:N
\myReferenceForceN
densità dell’aria alla quota assegnata.
scientific-notation=engineering,
C
L = 0,558
\fp_set:Nn
\myReferenceForceN{
round-precision=3]
tex.print(
Nel preambolo del documento sono definite due
(more
details
in ArsTEXnica 14)
0.5
* \fp_use:N
\myAirDensityKGMTcubed
{\myLiftN}{N}
macro
di
utilità
\calcnum
e
\calcSI
con
la
sintassi
"\\def\\myAirDensityKGMTcubed{"
..
rho
..
"}"
* \\
\fp_use:N \myCruiseSpeedMTS ^2
A X3. Esse si basano sulle macro \num e \SI
*)
\fp_use:N
\myWingSurfaceMTsquared
}
$C_L$
Agostino
De Marco
| guIt Gruppo utilizzatori
Italiani di TEdi
X|L
IXTgE
30 / 31
uItmeeting, Napoli, 2012
Il codice precedente va compilato co
gramma lualatex e produce la seguente
Note the custom macro \calcSI
nella quale, ancora, i valori numerici s
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with internal tools – LuaLATEX, LATEX3
Conclusions
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
31 / 31
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with internal tools – LuaLATEX, LATEX3
Conclusions
Exercises and calculation examples handled with both external (e.g. Matlab,
Mathcad) and internal tools (LuaLATEX, LATEX3).
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
31 / 31
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with internal tools – LuaLATEX, LATEX3
Conclusions
Exercises and calculation examples handled with both external (e.g. Matlab,
Mathcad) and internal tools (LuaLATEX, LATEX3).
Useful techniques for scientific book writers.
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
31 / 31
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with internal tools – LuaLATEX, LATEX3
Conclusions
Exercises and calculation examples handled with both external (e.g. Matlab,
Mathcad) and internal tools (LuaLATEX, LATEX3).
Useful techniques for scientific book writers.
The use of external tools makes the proposed method ‘quasi-automatic’.
LuaLATEX or package l3fp enables a completely automatic approach.
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
31 / 31
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with internal tools – LuaLATEX, LATEX3
Conclusions
Exercises and calculation examples handled with both external (e.g. Matlab,
Mathcad) and internal tools (LuaLATEX, LATEX3).
Useful techniques for scientific book writers.
The use of external tools makes the proposed method ‘quasi-automatic’.
LuaLATEX or package l3fp enables a completely automatic approach.
For alternative approaches see:
PythonTeX (experimental): https://github.com/gpoore/pythontex
http://youtu.be/yIO4l0zHGjw
Package bashful: http://texdoc.net/pkg/bashful
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
31 / 31
Gestione ‘quasi automatica’ dei numeri in esercizi svolti | Example ‘engineered’ with internal tools – LuaLATEX, LATEX3
Conclusions
Exercises and calculation examples handled with both external (e.g. Matlab,
Mathcad) and internal tools (LuaLATEX, LATEX3).
Useful techniques for scientific book writers.
The use of external tools makes the proposed method ‘quasi-automatic’.
LuaLATEX or package l3fp enables a completely automatic approach.
For alternative approaches see:
PythonTeX (experimental): https://github.com/gpoore/pythontex
http://youtu.be/yIO4l0zHGjw
Package bashful: http://texdoc.net/pkg/bashful
Thank you for your aention.
Agostino De Marco | guIt Gruppo utilizzatori Italiani di TEX | IX guItmeeting, Napoli, 2012
31 / 31
Scarica

dei valori numerici in esempi di calcolo ed esercizi svolti