Tích hợp code của metapost vào LaTeX

Trong thời gian qua nhiều bạn đã quan tâm tới metapost và đã tập dượt sử dụng nó chuẩn bị cho công việc chuyên môn của mình. Từ trước đến nay, chúng ta thường viết code của metapost vào một file, ví dụ vd.mp, sau đó biên dịch file này bởi lệnh

mpost vd.mp

thành các file vd.1, vd.2 … tuỳ theo trong file mp có bao nhiêu hình và bạn đánh số chúng ra sao. Để tích hợp hình vẽ vào LaTeX các bạn sử dụng khai báo

\DeclareGraphicsRule{*}{mps}{*}{}

và sử dụng lệnh

\includegraphics[scale=1]{•}

với dấu • là tên của file vd.1, vd.2 kể trên. Đến đây ta biên dịch bằng pdflatex để tích hợp hình vẽ vào văn bản.

Có nhiều lý do để ta phải cập nhật cách thức thực hiện này, ví dụ khi sử dụng xetex ta không sử dụng được khai báo

\DeclareGraphicsRule{*}{mps}{*}{}

May mắn là việc cập nhật này đã được cập nhật kịp thời.

Các bạn download gói mpgraphics tại đây. Giải nén và copy file mpgraphics.sty đặt tại thư mục đang chứa file TeX.

Trong thư mục đang chứa file TeX đó ta soạn một file TeX như bình thường, trong đó các bạn khai báo gói

\usepackage{mpgraphics}

vào dòng trước dòng có chứa \begin{document}
Muốn đưa code metapost vào file TeX ta chia làm hai loại:

Loại 1: Các code metapost gồm các lệnh input ta đưa vào cặp lệnh \begin{mpdefs}\end{mpdefs}. Ví dụ tôi khai báo:

\begin{mpdefs}
input couleur;
verbatimtex
%&latex
\documentclass{article}
\usepackage[upright]{fourier}
\begin{document}
etex
\end{mpdefs}

Sau đó muốn chèn code metapost ta sang loại 2 dưới đây:

Loại 2: Đặt code metapost vào cặp lệnh: \begin{mpdisplay}\end{mpdisplay}

Ví dụ:

\begin{mpdisplay}
numeric u;
pair t,r;
transform T,S;
path p;
u= 1cm;
t=(4u,0u); r=(1u,2u);
T = identity shifted t;
S = identity shifted r;
z0=(0u,0u);
z1 = z0 transformed T;
z2 = z0 transformed S;
z3 = z0 transformed T transformed S;
p:=z0--z1--z3--z2--cycle;
fill p withcolor bleu_ciel;
draw z0--z2;
draw z2--z3;
pickup pencircle scaled 2pt;
draw z0--z1;
draw z1--z3;
pickup pencircle scaled 0.5pt;
label.urt(btex $P$ etex, z0+(0.1u,0u));
\end{mpdisplay}

Sau đó làm gì nữa? Không làm gì thêm nữa chỉ biên dịch file LaTeX thôi.

Về việc này ta cám ơn Persian TeX Group.

Ghi chú:

  1. Bạn thử biên dịch file metapost trên xem sao. Trong lệnh input có file couleur.mp, các bạn download nó tại đây và copy vào thư mục làm việc (chứa file TeX).
  2. Lệnh biên dịch của bạn phải là:
pdflatex -synctex=1 --shell-escape -interaction=nonstopmode %.tex

