
La idea es reproducir la imagen lo más fielmente posible. Dos problemas: el parámetro s no se tiene en cuenta; El tamaño de las etiquetas aún es demasiado pequeño.
\documentclass[border=5mm]{standalone}
\usepackage{luatex85}
\usepackage{luamplib}
\usepackage{unicode-math}
\setmainfont{TeX Gyre Pagella}
\setmathfont{TeX Gyre Pagella Math}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
vardef card(expr a, c, s) = image(
save rectangle;
path rectangle;
rectangle = unitsquare xscaled 2 cm yscaled 4cm;
draw rectangle rotatedaround((1cm,2cm),a) withcolor c;
label(btex \Huge s etex ,center rectangle) rotatedaround((1cm,2cm),a) withcolor c;
)
enddef;
beginfig(1)
pickup pencircle scaled 4;
color pink;
pink = (3/4, 1/3, 1/3);
draw card(-10, 1/4[red, white], A);
draw card(10 , 1/4[green, white], L) shifted 80 right;
draw card(-10, 1/4[blue, white], E) shifted 160 right;
draw card(10, pink, A) shifted 240 right;
endfig;
\end{mplibcode}
\end{document}
Respuesta1
Puede que haya mejores formas, pero aquí hay algo que funciona. Para bien o para mal, cambié un par de cosas en su enfoque original (para obtener una respuesta más cercana a la que tenía originalmente, consulte la primera respuesta en el historial de edición).
- No sé si se pueden hacer etiquetas sin pasar una cadena en la macro, así que pasé sus etiquetas como cadenas, por ejemplo, "A".
- Me guié
plain.mp
e hice tus etiquetas de esa manera. Esto además le permite especificar una escala con bastante facilidad (pic1
a continuación). - En lugar de rotar el rectángulo y la etiqueta por separado, los junté y roté el resultado.
Editar: modificado para no requerir paquetes adicionales, consulte el historial de edición del original congraphicx
\documentclass[border=5mm]{standalone}
\usepackage{luatex85}
\usepackage{luamplib}
\mplibtextextlabel{enable}
\usepackage{unicode-math}
\setmainfont{TeX Gyre Pagella}
\setmathfont{TeX Gyre Pagella Math}
\begin{document}
\begin{mplibcode}
vardef card(expr a, c, s) = image(
save pic,rectangle;
picture pic[];
path rectangle;
rectangle = unitsquare xscaled 2 cm yscaled 4cm;
pic1= s infont defaultfont scaled 4;% change your scale here
pic2=image(
draw rectangle;
draw pic1 shifted (center rectangle-center pic1);
);
draw pic2 rotatedaround((1cm,2cm),a) withcolor c;
)
enddef;
beginfig(1)
pickup pencircle scaled 4;
color pink;
pink = (3/4, 1/3, 1/3);
draw card(-10, 1/4[red, white], "A");
draw card(10 , 1/4[green, white], "L") shifted 80 right;
draw card(-10, 1/4[blue, white], "E") shifted 160 right;
draw card(10, pink, "A") shifted 240 right;
endfig;
\end{mplibcode}
\end{document}
Respuesta2
Aquí hay otra oportunidad...
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\usepackage{fontspec}
\setmainfont{Arial Rounded MT Bold}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
vardef card(expr rotation, shade, letter) = image(
path rectangle; rectangle = unitsquare shifted (-1/2, -1/2) xscaled 56 yscaled 91 ;
unfill rectangle;
draw rectangle withpen pencircle scaled 4.2;
undraw rectangle withpen pencircle scaled 3 withcolor 1/2[shade, background];
label(textext(letter) scaled 6, origin) withcolor shade;
currentpicture := currentpicture rotated rotation;
) enddef;
beginfig(1);
draw card(normaldeviate + 10, 1/2 red, "A");
draw card(normaldeviate - 10, 1/2 green, "L") shifted 80 right;
draw card(normaldeviate + 10, 1/4[blue, white], "E") shifted 160 right;
draw card(normaldeviate - 10, 1/2[red, blue], "A") shifted 240 right;
endfig;
\end{mplibcode}
\end{document}
Notas
la rotación es más fácil si se desplaza
unitsquare
para que quede centrada en el origendraw
+undraw
con un bolígrafo más fino es un truco útil para redondear las esquinasPuedes escalar el
picture
retorno detextext
Un poco de rotación aleatoria adicional puede mejorar este tipo de visualización.