- Questo topic ha 4 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 5 anni, 4 mesi fa da
robitex.
-
CreatoreTopic
-
5 Maggio 2021 alle 9:25 #119982::
Buongiorno a tutti.Mettiamo il caso che, in un testo impaginato, voglia diminuire leggermente la dimensione del segno di lacuna, cioè […], per ragioni estetiche (con il font che uso, risulta più in linea col testo, e meno “ingombrante”, vedi immagine allegata). Premetto che uso font opentype con fontspec e LuaLaTeX.
Ovviamente potrei cercare tutte le occorrenze e cambiare la dimensione a mano; magari usando il comando \smaller del pacchetto relsize, per evitare di dover badare alla dimensione del font nel contesto (es. se il segno è in una nota a piè di pagina).
Però mi chiedevo: ci sarebbe modo di automatizzare del tutto la sostituzione in tutto il sorgente? Usando l3regex? O per qualche altra via?
Grazie in anticipo dei suggerimenti.
Attachments:
You must be logged in to view attached files. -
CreatoreTopic
-
AutoreRisposte
-
-
5 Maggio 2021 alle 10:01 #119983::
Iacobus1983″ post=120463Buongiorno a tutti.
Mettiamo il caso che, in un testo impaginato, voglia diminuire leggermente la dimensione del segno di lacuna, cioè […], per ragioni estetiche (con il font che uso, risulta più in linea col testo, e meno “ingombrante”, vedi immagine allegata). Premetto che uso font opentype con fontspec e LuaLaTeX.
Ovviamente potrei cercare tutte le occorrenze e cambiare la dimensione a mano; magari usando il comando \smaller del pacchetto relsize, per evitare di dover badare alla dimensione del font nel contesto (es. se il segno è in una nota a piè di pagina).
Però mi chiedevo: ci sarebbe modo di automatizzare del tutto la sostituzione in tutto il sorgente? Usando l3regex? O per qualche altra via?
Grazie in anticipo dei suggerimenti.
Ciao,
il metodo più semplice è usare un editor con una funzione di ricerca e sostituzione come si deve. Quella di Visual Code Editor è davvero fantastica perché elenca in anticipo nel pannnello laterale tutte le sostituzioni e funziona su più file.
Lo scopo è sostituire tutte le occorrenze con un comando per esempio \lacuna.
Se le occorrenze sono tante ti suggerisco uno script.
Ci vuole un po’ di tempo in più ma potrebbe essere l’ideale perché si gestisce in automatico il contesto.
Per esempio in:`testo […] testo` deve diventare `testo \lacuna{} testo` e `testo […].` deve diventare `testo \lacuna.`.Scriverei lo script in Lua visto che sei su LuaLaTeX e ti potrebbe far comodo in futuro conoscere meglio Lua, con i semplici passi:
- lettura del file (vedi la guidalua il capitolo “registro compilazioni”)
- sostituzione con la funzione string.gsub() (vedi la guidalua sezione Libreria standard, Stringhe)
- scrittura sul file di partenza
La guidalua si scarica con il link che ho messo nella firma.
Ciao.
R.
-
5 Maggio 2021 alle 11:31 #119984::
Iacobus1983″ post=120463Buongiorno a tutti.
Mettiamo il caso che, in un testo impaginato, voglia diminuire leggermente la dimensione del segno di lacuna, cioè […], per ragioni estetiche (con il font che uso, risulta più in linea col testo, e meno “ingombrante”, vedi immagine allegata). Premetto che uso font opentype con fontspec e LuaLaTeX.
Ovviamente potrei cercare tutte le occorrenze e cambiare la dimensione a mano; magari usando il comando \smaller del pacchetto relsize, per evitare di dover badare alla dimensione del font nel contesto (es. se il segno è in una nota a piè di pagina).
Però mi chiedevo: ci sarebbe modo di automatizzare del tutto la sostituzione in tutto il sorgente? Usando l3regex? O per qualche altra via?
Grazie in anticipo dei suggerimenti.
Premetto che la risposta che ti ha dato @robitex è validissima. Ti offro un’altra soluzione che ricorre al semplice \LaTeX.
Carica nel preambolo il pacchetto xspace definisci con definizione che ritieni più opportuna (che io qui sostituisco con —, ma che tu riempirai con la tua definizione)`\newcommand\omissis{—\xspace}`. Poi; supponiamo che nel tuo testo la lacuna sia rappresentata con […], ma potrebbe essere rappresentata anche con altro, e io qui lo indico con [+++]) conl’editor che stai usando o con quello indicato da @robitex esegui un search and replace con [+++] come stringa da cercare e indica con \omissis la stinga di sostituzione; esegui l’operazione su tutti i file che ti interessano, oppure usando Vsual Code Editor sostituisci in tutti i file del tuo documento.
Non hai bisogno di gestirti l’\omissis seguito da uno spazio o seguito da un altro segno; quel magico \xspace fa tutto il lavoro per te.
Ora, vedo di tornare all’inizio: la definizione o la semplice scrittura di […] produce un risultato sgradevole perché sembra che ci sia troppo spazio fra l’ultimo punto e la quadra chiusa; da tempo viene suggerita al deifnizione con […\!] con il comando \! che inserisce uno spazio negativo (funziona anche in modo testo, non solo in modo matematico); per questo motivo io suggerirei la definizione complessiva `\newcommand\omissis{[…\!]\xspace}`Ho usato questa macro con soddisfazione da moltissimi anni, in seguito ad un post di Enrico che la suggeriva. Se vuoi raffinare l’accostamento sostituisci \! per esempio, con \kern-0.15em aggiustando il coefficiente 0.15 a quel che ti sembra meglio in merito al font che usi, ma continua a usare l’unità di misura em che dipende dal font in uso e quindi la definizione di \omissis funziona con qualunque corpo.
Nella guida it-lshort ([tt]texdoc it-lshort[/tt]) per la lacuna senza parentesi quadre viene suggerito di usare \ldots, invece di tre punti e spiega perché; ma credo che sia una soluzione opposta a quella che stai cercando tu.
Il vantaggio di avere definito la lacuna con unsamacro ha un ulteriore risvolto: cambi idea e modifichi la definizione? Nella (ri)composizione del testo tutte le lacune sono automaticamente sostituite da quanto specificato nella nuova definizione, senza bisogno di eseguire nessun find and replace.
-
6 Maggio 2021 alle 8:09 #119985::
Grazie a entrambi per le risposte!
@OldClaudio: di fatto, siccome non scrivo direttamente in LaTeX, bensì impagino testi importati da normali elaboratori di testo, i tre puntini sono già inseriti come carattere unicode “Horizontal Hellipsis, U+2026”: dunque il risultato finale è identico a \ldots suggerito nella guida. Devo dire che nel mio caso non noto spazio eccessivo tra l’ultimo punto e la quadra chiusa; comunque istruttiva l’idea dello spazio negativo.
@robitex: grazie. Per studiare Lua dovrò aspettare le vacanze 🙂 Ma l’indicazione mi ha permesso di trovare del codice già fatto e di adattarlo. Lo riporto qui se servisse a qualcun altro (o se qualcuno che ne sa più di me vedesse dei problemi che sconsigliano di usarlo).`\documentclass{article}
\usepackage{luacode}
\usepackage{fontspec}
\setmainfont{cardo}
\usepackage{relsize}\begin{luacode}
function myreplace ( s )
s = s:gsub ( “%[…%]” , “{\\smaller{} […]}” )
return s
end
\end{luacode}\AtBeginDocument{\directlua{luatexbase.add_to_callback(
“process_input_buffer”, myreplace , “myreplace” )}}\begin{document}
Lacuna (dimensioni scalate): […]
Parentesi in dimensioni normali: [questa è una parentesi]
\end{document}
`La soluzione suggerita alla fine di questo thread
https://tex.stackexchange.com/questions/500372/conditional-string-replacements-in-lualatex
permette anche di creare degli “interruttori” per abilitare/disabilitare la sostituzione in singole sezioni del documento (ma se i test che ho fatto sono giusti, gli interruttori funzionano solo se usati tra un paragrafo e l’altro, cioè non è possibile usarne più di uno a paragrafo):`\newcommand\myreplaceOn{\directlua{luatexbase.add_to_callback(
“process_input_buffer”, myreplace , “myreplace” )}}
\newcommand\myreplaceOff{\directlua{luatexbase.remove_from_callback(
“process_input_buffer”, “myreplace” )}}`Dato che le sostituzioni vengono fatte su tutto il codice, mi sembra che sarebbe delicatissimo usare questa tecnica per sostituire caratteri che possono far parte di comandi.
In questo thread https://tex.stackexchange.com/questions/499915/pattern-syntax-using-luacode si vede come usare pattern di ricerca.
-
6 Maggio 2021 alle 8:27 #119986::
Iacobus1983″ post=120470Grazie a entrambi per le risposte!
@OldClaudio: di fatto, siccome non scrivo direttamente in LaTeX, bensì impagino testi importati da normali elaboratori di testo, i tre puntini sono già inseriti come carattere unicode “Horizontal Hellipsis, U+2026”: dunque il risultato finale è identico a \ldots suggerito nella guida. Devo dire che nel mio caso non noto spazio eccessivo tra l’ultimo punto e la quadra chiusa; comunque istruttiva l’idea dello spazio negativo.
@robitex: grazie. Per studiare Lua dovrò aspettare le vacanze 🙂 Ma l’indicazione mi ha permesso di trovare del codice già fatto e di adattarlo. Lo riporto qui se servisse a qualcun altro (o se qualcuno che ne sa più di me vedesse dei problemi che sconsigliano di usarlo).`\documentclass{article}
\usepackage{luacode}
\usepackage{fontspec}
\setmainfont{cardo}
\usepackage{relsize}\begin{luacode}
function myreplace ( s )
s = s:gsub ( “%[…%]” , “{\\smaller{} […]}” )
return s
end
\end{luacode}\AtBeginDocument{\directlua{luatexbase.add_to_callback(
“process_input_buffer”, myreplace , “myreplace” )}}\begin{document}
Lacuna (dimensioni scalate): […]
Parentesi in dimensioni normali: [questa è una parentesi]
\end{document}
`La soluzione suggerita alla fine di questo thread
https://tex.stackexchange.com/questions/500372/conditional-string-replacements-in-lualatex
permette anche di creare degli “interruttori” per abilitare/disabilitare la sostituzione in singole sezioni del documento (ma se i test che ho fatto sono giusti, gli interruttori funzionano solo se usati tra un paragrafo e l’altro, cioè non è possibile usarne più di uno a paragrafo):`\newcommand\myreplaceOn{\directlua{luatexbase.add_to_callback(
“process_input_buffer”, myreplace , “myreplace” )}}
\newcommand\myreplaceOff{\directlua{luatexbase.remove_from_callback(
“process_input_buffer”, “myreplace” )}}`Dato che le sostituzioni vengono fatte su tutto il codice, mi sembra che sarebbe delicatissimo usare questa tecnica per sostituire caratteri che possono far parte di comandi.
In questo thread https://tex.stackexchange.com/questions/499915/pattern-syntax-using-luacode si vede come usare pattern di ricerca.
Ciao.
Non era quello che avevo in mente ma, a parte qualcosina che cambierei, è OK.
Infatti, intendevo uno script esterno che elaborasse il sorgente.
Esiste anche il metodo descritto nella guida tematica alla riga di comando basato su Perl.
Ma non conosco le tue esigenze tanto da poter stabilire una soluzione ideale.
La funzione di callback non è ancora descritta nella guidalua, perché è qualcosa che considero di un livello avanzato. Per capire il codice occorre una buona conoscenza di base di Lua ovviamente, e anche l’aver a che fare con lo strato di codice delle lualibs. Ciò significa che le funzioni di callback devono essere utilizzate in modi differenti a seconda del formato caricato, LaTeX nel caso.Ed è normale che l’attivazione/disattivazione del callback dipenda dal paragrafo. Infatti il callback che usi è chiamato ad ogni acquisizione di linea perciò non ha una granularità inferiore (vedi paragrafo 9.4.1 manuale LuaTeX).
Non mi sembra neanche molto efficiente perché la sostituzione è operata OGNI volta tu compili mentre con uno script esterno, una volta sola.
Comunque riconosco un tuo impegno che fa ben sperare in un vero lunatico utente. 🙂
R.
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.