27 responses to “Tích hợp code của metapost vào LaTeX

  1. Tôi thực hành được trên writeLatex https://www.writelatex.com/1284517szxbpx#/3135724/
    nhưng không chạy được trên PC win8, TexLive 2014
    Nó báo lỗi
    Package ifplatform Warning:
    shell escape is disabled, so I can only detect \ifwindows.

    ) (d:/texlive/2014/texmf-dist/tex/generic/iftex/iftex.sty)

    ! Package mpgraphics Error:
    “shell escape” (or “write18”) is not enabled;
    mpgraphics will not work!
    .

    See the mpgraphics package documentation for explanation.
    Type H for immediate help.

    l.82 …ur LaTeX document Or turn compilation off}

    ?
    Mong Th Sơn gở rối giúp

  2. TexWorks chỉ có
    tôi không biết điền tham số lệnh ra sao? Mong th Sơn chỉ giúp.

  3. Bùi Sang Thọ

    Thầy ơi, thầy soạn một file mẫu rồi post lên cho tụi em học hỏi được không ạ. Em làm theo chỉ dẫn của thầy sao toàn báo lỗi không ạ.

    • \documentclass[12pt,a4paper]{article}
      \usepackage[utf8]{inputenc}
      \usepackage[vietnam]{babel}
      \usepackage{times} 
      \usepackage{amsmath}
      \usepackage{amsfonts}
      \usepackage{amssymb}
      \usepackage{graphicx}
      \usepackage[left=4.25cm,right=4.25cm,top=4.85cm,bottom=4.85cm]{geometry}
      \usepackage{mpgraphics}
      
      \begin{document}
      
      Có thể nói metapost là công cụ vẽ hình cổ xưa nhất của \LaTeX. Do độ phức tạp của ngôn ngữ vẽ hình này, nhiều người đã chuyển sang sử dụng các chương trình khác trực quan hơn và do đó dễ sửa đổi hơn. Tuy nhiên nếu đem so sánh một hình vẽ vẽ bằng metapost với các hình vẽ vẽ bằng các công cụ khác, ta sẽ thấy chất lượng hình vẽ thực hiện bằng metapost mịn hơn rất nhiều. Một đặc điểm khác mà ta vẫn phải tìm hiểu và sử dụng thành thạo metapost, đó là khả năng tạo ra các flash mà cho đến bây giờ rất ít chương trình thực hiện được.   	
      
      
      \begin{mpdisplay}
      numeric u;
      pair t,r;
      transform T,S;
      
      u= 1.5cm;
      t=(4u,0u); r=(1u,2u);
      T = identity shifted t;
      S = identity shifted r;
      path p[];
      
      
      z0=(0u,0u);
      z1 = z0 transformed T;
      z2 = z0 transformed S;
      z3 = z0 transformed T transformed S;
      
      
      path p;
      p:=z0--z1--z3--z2--cycle;
      fill p withcolor green;
      
      
      draw z0--z2;
      draw z2--z3;
      pickup pencircle scaled 2pt;
      draw z0--z1;
      draw z1--z3;
      pickup pencircle scaled 0.5pt;
      label.urt(btex $P$ etex, z0+(0.1u,0u));
      
      
      z4 = (0.5u,.5u);
      z5 = (4u,1u);
      draw z4--z5 withpen pencircle scaled 1.5bp withcolor red;
      label.top(btex $d$ etex, z5);
      
      
      z6 = (2u,1.5u);
      z7 = (0.2u,1u);
      dotlabel.rt(btex $A$ etex, z6);
      
      
      z9 = z6 shifted 2z7;
      z10 = z6 shifted -3z7;
      p1 = z6--z10;
      p2 = z0--z1;
      z11 = p1 intersectionpoint p2;
      draw z6--z11 dashed evenly withpen pencircle scaled 1bp withcolor blue;
      draw z11--z10 withpen pencircle scaled 1bp withcolor blue;
      draw z6--z9 withpen pencircle scaled 1bp withcolor blue ;
      
      
      label.rt(btex $d'$ etex, z10);
      \end{mpdisplay}
      
      Khi chúng tôi khởi xướng việc vẽ hình bằng metapost trên trang Blog {\sf  https://osshcmup.wordpress.com} nhiều bạn trẻ đã tham gia tích cực và đã hội nhập với việc vẽ hình bằng công cụ không đơn giản này.
      \end{document}
      
  4. Bùi Sang Thọ

    Cách khắc phục lỗi như trên ở Texmaker như thế nào vậy thầy?

  5. Chúc Thầy làm việc tốt và cuối tuần vui vẻ. Tạm biệt Thầy.

  6. Cám ơn thầy về hướng dẫn sử dụng metapots chạy trực tiếp trong latex. Vì trước đây em đều phải dùng phần mềm MPEdit để chạy code metapost.
    Chúc Thầy luôn mạnh khỏe, gia đình hạnh phúc và có kỳ nghỉ lễ thật ý nghĩa.

  7. Thầy ơi, em là sinh viên K39101B đây ạ!
    Thầy cho em hỏi, có cách nào chỉnh font latex thành 13pt cho phù hợp với tiêu chuẩn văn bản hiện hành của nước mình không ạ!
    Em cám ơn thầy.

  8. Thưa thầy, em bị lỗi write18 (shell escape) trê n TeXmaker với TeXStudio ạ, nhưng khi sử dụng writelatex.com thì vẫn xuất được hình metapost bình thường ạ!
    Thầy giúp em sửa lỗi này với ạ

    • Em bị lỗi thế nào? Xem lại lệnh biên dịch có đủ chưa:

      pdflatex -synctex=1 --shell-escape -interaction=nonstopmode %.tex
      
      • Dạ! link ảnh đây thầy:http://d.f24.photo.zdn.vn/upload/original/2014/10/08/21/09/3085104400_953744726_574_574.jpg
        Nếu em sử dụng writelatex.com thì nó vẫn chạy bình thường nhưng dùng TeXmaker thì không được ạ!
        https://www.writelatex.com/1532207pgbxrc
        Mong thầy chỉ rõ cách khắc phục giúp em ạ🙂 Tại em mới học nên kiến thức còn kém ạ!

      • em chú ý writelatex.com đã cài đặt đầy đủ và lệnh biên dịch hoàn chỉnh. Do đó có thể tex của em cài đặt thiếu hoặc lệnh pdflatex em thiếu tuỳ chọn –shell-escape.

        Hình em gửi không minh hoạ điều gì và mờ quá thầy không đọc được. Tốt nhất em copy lthông báo lỗi và gửi cho thầy.

        Một cách chắc chắn em kiểm tra lại:
        1. TeXLive hoặc MiKTeX cài đặt bản full .
        2. Lệnh biên dịch phải là:

        pdflatex -synctex=1 –shell-escape -interaction=nonstopmode %.tex

      • Dạ có phải cái này không ạ?!
        ! Package mpgraphics Error:”shell escape” (or “write18”) is not enabled;mpgraphics will not work!.See the mpgraphics package documentation for explanation.Type H for immediate help…. …ur LaTeX document Or turn compilation off}
        ——
        Thưa thầy làm kiểm tra lênh biên dịch pdflatex -synctex=1 –shell-escape -interaction=nonstopmode %.tex bằng như thế nào ạ?

      • em dùng TeXmaker, mở Options/Configure Texmaker/

        em xem dòng lệnh thứ 2 có phải là:

        pdflatex -synctex=1 --shell-escape -interaction=nonstopmode %.tex

        nếu không, em copy và dán vào.

      • Dạ, em đã dán nhưng xuất file ra không có hình ạ.
        Kết quả file pdf ở vị trí hình alf *************XSTK*II*-*Mr.*Long-fig1.mp converted to XSTJ*II*-*Mr.*Long-fig1.esp**************
        và vẫn báo lỗi:
        ! Package mpgraphics Error:”shell escape” (or “write18”) is not enabled;mpgraphics will not work!.See the mpgraphics package documentation for explanation.Type H for immediate help…. …ur LaTeX document Or turn compilation off}

      • File em gửi thầy biên dịch không có vấn đề gì. Em kiểm tra nhu sau:

        Em đổi tên file là brown.tex
        Trên Texmaker, em mở nenu Tools/Open Terminal
        Khi Terminal mở ra, em viết sau dấu nháy lệnh biên dịch như sau:
        pdflatex --shell-escape brown.tex

        Trước “shell” là hai dấu gạch ngang liên tiếp, sau “shell” là một dấu gạch ngang.
        Em gõ theo không copy, vì nếu copy khi dán vào hai dấu gạch ngang thành một dấu gạch dài.

        Nhấn enter để biên dịch. Nếu xuất ra hình, nghĩa là lệnh biên dịch pdflatex trên TeXmaker của em chưa điều chỉnh.

  9. Hôm qua dạy đến 19g30 khát nước, cho học trò nghỉ, đi thẳng về nhà vì mệt.

    Khi ta mệt ta chỉ có một ao ước duy nhất là NGHỈ.

  10. Thầy ui….Thầy đi mô rồi? Sao không trả lời em vậy Thầy? (=^.^=)

  11. Thầy ơi….mọi việc có tốt không Thầy? Thầy có làm kịp không?

  12. Thầy ơi!
    Em biên dịch nó báo lỗi
    shellesc.sty not found
    là bị gì vậy thầy
    cám ơn thầy nhiều

    • có lẽ em gõ lệnh dịch sai chính tả. Gõ đúng như sau:

      pdflatex -synctex=1 –shell-escape -interaction=nonstopmode %.tex

      trong đó dấu % là tên file tex không có phần mở rộng

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s