- Questo topic ha 11 risposte, 4 partecipanti ed è stato aggiornato l'ultima volta 6 anni, 3 mesi fa da
robitex.
-
CreatoreTopic
-
16 Maggio 2020 alle 6:25 #118005::
Scusate, può anche essere che sull’argomento esista già una discussione ma io non l’ho trovata. Vorrei avere una mano nel risolvere il seguente problema. Ho scritto in latex una serie di esercizi da far svolgere ai ragazzi come compito in classe. Per ciascuno degli alunni ho preparato circa quattro esercizi. Vorrei sapere se è possibile definire un campo, da mettere all’inizio di ciascun gruppo di circa quattro esercizi, da riempire con il nome e cognome dell’alunno presi da un file esterno e, se possibile, come farlo oppure dove andare a studiare la soluzione. Molte grazie per l’attenzione.
-
CreatoreTopic
-
AutoreRisposte
-
-
16 Maggio 2020 alle 8:51 #118006::
carmar” post=118446Scusate, può anche essere che sull’argomento esista già una discussione ma io non l’ho trovata. Vorrei avere una mano nel risolvere il seguente problema. Ho scritto in latex una serie di esercizi da far svolgere ai ragazzi come compito in classe. Per ciascuno degli alunni ho preparato circa quattro esercizi. Vorrei sapere se è possibile definire un campo, da mettere all’inizio di ciascun gruppo di circa quattro esercizi, da riempire con il nome e cognome dell’alunno presi da un file esterno e, se possibile, come farlo oppure dove andare a studiare la soluzione. Molte grazie per l’attenzione.
Ciao,
questo è un problema molto importante per me. La soluzione migliore che ho trovato è quella di usare LuaLaTeX. Con questo compositore compatibile con codice LaTeX (tranne cambiare un paio di pacchetti nel preambolo rispetto a pdfLaTeX) si può usare Lua, un linguaggio di programmazione che amplia considerevolmente proprio le capacità di elaborare dati rispetto a TeX.Per esempio, per rappresentare i dati in un file esterno si può usare il costruttore di tabelle di Lua. Nel tuo caso hai una lista di nomi e quindi questo:
`
return {
“Alessandro Manzoni”,
“Giuseppe Verdi”,
“Ludovico Ariosto”,
}
`Si tratta di una lista di stringhe separate da virgole. Un file contenente quel testo può essere letto direttamente da Lua e inserito come campo variabile nel documento.
`
% !TeX program = LuaLaTeX
\documentclass{article}
% caricamento dati da file esterno
\directlua{
dati = dofile “nomi.lua”
}
\newcommand{\campo}[1]{\directlua{
local n = tonumber(#1)
local nome = dati[n]
if nome then tex.sprint(nome) end
}}
\begin{document}
Compito in classe di \textbf{\campo{3}}
\end{document}
`Ecco, questo è il funzionamento di base. Prova a creare il file dati nomi.lua con la lista dei nomi e ha compilare con LuaLaTeX il secondo sorgente d’esempio.
I vantaggi sono:
non si ha necessità di alcun pacchetto
i dati si possono strutturare con complessità arbitraria
i dati si possono modificare tramite funzioni di formattazione
l’esecuzione è molto veloceTi aiuto a scrivere il codice se vuoi portare avanti questa soluzione su misura.
Alla prossima.
R.
-
16 Maggio 2020 alle 11:39 #118007
-
20 Maggio 2020 alle 14:46 #118008::
Ringrazio molto Robitex e And per l’interesse dimostrato. Provo ad allegare il file delle traccie dei compiti, una per ciascun’alunno con l’indicazione del posto dove andrebbe letto/scritto il cognome e nome dell’alunno numeri n. Provo anche ad allegare il file dei nomi degli alunni dove, per motivi di privacy, ho messo solo l’iniziale del cognome. Forse il formato di quest’ultimo file non è corretto, non lo so ditemi per favore come deve essere che lo aggiusto subito.
[attachment=2432]provacompitoIBIC.tex[/attachment][attachment=2433]provaAlunni20192020IB.tex[/attachment]
Attachments:
You must be logged in to view attached files. -
20 Maggio 2020 alle 15:20 #118009
-
20 Maggio 2020 alle 15:21 #118010
-
20 Maggio 2020 alle 15:22 #118011
-
20 Maggio 2020 alle 15:27 #118012::
Perchè non mi consente di allegare il file nomi.lua?ora provo a mandarlo così:
return {“B. RAFFAELE”,
“C. PATRIZIA”,
“C. FABIANA”,
“C. DIEGO”,
“C. GIADA”,
“C. ALEJANDRA”,
“D. BRISCILLA”,
“D. ADRIANA RITA”,
“D. FEDERICO”,
“D. MIRIAM”,
“D. TERESA”,
“G. NICOLA”,
“I. ANNA MARIA”,
“M. JESSICA”,
“M. JENNIFER”,
“M. ANTONIA”,
“M. MARTINA”,
“N. CIRO”,
“N. VALERIA”,
“P. ANTONIO”,
“P. VINCENZO”,
“P. ANGELO”,
“P. ANTONIO”,
“R. FRANCESCA PIA”,
“S. DANILO”,
“S. ALESSIO”,
“S. MATTIA”,
“T. MARTINA”,
“T. ANTONIO MARIO”,
“V. SABRINA”,
}
-
20 Maggio 2020 alle 17:52 #118013::
carmar” post=118479Perchè non mi consente di allegare il file nomi.lua?
ora provo a mandarlo così:
return {“B. RAFFAELE”,
“C. PATRIZIA”,
“C. FABIANA”,
“C. DIEGO”,
“C. GIADA”,
“C. ALEJANDRA”,
“D. BRISCILLA”,
“D. ADRIANA RITA”,
“D. FEDERICO”,
“D. MIRIAM”,
“D. TERESA”,
“G. NICOLA”,
“I. ANNA MARIA”,
“M. JESSICA”,
“M. JENNIFER”,
“M. ANTONIA”,
“M. MARTINA”,
“N. CIRO”,
“N. VALERIA”,
“P. ANTONIO”,
“P. VINCENZO”,
“P. ANGELO”,
“P. ANTONIO”,
“R. FRANCESCA PIA”,
“S. DANILO”,
“S. ALESSIO”,
“S. MATTIA”,
“T. MARTINA”,
“T. ANTONIO MARIO”,
“V. SABRINA”,
}Ciao.
Hai tutto il necessario già dal mio precedente messaggio.
Vediamo in ordine.
1) eseguire lualatex, bene è sufficiente dare il comando da terminale una volta resa la directory con il sorgente corrente:
> lualatex nomefile
Lo shell editor è più comodo ma esegue la stessa cosa dietro le quinte. Ciascuno ha un differente modo ma cerca nei menu “opzioni” o “configurazione”.2) scrivere la macro \studente
va inserita nel preambolo del documento:
`\newcommand{\studente}[1]{\directlua{
local data = data or dofile “nomefiledati.lua”
local n = tonumber(#1)
tex.sprint(data[n])
}}`Quello che fa è inserire il nome dello studente che si trova alla posizione n nella lista all’interno del file che ho chiamato “nomefiledati.lua”.
`\studente{3}`
Questa macro può essere migliorata per controllare che lo studente numero n esiste e che non sia stato già inserito precedentemente da una macro \studente. Che tutti gli studenti siano alla fine stati inseriti sarà compito della macro successiva:
`\newcommand{\studente}[1]{\directlua{
local data = data or dofile “nomefiledati.lua”
check_t = check_t or {}
local n = tonumber(#1)
local studente = data[n]
if not studente then
error(“posizione '”..n..”' vuota”)
end
if check_t[n] then
error(“Studente '”..studente..”'già inserito”)
end
check_t[n] = true
tex.sprint(studente)
}}`a questo punto la macro seguente da inserire alla fine del documento ma prima di \end{document} può controllare che ogni studente sia stato inserito:
`\newcommand{\checkinsertion}{\directlua{
local data = data or dofile “nomefiledati.lua”
for n, studente in ipairs(data) do
if not check_t[n] then
error(“Lo studente '”..studente..”' non è stato inserito nel compito”)
end
end
}}`Riassumendo: inserisci le definizione delle due macro \studente e \checkinsertion nel preambolo del documento.
Scrivi \studente{numero nella lista} e poi il testo del test.
La macro controllerà se per caso il numero studente è già stato inserito e segnalerà l’errore.
Per controllare che tutti gli studenti della lista hanno il proprio compito, scrivi \checkinsertion prima di \end{document}.
Se qualche studente manca verrà segnalato un errore.Ti allego i file:
[attachment=2435]studenti.lua[/attachment]
[attachment=2434]provacompitoIBIC.tex[/attachment]
Alla prossima.
R.
Attachments:
You must be logged in to view attached files. -
20 Maggio 2020 alle 19:59 #118014::
Robitex devo ringraziarti veramente molto per la risoluzione del problema che ho posto. Vorrei però approfittare ancora un poco della tua disponibilità:
1) Il linguaggio di programmazione lualatex si può utilizzare in tikz al posto del pgf ?
2) Potresti consigliarmi una guida alla programmazione con lualatex ?Ancora molte grazie.
-
20 Maggio 2020 alle 20:11 #118015::
carmar” post=118476Uso texstudio per scrivere e compilare in latex. Vorrei sapere come fare per impostare texstudio 2.12.22 affinchè compili con lualatex. Molte grazie per la cortese risposta.
Premetto che ho TeXstudio con l’interfaccia in inglese, quni i nomi dei menù che ti scrivo sono in inglese.
Bella barra superiore dovresti avere la voce di menù Tools, ci clicchi sopra, e haiun menù a discesa dove comare la voce del sottomenu Commands; ci clicchi sopra e scegli fra gli altri il comando LuaLaTeX. Quando ha finito di comporre clicca sulla voce di menu Tools/View.
Ma è molto più semplice fare uso delle righe magiche, MAGIC_COMMANDS, come le chiama TeXstudio; Metti in testa al file principale il commento magico`% !TEX TS-program = lualatex` facendo attenzione agli spazi. A quel punto qualunque tasto o icona tu clicchi, quel documento specifico file (con i suoi subalterni) viene compilato con LuaLaTeX.
-
21 Maggio 2020 alle 9:19 #118016::
carmar” post=118482Robitex devo ringraziarti veramente molto per la risoluzione del problema che ho posto. Vorrei però approfittare ancora un poco della tua disponibilità:
1) Il linguaggio di programmazione lualatex si può utilizzare in tikz al posto del pgf ?
2) Potresti consigliarmi una guida alla programmazione con lualatex ?Ancora molte grazie.
Figurati. Son contento che gli utenti comincino ad avvalersi di LuaLaTeX.
Vengo a risponderti alle domande.
1) si naturalmente, puoi usare TikZ oppure anche PGF che è la libreria grafica sottostante di Tikz.
2) LuaLaTeX non è altro che il formato LaTeX eseguito non da pdfTeX ma da LuaTeX. Con le dovute cautele, si può essere certi che se una codice gira in pdfLaTeX gira anche in LuaLaTeX perciò la base non cambia. Si possono usare quasi tutti i pacchetti LaTeX.La differenza principale tra pdfTeX e LuaTeX è che quest’ultimo incorpora un interprete Lua a cui si può accedere con la nuova primitiva \directlua{codice lua}. Lua è un linguaggio basato sul C e può ampliare il campo applicativo del sistema TeX enormemente.
Quindi la programmazione LuaLaTeX di cui chiedevi una guida, si compone di linguaggio (La)TeX e linguaggio Lua.
Ho scritto una guida ma non è ancor completa, o per lo meno manca di alcuni esempi pratici proprio di come possano interagire TeX e Lua. Quindi per il momento, fino a che questa guida tematica del GuIT non sarà pronta consiglio di imparare Lua, cosa che rimane validissima sempre, con il libro “Programming in Lua” di uno dei principali Autori del linguaggio stesso (tra l’altro un testo composto in LaTeX 🙂 ).
Altro riferimento che però è molto tecnico è il manuale di luatex che puoi aprire a schermo con il comando:
`$ texdoc luatex`
digitato in una finestra di comando del sistema operativo (un terminale se Linux).
Inoltre, possono essere letti alcuni articoli su LuaTeX che riguardano l’esecuzione di codice esterno o l’accesso a db sql, su ArsTeXnica. Li trovi nella pagina dedicata su questo sito.
R.
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.