노트

노트

이미지를 최대한 충실하게 재현한다는 것이 아이디어입니다. 두 가지 문제: 매개변수 s가 고려되지 않습니다. 라벨 크기가 아직 너무 작습니다.

여기에 이미지 설명을 입력하세요

      \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}

답변1

더 좋은 방법이 있을 수 있지만 여기에 효과가 있는 방법이 있습니다. 좋든 나쁘든 원래 접근 방식에서 몇 가지 사항을 변경했습니다(원래에 있었던 것과 더 가까운 답변을 보려면 편집 기록의 첫 번째 답변을 참조하세요).

  • 매크로에 문자열을 전달하지 않고도 레이블을 작성할 수 있는지 또는 어떻게 수행할 수 있는지 모르기 때문에 레이블을 문자열(예: "A")로 전달했습니다.
  • 나는 plain.mp당신의 레이블에서 지침을 받아 그런 식으로 작업했습니다. 또한 이를 통해 눈금을 매우 쉽게 지정할 수 있습니다( pic1아래).
  • 직사각형과 라벨을 따로 회전시키는 것이 아니라 함께 그려서 회전시켜보았습니다.

여기에 이미지 설명을 입력하세요

편집: 추가 패키지가 필요하지 않도록 변경되었습니다. 원본에 대한 편집 기록을 참조하세요.graphicx

\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}

답변2

또 다른 방법이 있습니다...

여기에 이미지 설명을 입력하세요

\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}

노트

  • unitsquare원점 중심에 오도록 이동하면 회전이 더 쉬워집니다.

  • draw+ undraw더 얇은 펜을 사용하는 것은 모서리를 둥글게 만드는 데 유용한 트릭입니다.

  • picture다음에서 반환된 값 을 확장할 수 있습니다 .textext

  • 약간의 무작위 회전을 추가하면 이러한 종류의 디스플레이가 향상될 수 있습니다.

관련 정보