
A ideia é reproduzir a imagem da forma mais fiel possível. Dois problemas: o parâmetro s não é levado em consideração; o tamanho das etiquetas ainda é muito pequeno.
\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}
Responder1
Pode haver maneiras melhores, mas aqui está algo que funciona. Para melhor ou para pior, mudei algumas coisas em sua abordagem original (para uma resposta mais próxima do que você tinha originalmente, consulte a primeira resposta no histórico de edições).
- Não sei se ou como os rótulos podem ser feitos sem passar uma string na macro, então passei seus rótulos como strings, por exemplo, "A".
- Segui orientação
plain.mp
e fiz seus rótulos dessa forma. Além disso, isso permite que você especifique uma escala com bastante facilidade (pic1
abaixo). - Em vez de girar o retângulo e o rótulo separadamente, juntei-os e girei o resultado.
Editar: alterado para não exigir pacotes extras, consulte o histórico de edição do original comgraphicx
\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}
Responder2
Aqui está outra tentativa...
\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
a rotação é mais fácil se você mudar
unitsquare
para que fique centralizado na origemdraw
+undraw
com uma caneta mais fina é um truque útil para obter cantos arredondadosVocê pode dimensionar o
picture
retornado detextext
Uma pequena rotação aleatória extra pode melhorar esse tipo de exibição