Re: Nuovo pacchetto mpgraphics

#56680
Up
0
Down
::

[quote]Ciao,
vi segnalo il nuovo pacchetto mpgraphics con il quale si può inserire codice metapost direttamente nei sorgenti LaTeX.

Complimenti all’Autore ed anche ad Enrico Gregorio che compare tra gli esperti TeX nel paragrafo dei ringraziamenti del manuale del pacchetto.

Il link alla documentazione è questo:
http://mirror.ctan.org/macros/latex/contrib/mpgraphics
Bye

Spero che a breve ne esca un altro che fa qualcosa di meglio. 🙂

Ciao
Enrico

Cioé?[/quote]
È successo che quando ho visto l’annuncio preliminare di Khalighi stavo giusto ripensando a come risolvere certi problemucci su un pacchetto che fa più o meno lo stesso e, proprio per l’esperienza accumulata, ho potuto suggerirgli qualche aggiustamento; “qualche” è un eufemismo. 🙂

Il mio ha una funzione che ritengo molto importante: la possibilità di usare negli ambienti di creazione di figure Metapost lunghezze che dipendono dai parametri validi nel documento che si sta scrivendo, per esempio \textwidth o \baselineskip. Un esempio è la rappresentazione di un contatore come il numero scritto in bianco su uno sfondo ellittico grigio:
`\newlength{\mylen}
\newcommand{\circleit}[1]{\settowidth{\mylen}{#2}%
\begin{mpost}
fill fullcircle
xscaled max(\mpdim{\mylen+6pt},\mpdim{\baselineskip})
yscaled \mpdim{\baselineskip}
withcolor .4white;
draw thelabel(btex #1 etex, origin) withcolor white;
\end{mpost}}`
che può essere chiamato con \circleit{1} oppure anche \circleit{\themycount} dove “mycount” è il nome di un qualsiasi contatore. L’altezza dell’ellisse risultante sarà sempre il valore corrente di \baselineskip al momento della chiamata, l’ampiezza invece sarà \baselineskip (ottenendo un cerchio) se il simbolo da scrivere è sufficientemente stretto, altrimenti sarà l’ampiezza del simbolo più una dimensione fissa di 6pt.

Un’altra possibilità è quella di definire un simbolo che cambia “forma” a seconda del contesto:
`\makeatletter
\newcommand{\sqwave}{\usempost{sqwave\f@size\f@series}}
\newcommand{\sqwavebody}{%
u:=\mpdim{1ex};
pickup pencircle scaled \mpdim{.05em};
draw (0,0)–(2/3u,0)–(2/3u,u)–(u,u)–(u,0)–(5/3u,0);}
{\normalsize
\begin{mpost}[name=sqwave\f@size\f@series]\sqwavebody\end{mpost}
}
{\Large\bfseries
\begin{mpost}[name=sqwave\f@size\f@series]\sqwavebody\end{mpost}
}
\makeatother`
Il simbolo di onda quadra richiamato con \sqwave sarà alto come l’occhio del carattere corrente (x-height) e lo spessore della riga sarà maggiore in un contesto “nero”. Qui ci sono solo le definizioni per il corpo normale e per \Large\bfseries; se lo si dovesse usare anche in un contesto \small basterebbe aggiungere
`{\small
\begin{mpost}[name=sqwave\f@size\f@series]\sqwavebody\end{mpost}
}`
L’esempio “primordiale” è quello della “swelled rule”:
`\begin{mpost}
breadth=.667\mpdim{\columnwidth};
height=2pt;
x1=0;
x2=x6=.333×4;x5=x3=.667×4;
x4=breadth;
y1=y4=height/2;
y2=y3=height;
y5=y6=0;
fill z1–z2–z3–z4–z5–z6–cycle;
\end{mpost}`
che produce una “swelled rule” la cui lunghezza dipende da \columnwidth al momento in cui la figura viene creata. Questo è impossibile con mpgraphics.

Ciao
Enrico

Go to top