Pagina 1 di 1

Autoproduzione falsarighe con metapost (per programmatori)

Inviato: domenica 7 dicembre 2014, 13:18
da Crononauta
Un saluto a tutti, è un po' che non mi faccio sentire ma gli impegni sono tanti. Eppoi adesso mi sto limitando a fare esercizio col Palmer (ho completato la trascrizione del secondo libro del "de Bello Gallico" di Giulio Cesare, che sto approfittando per leggere tipo racconto di avventure! Niente di nuovo, insomma).

Nel mentre, ho trovato un linguaggio di programmazione text-oriented, della famiglia dei vari tex e latex, chiamato "metapost", che permette di stampare con estrema facilità dei fogli con righe e margini, tipo quaderno. Il compilatore è liberamente disponibile sulle varie distribuzioni di Linux, non so però se c'è qualcosa di analogo per Windows.

Venendo al sodo, si scrive con un normale editor di test un sorgente, estremamente semplice ed intuitivo:

Codice: Seleziona tutto

outputtemplate := "%j.mps";

% Foglio con righe guida per metodo Palmer
beginfig(1)

	% Pagina A4
	pagewidth  := 210mm;
	pageheight := 297mm;

	% h1 = riga sopra/sotto; h2 = riga del testo; hs = margine superiore;
	% hi = margine inferiore.
	h1 := 4mm;
	h2 := 3mm;
	hs := 27.5mm; % 1"
	hi := 13.75mm; % 1/2"

	% posizione dei margini verticali
	x1 := 10mm;
	x2 := pagewidth - x1; % simmetrico


	% funzione di disegno riga verticale
	def vline(expr x, sp, col) =
		draw (x, -0-sp/2) -- (x, -pageheight+sp/2)
			withpen pencircle scaled sp
			withcolor col;
	enddef;

	% funzione di disegno riga orizzontale
	def hline(expr y, sp, col) =
		draw (0+sp/2, y) -- (pagewidth-sp/2, y)
			withpen pencircle scaled sp
			withcolor col;
	enddef;

	% funzione che compone i "blocchi" delle righe, formati dalla riga superiore di
	% riferimento, da quella di base (più grossa), e da quella "inferiore" che delimita
	% le gambe discendenti (e, incidentalmente, forma il limite per le ascendenti
	% successive: volendo staccare i blocchi, occorrerebbe una riga in più).
	def row (expr y) =
		hline (y-h1, 0.36pt, 0.5white);
		hline (y-h1-h2, 0.56pt, 0.0white); % piu' grossa e scura la linea di base
		hline (y-2*h1-h2, 0.36pt, 0.5white);
	enddef;

	% Inizio il disegno effettivo.
	
	% Margini:
	vline (x1, 0.32pt, 0.8red);
	vline (x2, 0.32pt, 0.8red);

	% Prima riga orizzontale:
	hline (-hs, 0.28pt, 0.7white);

	% Le altre righe orizzontali, raggruppate nei "blocchi" generati dalla funzione "row".
	for i:=0 upto 22:
		row (-hs-i*(2*h1+h2));
	endfor;

endfig;

end

Ecco tutto, sembra complicato ma per chi ha un minimo di dimestichezza con la programmazione è sicuramente intuitivo (ci ho messo poche decine di minuti a prendere un esempio fatto per simulare il layout delle righe dei quaderni di seconda elementare, e rivederlo per farmi un layout con gli spazi per il Palmer).
Una volta creato il sorgente, lo si salva con estensione ".mp", per esempio "falsariga_palmer.mp"; da questo, si può generare direttamente un PDF col comando "mptopdf" (più nome file).
Il risultato è il seguente (il forum impedisce di postare dei PDF, ne faccio un sample in jpg):
Esempio Falsariga Palmer in metapost
Esempio Falsariga Palmer in metapost
falsariga_sample.jpg (101.1 KiB) Visto 1526 volte
In questo modo si possono creare delle falserighe "personalizzate" per ogni esigenza si voglia, senza sottostare ai limiti dei generatori che si trovano "online": utili, ma spesso limitati.

