- Questo topic ha 13 risposte, 4 partecipanti ed è stato aggiornato l'ultima volta 4 anni, 3 mesi fa da
OldClaudio.
-
CreatoreTopic
-
2 Giugno 2022 alle 6:35 #121036::
Come si fa bloccare la compilazione e scrivere nel log un messaggio personale?
Mi spiego
ho preparato un comando che mi scrive un trinomio di secondo grado il classico
`
ax^2+bx+c
`
Come fare in test su a
del tipo se a=0 allora blocco tutto e scrivo nel log “hai messo a =0 controlla”
ciao
claudio
-
CreatoreTopic
-
AutoreRisposte
-
-
2 Giugno 2022 alle 7:44 #121037
-
2 Giugno 2022 alle 8:29 #121038::
Quello che ti scrive @strolego è corretto, ma dipende da cosa ne vuoi fare del tuo trinomio di secondo grado.La scrittura ax^2+bx+c va benissimo per essere stampata; ma se dopo avere scritto la forumletta vuoi calcolare le radici con valori numerici di a, b, c, lo puoi fare con \fpeval, ma dentro il suo argomento devi mettere il test di @stolego, oppure un test differente che sfrutti le funzionalità di \fpeval; vedi la documentazione di xfp.
LaTeX, come sai bene, serve essenzialmente per scrivere; serve anche per disegnare e per disegnare deve poter eseguire dei calcoli; TeX e LaTeX209 si limitavano moltissimo nei calcoli, in particolare eseguendoli con numeri reali, perché al su internoi valori numerisci erano sempre espressi mediante scaled points, cioè con valori interi corrispondenti a 2(16) volte il valore di una lunghezza specificato in punti tipografici. Per fortuna alcunianni fa gli sviluppi di LaTeX3 hanno permesso di mettere a disposizione degli utenti il pacchetto xfp che permette di fare conti con numeri reali veri esprssi in decimale con 16 cifre fratte(di defaault); le macro \fpeval e \inteval permettono di “evaluate a floating point expression” e “evaluate an integer expression” (ho scritto in inglese in modoche i nomi delle macro abbiano un significato ben preciso. Puoi fare di tutto con queste due macro. @egreg ne ha scritto sia su ArsTeXnica, sia nella documentazione di vari pacchetti. Io ho usato queste cose sia per il pacchetto graphpaper (insieme a Francesco) sia per i pacchetti curve2e e per euclideangeometry. Capisco che con i tempi che corrono TikZ spopoli e annulli tutti i pacchetti grafici disponibili, ma mi sono divertito un mondo a scrivere macro per fare calcoli di ogni genere, compresi quelli con numeri complessi, che sono un modo molto comodo per lavorare con le coordinate del piano, sia usando la forma cartesiana sia quella polare. Recentemente ho scritto un pacchetto che sostituisce per certi scopi un medaglione realizzabile con tcolorbox, basato su TikZ), con qualche macro che sfrutta curve2e, e la velocità di compilazione è almeno raddoppiata se non triplicata.
Quindi ora i conti si possono fare; ovviamente richiedono dei test e sono disponibili sia i comandi nativi di TeX, sia il pacchetto ifthen che ti ha suggerito @strolego, sia altri test incorporati nelle macro che eseguono calcli in virgola mobile.
Scusa la prolissità e la mia mancanza di modestia (chi si loda si imbroda, dice il proverbio); ma ci sono tante cose a portata di tutti che non vengono usate o sfruttate abbastanza.
-
2 Giugno 2022 alle 9:07 #121039::
no i calcoli li fanno gli altri
devo solo scrivere un comando che dati tre numeri mi stampi un trinomio di secondo grado.
Ovviamente a deve essere diversa da zero. La richiesta è paranoica se per sbaglio arriva un a=0 il sistema si deve bloccare.
Cercando nel forum ho trovato un problema simile e il contributo di Gustavo, l’indimenticabile letteracdp
eccolo link
ciao e grazie
claudio
-
2 Giugno 2022 alle 9:57 #121040::
ho provato a implementarlo così
`
\documentclass[10pt,a4paper]{article}
\usepackage{etoolbox}
\newcommand{\parteAtriSec}[1]{\ifnumequal{#1}{0}{\message{a=0}\stop}
{\ifnumcomp{#1}{>}{0}{\ifnumequal{#1}{1}
{x^{2}}{#1x^{2}}}
{\ifnumequal{#1}{-1}{-x^{2}}{#1x^{2}}}}}
\newcommand{\trimonioSecGrad}[3]{\parteAtriSec{#1}}
\begin{document}
$\trimonioSecGrad{0}{-1}{1}$
\end{document}
`nel log appare il messaggio a=0 ma l’errore è il math mode non concluso
ciao
claudio
-
3 Giugno 2022 alle 7:35 #121041::
Ciao.
Ti consiglio Lua per risolvere e mantenere “elevate potenzialità espressive” del codice.
Per esempio, in Lua puoi creare un oggetto che corrisponde al trinomio.
Al momento della creazione, puoi effettuare i controlli e aggiungere nuovi metodi al bisogno.
TeX non è adatto per svolgere questi compiti, mentre Lua è a disposizione per compierli abbastanza bene.
Si può pensare addirittura di connettere software esterni di calcolo simbolico.Per esempio, in questo codice l’idea è passare i tre valori (numerici) a Lua. Lua li valida (controlla solo se la a è diversa da zero) e costruisce l’oggetto.
Poi un metodo (il :tex() ) avvia il codice matematico LaTeX necessario per stampare il trinomio.
Questo metodo non è elegante. Troppi if then else. Ma si sa come rimediare… :A questo punto non è difficile immaginare un metodo che calcola le radici, disegna il grafico, risolve disequazioni, usa una diversa lettera, stampa in ordine inverso rispetto al grado, somma due trinomi, eccetera eccetera.
Potrei anche aggiungere nuovi metodi di costruzioni dell’oggetto, come uno che fa il quadrato del binomio.Ecco il file:
[attachment=2696]u.tex[/attachment]Alla prossima.
R.
Attachments:
You must be logged in to view attached files. -
3 Giugno 2022 alle 10:43 #121042
-
3 Giugno 2022 alle 12:07 #121043::
claudio” post=121559La tua risposta mi ha fatto venir voglia di studiare Lua
Carina è la gestione dell’input, le variabili locali etc
Esiste il costrutto case ?
ciao
ClaudioNo, sarebbe una sintassi ridondante per un linguaggio che ricerca l’essenzialità.
Ti rimando alla guida tematica sull’argomento (dovrebbe esserci il link nella mia firma in basso).
R.
-
3 Giugno 2022 alle 12:32 #121044::
Continuando con il discorso,
l’esempio mio con etoolbox e quello di robitex permettono di scrivere il trinomio abc. Quelle righe di codice non sono più idonee
per scrivere bac o cba. In pratica servono 6 funzioni diverse.
Per quanto ne so non è possibile scrivere in latex una procedura che presi a,b,c li scriva in ordine casuale senza utilizzare una variabile globale (abc, acb, bac etc..).
In lua, ho intuito che è possibile
ciao
claudio
-
3 Giugno 2022 alle 13:19 #121045::
claudio” post=121561Continuando con il discorso,
l’esempio mio con etoolbox e quello di robitex permettono di scrivere il trinomio abc. Quelle righe di codice non sono più idonee
per scrivere bac o cba. In pratica servono 6 funzioni diverse.
Per quanto ne so non è possibile scrivere in latex una procedura che presi a,b,c li scriva in ordine casuale senza utilizzare una variabile globale (abc, acb, bac etc..).
In lua, ho intuito che è possibile
ciao
claudioSi lo è sicuramente per esempio ricorrendo a generatori casuali esterni.
Tuttavia occorre un momento per riflettere perché ci sono due tipi diversi di procedura di shuffle casuale rispetto al momento della compilazione.Infatti, durante la compilazione il codice mescola più o meno casualmente un insieme di elementi.
Una seconda compilazione dello stesso documento darebbe quindi un risultato differente.Oppure è possibile ottenere la sequenza casuale random e poi inserirla nel sorgente come dato fisso.
Ogni compilazione avrà la sua sequenza casuale ma sarà sempre la stessa.Ecco un esempio:`% !TeX program = LuaLaTeX
\directlua{
function shuffle(data, rnd_seq)
local t = {}
for i, pos in ipairs(rnd_seq) do
t = data[pos]
end
return t
end
}\documentclass{article}
\begin{document}
(\directlua{
local shuffled_seq = shuffle({ 'a', 'b', 'c' }, {3, 1, 2})
tex.print(table.concat(shuffled_seq, [[, ]]))
})
\end{document}`Spero di essermi spiegato con questa differenza.
Prima infatti anch’io seguivo il primo approccio per poi rendermi conto che il secondo è più comodo perché si ha il controllo, ed è egualmente casuale.R.
-
3 Giugno 2022 alle 13:49 #121046::
la mia soluzione etoolbox
`
\documentclass[10pt,a4paper]{article}
%\usepackage{abort}
\usepackage{etoolbox}\newcommand{\parteAtriSecabc}[1]{\ifnumequal{#1}{0}{\message{a=0}\stop}%
{\ifnumcomp{#1}{>}{0}{\ifnumequal{#1}{1}
{x^{2}}{#1x^{2}}}%
{\ifnumequal{#1}{-1}{-x^{2}}{#1x^{2}}}}}
\newcommand{\parteBtriSecabc}[1]{%
\ifnumequal{#1}{0}{}{\ifnumgreater{#1}{0}{\ifnumequal{#1}{1}{+x}{+#1x}}
{\ifnumequal{#1}{-1}{-x}{#1x}}}%
}
\newcommand{\parteCtriSecabc}[1]{%
\ifnumequal{#1}{0}{}{\ifnumgreater{#1}{0}{+#1}{#1}}%
}
%3 bac
\newcommand{\parteAtriSecbac}[1]{\ifnumequal{#1}{0}{\message{a=0}\stop}%
{\ifnumcomp{#1}{>}{0}{\ifnumequal{#1}{1}
{+x^{2}}{+#1x^{2}}}%
{\ifnumequal{#1}{-1}{-x^{2}}{#1x^{2}}}}}
\newcommand{\parteBtriSecbac}[1]{%
\ifnumequal{#1}{0}{}{\ifnumgreater{#1}{0}{\ifnumequal{#1}{1}{x}{#1x}}
{\ifnumequal{#1}{-1}{-x}{#1x}}}%
}\newcommand{\parteCtriSeccab}[1]{%
\ifnumequal{#1}{0}{}{\ifnumgreater{#1}{0}{#1}{#1}}%
}
\newcommand{\newtrinomio}[4]{
\ifcase #4
\parteAtriSecabc{#1}\parteBtriSecabc{#2}\parteCtriSecabc{#3}%1 abc
\or
\parteAtriSecabc{#1}\parteCtriSecabc{#3}\parteBtriSecabc{#2}%2 acb
\or
\parteBtriSecbac{#2}\parteAtriSecbac{#1}\parteCtriSecabc{#3}%3 bac
\or
\parteBtriSecbac{#2}\parteCtriSecabc{#3}\parteAtriSecbac{#1}%4 bca
\or
\parteCtriSeccab{#3}\parteAtriSecbac{#1}\parteBtriSecabc{#2}%5 cab
\or
\parteCtriSeccab{#3}\parteBtriSecabc{#2}\parteAtriSecbac{#1}%6 cba
\fi
}\begin{document}
\[\newtrinomio{1}{2}{4}{4}\]\[\newtrinomio{1}{2}{4}{2}\]
\end{document}
`
Si può eliminare il quarto parametro?
-
3 Giugno 2022 alle 13:53 #121047::
Dobbiamo ringraziare @robitex per la sua passione per LuaTeX e LuaLaTeX. Certamente unire il linguaggio di composizione tipografia ((La)TeX) con un linguaggio di trattamento dati (Lua) è stata un’idea vincente da parte di Hans e Taco. Sicuramente Il linguaggio Lua è una forza della natura, ma a tutt’oggi vedo che anche in seno al LaTeX Team il ricorso a Lua è mmolto casuale.
Personalmente l’ho usato pochissimo, un epsilon tendente a zero; solo una sua funzione è utile per i lavoro che faccio io, ed è il fatto che si può convincere Lua(La)TeX a caricare le impostazioni per una data lingua, compresi i suoi pattern, anche se non sono già codificati e scritti dentro il file di formato, come succede con pdfLaTeX XeLaTeX. Per cui riesco a creare nuovi patter e testarli subito senza bisogno di inserirli in nessun formato.Ma lo ammetto; in quanto Old, non ho più la mente fresca che ha YoungClaudio. E per qunto ci abbia provato non sono riuscito a imparare una sola regola di quel linguaggio. Dovrei fare come fa @robitex che spinto dalle necessita delsuo lavoro, ha studiiato a fondo Lua e ora lo maneggia con disinvoltura.
YougClaudio, tu hai l’età per cimentarti con Lua; buttati a farlo e vedrai quante soddisfazioni potrai ottenere.
Un linguaggio che maneggio male è LaTeX3; non ho controllato, ma credo che LaTeX3 sia meno difficile da imparare che Lua; il concetto base è sempre lo stesso del linguaggio LaTeX, ma con funzioni molto più potenti. Non vedrei male una funzione (il nome delle macro in L3 è “funzione”) che riceve a, b, c e che prima ne faccia l’analisi e poi o emetta il messaggio d’errore con lo \stop, oppure crei il trinomio e lo scriva; potrebbe anche calcolarne le radici; a seconda del segno del discriminante potrebbe anche scriverlo scomposto in fattori; potrebbe calcolarne il quadrato. Non sono sicuro che possa formare una lista dei tre coefficienti e comporre un trinomi dalla una permutazione casuale dei coefficienti, come sarebbe capace di fare Lua; forse sì, ma non l’ho mai fatto. Con LaTeX ho invece creato un programmino FORTRAN per permutare una lista di 500 numeri, accedendo a questo programma esterno con la funzionalità del “write18” del sistema TeX. Sono riuscito a compilare degli eserciziari di allenamento per i test di ingresso gestiti dal consorzio universitario che usa questi test. Ho cioè surrogato Lua col Fortran per una specialissima funzione che ero in grado di programmare, mentre non ero capace di farlo in Lua. Non dico affatto che Fortran (number cruncher) sostituisca Lua (general data cruncher), ma talvolta succede.
Quindi le vie della programmazione sono infinite; tutto sta a volerle percorrere.
-
3 Giugno 2022 alle 14:16 #121048::
Si mi trovo bene con Lua. Sono a mio agio con la sintassi e ho scritto parecchie linee di codice per i compiti più disparati anche fuori dai sorgenti TeX.La mia opinione in merito alla convenienza di un linguaggio o meno è la seguente.
Di ogni funzionalità LaTeX, l’utente cerca senza dubbio una personale naturalezza d’uso. Per questo penso che se Lua in quanto linguaggio generale, aiuta ad ampliare moltissimo l’espressività del linguaggio nel sorgente che scrive l’utente per comporre i propri documenti, allora diventa essenziale.
Posso dimostrare che questo è sempre stato il mio intento: fin dal mio primo articolo per ArsTeXnica nel 2007 ho sempre dato la massima importanza alla sintassi del linguaggio come vera forza del sistema TeX.Il fatto che non ci siano ancora molti pacchetti che fanno uso di Lua, non vuol dire che il ragionamento sia sbagliato.
Penso che la comunità di sviluppatori, alla luce delle potenziate e potenziali nuove funzioni debba dirigersi con coerenza di sintassi e coordinamento, verso Lua, decisamente verso Lua per fornire agli utenti un potentissimo strumento di scrittura e composizione tipografica.
Lua è di gran lunga la migliore occasione che abbiamo per far evolvere il sistema TeX in qualcosa di ancora più semplice e potente da usare.La comunità ConTeXt ha proposto MKIV, un formato TeX basato su Lua, ma poi le cose sono cambiate e MKIV non viene più sviluppata ma solo mantenuta. Un nuovo motore ha preso il suo posto.
La comunità di sviluppatori LaTeX è rimasta al solo TeX non rendendosi conto del potenziale di Lua o se ne è resa conta, non volendo cambiare registro con LaTeX3.
Io penso che questa scelta del Team di LaTeX3 sia sbagliata.Due comunità diverse che non hanno unito le forze, hanno prese direzioni diverse perdendo forse l’occasione più importante.
Ciao.
R.
-
3 Giugno 2022 alle 20:53 #121049::
Sono d’accordo con te, e sono convinto che nell’evoluzione del sistema TeX rimarrà solo Lua(La)TeX; forse sopravviverà ConTeX, dove MKII non evolve ma va solo in manutenzione, mentre MKIV da quel che vedo continua a svilupparsi; la stessa guida LuaTeX Reference Manual mi pare che sia scritta con ConTeXt. Tuttavia TeX e ConTeXt sono due varietà diverse e non intercambiabili.
Già oggi molti pacchetti, compresi quelli “standard”, contengono parti scritte in Lua; da fontspec a imakeidx. Quest’ultimo mi è caro perché l’ho cominciato insieme a egreg, poi ho lasciato a lui ogni paternità; la parte scritta in Lua, l’ha aggiunta lui.Ma apprezzo anche LaTeX3; chi si occupa di queste cose lavora sul linguaggio, quando poi queste cose vanno a finire nei formati, o nelle classi, o nei pacchetti, la commistione di Lua e di L3 produce risultati formidabili.
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.