Autoproduzione falsarighe con metapost (per programmatori)

Inviato: domenica 7 dicembre 2014, 14:46
da Irishtales
Grazie Massimo, molto utile e interessante! :thumbup:
E' possibile aggiungere anche le linee oblique per facilitare la tracciatura delle ascendenti e discendenti inclinate, nelle falsarighe adatte ai corsivi?

Autoproduzione falsarighe con metapost (per programmatori)

Inviato: domenica 7 dicembre 2014, 15:35
da piccardi
Irishtales ha scritto:Grazie Massimo, molto utile e interessante! :thumbup:
E' possibile aggiungere anche le linee oblique per facilitare la tracciatura delle ascendenti e discendenti inclinate, nelle falsarighe adatte ai corsivi?
Il metapost lo ha inventato quel genio spaventoso di Donald Knuth per crearsi i font che gli servivano, come si era inventato il TeX per scrivere i suoi libri. Il tutto nel 1978... quando word non esisteva neanche.

Il TeX l'ho usato per la tesi di laurea, da allora sono passato al LaTeX per tutto quello che supera le due pagine di testo, ma il metapost, purtroppo, non l'ho mai preso in mano. E lo rimpiango un po' perché è nei confronti del disegno vettoriale quello che è il LaTeX nei confronti di un processore di testi.

Il tutto per dire che si può fare senz'altro, ci si può fare qualunque cosa... Il problema di questi programmi è che richiedono un po' di investimento iniziale per imparare ad usarli visto che seguono un approccio da programmatore. In genere lo sforzo si ripaga in breve tempo, ma nell'ottica di oggi del fare tutto e subito e nella maniera possibilmente più stupida possibile, richiedere di usare il cervello ha poco fascino...

Per cui un bel grazie a Massimo per averci regalato il frutto delle sue ricerche.

Simone

Autoproduzione falsarighe con metapost (per programmatori)

Inviato: domenica 7 dicembre 2014, 22:05
da Crononauta
Irishtales ha scritto:Grazie Massimo, molto utile e interessante! :thumbup:
E' possibile aggiungere anche le linee oblique per facilitare la tracciatura delle ascendenti e discendenti inclinate, nelle falsarighe adatte ai corsivi?
Dunque... sì, è possibile, piuttosto facilmente o quasi. Facilmente perché basta aggiungere alla funzione "draw" la direttiva rotated, cioè aggiungo una funzione per il disegno delle linee diagonali e poi la richiamo a ciclo 5 o 6 volte, quante ce ne stanno nella pagina (non l'ho parametrizzata molto, per adesso l'ho fatta alla brutta):

Codice: Seleziona tutto

	% funzione di disegno righe diagonali. L'angolo lo inverto poiche' lo intendo
	% con le righe inclinate "in avanti" nel senso di scrittura.
	def dline(expr x, ang) =
		draw (x, -hs) -- (x, -pageheight+35mm) rotated (360-ang)
			withpen pencircle scaled -0.28pt % qui fisso
			withcolor 0.5white; % qui fisso
	enddef;
il "quasi" invece è perché così c'è un problema, che è chiaro dall'immagine allegata:
Falsariga con diagonali che sbordano
Falsariga con diagonali che sbordano
falsariga_sample2.jpg (78.33 KiB) Visto 1473 volte
Così facendo creo semplicemente una linea verticale e poi la "ruoto" nel disegno di un valore arbitrario di gradi. Le righe però finiscono fuoriquadro, perché ogni diagonale dovrebbe invece avere una lunghezza diversa ad hoc. Perciò la cosa è meno banale del previsto, dovrò lavorare di trigonometria per calcolare i punti di intercetta coi bordi, e "fermare" le righe in quei punti. Ci studierò ;-)

Autoproduzione falsarighe con metapost (per programmatori)

Inviato: domenica 7 dicembre 2014, 22:11
da Irishtales
Grazie Massimo, è perfetta anche così: le falsarighe si usano per gli esercizi, se le righe escono fuori dallo specchio non ha poi molta importanza ;)
Ottimo lavoro!! :clap: