Tại sao không vẽ hình bằng metapost?

Câu trả lời đầu tiên là KHÓ.
Sau đó nếu không sợ khó thì không biết BẮT ĐẦU TỪ ĐÂU.
Khi đã biết bắt đầu từ đâu rồi thì không biết viết code như thế nào.
Khi đã biết viết code rồi thì làm sao hiển thị được hình vẽ.

Để vượt qua những cái khó đó cách tốt nhất là … xắn tay áo lên và cầm bút chì. Một khóa dạy vẽ miễn phí mà bảo đảm đậu sẽ được khai giảng trên Blog này, tất nhiên bắt đầu từ abc…

CHƯƠNG 1. HÌNH HỌC PHẲNG.

BÀI TẬP 1.

Giả sử ta muốn vẽ một hình như sau:

Trên thư mục làm việc các bạn download các file geometrie2d.mp, label.mp về lưu vào thư mục.

PHÂN TÍCH:

Hình vẽ này gồm có 3 điểm: A, B, C
Một tam giác với 3 đỉnh là A, B và C.
Một đường tròn ngoại tiếp tam giác và tâm của nó là O.
Các tham số vẽ hình nằm trong một file macro là geometrie2d.mp (file này viết bằng tiếng Pháp)

  1. KHAI BÁO: Điểm được khai báo bằng tọa độ của nó (giống như bạn chấm một điểm lên tờ giấy).
  2. ĐINH NGHĨA: Tam giác được đặt tên (để gọi) và được định nghĩa bằng lệnh tạo tam giác: T = Triangle(A,B,C);
  3. Đường tròn ngoại tiếp được đặt tên (để gọi) và được định nghĩa bằng lệnh tạo đường tròn ngoại tiếp: c = CercleCirconscrit(T);
  4. Gọi tên tâm O của đường tròn c: O = Centre(c);
  5. VẼ HÌNH: Ra lệnh vẽ tam giác, độ rộng nét vẽ 1.5pt, màu đỏ nhạt
  6. Ra lệnh vẽ đường tròn, độ rộng nét vẽ 1pt (mãnh hơn), màu trắng nhạt.
  7. GẮN NHÃN: Gắn tên của mỗi đỉnh vào đúng vị trí của nó.

DỰNG HÌNH:

    1. Mở TeXMaker, bấm vào Structure (ở dưới cùng màn hình), chọn MP sẽ liệt kê tất cả các lệnh của metapost.
    2. Trên panel trái chứa các lệnh của MP các bạn bấm vào dòng đầu tiên, trên TeXMaker sẽ xuất hiện môi trường:
beginfig();
•
endfig;

các bạn điền số 1 vào beginfig(); thành beginfig(1);

    1. Khai báo chèn giữa beginfig … endfig
A = Point(0,0);
B = Point(8,0);
C = Point(6,4);
    1. Định nghĩa chèn tiếp vào sau đoạn khai báo
T = Triangle(A,B,C);
c = CercleCirconscrit(T);
O = Centre(c);
    1. Ra lệnh vẽ tam giác
trace T
withpen pencircle scaled 1.5 pt withcolor 0.6red;

 

      các từ khóa withpen, pencircle, scaled, withcolor đều có trong danh sách các lệnh trên panel bên trái, các bạn không cần gõ, chỉ cần bấm.

    1. Ra lệnh vẽ đường tròn ngoại tiếp
trace c
withpen pencircle scaled 1pt withcolor 0.6white;
    1. Đặt tên cho các đỉnh
marque.llft "A";
marque.lrt  "B";
marque.urt  "C";
marque.urt  "O";

các từ l, r, t, b là viết tắt của left, right, top, bottom để đặt ký tự tại một địa chỉ với sự bố trí thích hợp.

Hoàn thiện sau khi bổ sung một số chi tiết không cơ bản, các bạn có file sau đây lưu thành bt1.mp

input geometrie2d;

beginfig(1);

    A = Point(0,0);
    B = Point(8,0);
    C = Point(6,4);

    T = Triangle(A,B,C);
    c = CercleCirconscrit(T);
    O = Centre(c);

    trace T
	withpen pencircle scaled 1.5 pt withcolor 0.6red;

    trace c
	withpen pencircle scaled 1pt withcolor 0.6white;

    marque.llft "A";
    marque.lrt  "B";
    marque.urt  "C";
    marque.urt  "O";

endfig;
end

Sau khi soạn xong code của hình vẽ các bạn biên dịch bằng công cụ mpost, cú pháp biên dịch như sau:

mpost bt1.mp

sẽ xuất ra một hình tên là bt1.1

Hình vẽ đã thành bây giờ ta hiển thị hình vẽ như sau:

soạn một file bt1.tex:

\documentclass[12pt,a4paper]{book}
\usepackage{graphicx}
\DeclareGraphicsRule{*}{mps}{*}{}
\begin{document}
\includegraphics[scale=1]{bt1.1}
\end{document}

chạy pdflatex biên dịch file TeX sẽ hiển thị được hình. Muốn sử dụng hình này trong một tài liệu các bạn chỉ cần viết trong tài liệu đó tại vị trí thích hợp
\includegraphics[scale=1]{bt1.1}

Tuần sau:

Advertisements

24 responses to “Tại sao không vẽ hình bằng metapost?

  1. Thầy ơi!thầy có thể cung cấp 2 file geometrie2d.mp, label.mp luôn được không ạ…để mọi người tải về cho tiện…em cám ơn thầy.

  2. Metapost trong LaTeX hay thật thầy ạ, em vẽ được hình Euler mà sách LaTeX của thầy hướng dẫn với tự vẽ thêm hình về đường Simson rồi 🙂

  3. cho xin luôn file label.mp cảm ơn nhiều!

  4. Cảm ơn thầy nhiều lắm, em đang nghiên cứu vẽ hình bằng metapost, mong được thầy giúp đỡ.

  5. Thầy ơi! Tại sao các dòng lệnh sau máy không biên dịch được: marque.llft “A”;
    marque.lrt “B”;
    marque.urt “C”;
    marque.urt “O”;
    Trong khi đó các dòng lệnh khác vẫn chạy bình thường. Vì vậy hình vẽ không có labels?

    • Có thể file labels.mp của em có vấn đề. Copy code sau đây chép đè lên file labels.mp của em xem sao.

      lFOURIER := 1;
      
      string lSTRING[];
      lSTRING[0] = "alpha";
      lSTRING[1] = "beta";
      lSTRING[2] = "gamma";
      lSTRING[3] = "delta";
      lSNB = 3;
      
      vardef scanchaine_label(expr s) =
          save d,m,f,c,l,flag,i; string d,m,f,c;
          d := ""; m := ""; f := "";
          l = length(s); flag := 0;
          for i:=0 upto l:
      	c := substring (i,i+1) of s;
      	if c = "'":
      	    f := f & c; flag := 2;
      	elseif c = "_":
      	    flag := 1;
      	else:
      	    if flag = 0: 
      		d := d & c
      	    else:
      		m := m & c
      	    fi;
      	fi	
          endfor;
          for i:=0 upto lSNB:
      	if d = lSTRING[i]: d := "\" & d fi
          endfor;
          d := d & "_{" & m & "}" & f;
          d
      enddef;
      
      vardef lTEX primary s =
        write "verbatimtex" to "mptextmp.mp";
        write "%&latex" to "mptextmp.mp";
        write "\documentclass{article}" to "mptextmp.mp";
        if lFOURIER=1: write "\usepackage{fourier}" to "mptextmp.mp" fi;
        write "\begin{document}" to "mptextmp.mp";
        write "etex" to "mptextmp.mp";
        write "btex $"& scanchaine_label(s) &"$ etex" to "mptextmp.mp";
        write EOF to "mptextmp.mp";
        scantokens "input mptextmp"
      enddef;
      
      vardef TEX primary s =
        write "verbatimtex" to "mptextmp.mp";
        write "%&latex" to "mptextmp.mp";
        write "\documentclass{article}" to "mptextmp.mp";
        if lFOURIER=1: write "\usepackage{fourier}" to "mptextmp.mp" fi;
        write "\usepackage{amsmath}" to "mptextmp.mp";
        write "\everymath{\displaystyle}" to "mptextmp.mp";
        write "\begin{document}" to "mptextmp.mp";
        write "etex" to "mptextmp.mp";
        write "btex "& s &" etex" to "mptextmp.mp";
        write EOF to "mptextmp.mp";
        scantokens "input mptextmp"
      enddef;
      
      endinput    
      
  6. Thầy giúp em với, em copy chép đè vẫn bị lỗi như cũ:
    Process started

    fatal: Command failed: tex –parse-first-line –interaction=nonstopmode mp351835.tex; see mpxerr.log

    Process exited with error(s)

  7. Đây là nội dung file mpxerr.log
    This is pdfTeX, Version 3.1415926-2.3-1.40.12 (MiKTeX 2.9) (preloaded format=latex 2013.8.31) 13 NOV 2013 21:17
    entering extended mode
    **mpxerr.tex
    (D:\latex\toantien\vehinhMetapost\mpxerr.tex
    LaTeX2e
    Babel and hyphenation patterns for english, afrikaans, ancientgreek, ar
    abic, armenian, assamese, basque, bengali, bokmal, bulgarian, catalan, coptic,
    croatian, czech, danish, dutch, esperanto, estonian, farsi, finnish, french, ga
    lician, german, german-x-2009-06-19, greek, gujarati, hindi, hungarian, iceland
    ic, indonesian, interlingua, irish, italian, kannada, kurmanji, lao, latin, lat
    vian, lithuanian, malayalam, marathi, mongolian, mongolianlmc, monogreek, ngerm
    an, ngerman-x-2009-06-19, nynorsk, oriya, panjabi, pinyin, polish, portuguese,
    romanian, russian, sanskrit, serbian, slovak, slovenian, spanish, swedish, swis
    sgerman, tamil, telugu, turkish, turkmen, ukenglish, ukrainian, uppersorbian, u
    senglishmax, welsh, loaded.
    (“C:\Program Files\MiKTeX 2.9\tex\latex\base\article.cls”
    Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
    (“C:\Program Files\MiKTeX 2.9\tex\latex\base\size10.clo”
    File: size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
    )
    \c@part=\count79
    \c@section=\count80
    \c@subsection=\count81
    \c@subsubsection=\count82
    \c@paragraph=\count83
    \c@subparagraph=\count84
    \c@figure=\count85
    \c@table=\count86
    \abovecaptionskip=\skip41
    \belowcaptionskip=\skip42
    \bibindent=\dimen102
    )
    (“C:\Program Files\MiKTeX 2.9\tex\latex\fourier\fourier.sty”
    Package: fourier 2005/01/01 1.4 fourier-GUTenberg package

    (“C:\Program Files\MiKTeX 2.9\tex\latex\base\fontenc.sty”
    Package: fontenc 2005/09/27 v1.99g Standard LaTeX package

    (“C:\Program Files\MiKTeX 2.9\tex\latex\base\t1enc.def”
    File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file
    LaTeX Font Info: Redeclaring font encoding T1 on input line 43.
    ))
    (“C:\Program Files\MiKTeX 2.9\tex\latex\base\textcomp.sty”
    Package: textcomp 2005/09/27 v1.99g Standard LaTeX package
    Package textcomp Info: Sub-encoding information:
    (textcomp) 5 = only ISO-Adobe without \textcurrency
    (textcomp) 4 = 5 + \texteuro
    (textcomp) 3 = 4 + \textohm
    (textcomp) 2 = 3 + \textestimated + \textcurrency
    (textcomp) 1 = TS1 – \textcircled – \t
    (textcomp) 0 = TS1 (full)
    (textcomp) Font families with sub-encoding setting implement
    (textcomp) only a restricted character set as indicated.
    (textcomp) Family ‘?’ is the default used for unknown fonts.
    (textcomp) See the documentation for details.
    Package textcomp Info: Setting ? sub-encoding to TS1/1 on input line 71.

    (“C:\Program Files\MiKTeX 2.9\tex\latex\base\ts1enc.def”
    File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file
    )
    LaTeX Info: Redefining \oldstylenums on input line 266.
    Package textcomp Info: Setting cmr sub-encoding to TS1/0 on input line 281.
    Package textcomp Info: Setting cmss sub-encoding to TS1/0 on input line 282.
    Package textcomp Info: Setting cmtt sub-encoding to TS1/0 on input line 283.
    Package textcomp Info: Setting cmvtt sub-encoding to TS1/0 on input line 284.
    Package textcomp Info: Setting cmbr sub-encoding to TS1/0 on input line 285.
    Package textcomp Info: Setting cmtl sub-encoding to TS1/0 on input line 286.
    Package textcomp Info: Setting ccr sub-encoding to TS1/0 on input line 287.
    Package textcomp Info: Setting ptm sub-encoding to TS1/4 on input line 288.
    Package textcomp Info: Setting pcr sub-encoding to TS1/4 on input line 289.
    Package textcomp Info: Setting phv sub-encoding to TS1/4 on input line 290.
    Package textcomp Info: Setting ppl sub-encoding to TS1/3 on input line 291.
    Package textcomp Info: Setting pag sub-encoding to TS1/4 on input line 292.
    Package textcomp Info: Setting pbk sub-encoding to TS1/4 on input line 293.
    Package textcomp Info: Setting pnc sub-encoding to TS1/4 on input line 294.
    Package textcomp Info: Setting pzc sub-encoding to TS1/4 on input line 295.
    Package textcomp Info: Setting bch sub-encoding to TS1/4 on input line 296.
    Package textcomp Info: Setting put sub-encoding to TS1/5 on input line 297.
    Package textcomp Info: Setting uag sub-encoding to TS1/5 on input line 298.
    Package textcomp Info: Setting ugq sub-encoding to TS1/5 on input line 299.
    Package textcomp Info: Setting ul8 sub-encoding to TS1/4 on input line 300.
    Package textcomp Info: Setting ul9 sub-encoding to TS1/4 on input line 301.
    Package textcomp Info: Setting augie sub-encoding to TS1/5 on input line 302.
    Package textcomp Info: Setting dayrom sub-encoding to TS1/3 on input line 303.
    Package textcomp Info: Setting dayroms sub-encoding to TS1/3 on input line 304.

    Package textcomp Info: Setting pxr sub-encoding to TS1/0 on input line 305.
    Package textcomp Info: Setting pxss sub-encoding to TS1/0 on input line 306.
    Package textcomp Info: Setting pxtt sub-encoding to TS1/0 on input line 307.
    Package textcomp Info: Setting txr sub-encoding to TS1/0 on input line 308.
    Package textcomp Info: Setting txss sub-encoding to TS1/0 on input line 309.
    Package textcomp Info: Setting txtt sub-encoding to TS1/0 on input line 310.
    Package textcomp Info: Setting lmr sub-encoding to TS1/0 on input line 311.
    Package textcomp Info: Setting lmdh sub-encoding to TS1/0 on input line 312.
    Package textcomp Info: Setting lmss sub-encoding to TS1/0 on input line 313.
    Package textcomp Info: Setting lmssq sub-encoding to TS1/0 on input line 314.
    Package textcomp Info: Setting lmvtt sub-encoding to TS1/0 on input line 315.
    Package textcomp Info: Setting qhv sub-encoding to TS1/0 on input line 316.
    Package textcomp Info: Setting qag sub-encoding to TS1/0 on input line 317.
    Package textcomp Info: Setting qbk sub-encoding to TS1/0 on input line 318.
    Package textcomp Info: Setting qcr sub-encoding to TS1/0 on input line 319.
    Package textcomp Info: Setting qcs sub-encoding to TS1/0 on input line 320.
    Package textcomp Info: Setting qpl sub-encoding to TS1/0 on input line 321.
    Package textcomp Info: Setting qtm sub-encoding to TS1/0 on input line 322.
    Package textcomp Info: Setting qzc sub-encoding to TS1/0 on input line 323.
    Package textcomp Info: Setting qhvc sub-encoding to TS1/0 on input line 324.
    Package textcomp Info: Setting futs sub-encoding to TS1/4 on input line 325.
    Package textcomp Info: Setting futx sub-encoding to TS1/4 on input line 326.
    Package textcomp Info: Setting futj sub-encoding to TS1/4 on input line 327.
    Package textcomp Info: Setting hlh sub-encoding to TS1/3 on input line 328.
    Package textcomp Info: Setting hls sub-encoding to TS1/3 on input line 329.
    Package textcomp Info: Setting hlst sub-encoding to TS1/3 on input line 330.
    Package textcomp Info: Setting hlct sub-encoding to TS1/5 on input line 331.
    Package textcomp Info: Setting hlx sub-encoding to TS1/5 on input line 332.
    Package textcomp Info: Setting hlce sub-encoding to TS1/5 on input line 333.
    Package textcomp Info: Setting hlcn sub-encoding to TS1/5 on input line 334.
    Package textcomp Info: Setting hlcw sub-encoding to TS1/5 on input line 335.
    Package textcomp Info: Setting hlcf sub-encoding to TS1/5 on input line 336.
    Package textcomp Info: Setting pplx sub-encoding to TS1/3 on input line 337.
    Package textcomp Info: Setting pplj sub-encoding to TS1/3 on input line 338.
    Package textcomp Info: Setting ptmx sub-encoding to TS1/4 on input line 339.
    Package textcomp Info: Setting ptmj sub-encoding to TS1/4 on input line 340.
    )
    (“C:\Program Files\MiKTeX 2.9\tex\latex\fourier\fourier-orns.sty”
    Package: fourier-orns 2004/01/30 1.1 fourier-ornaments package
    )
    LaTeX Font Info: Redeclaring symbol font `operators’ on input line 50.
    LaTeX Font Info: Encoding `OT1′ has changed to `T1′ for symbol font
    (Font) `operators’ in the math version `normal’ on input line 50.
    LaTeX Font Info: Overwriting symbol font `operators’ in version `normal’
    (Font) OT1/cmr/m/n –> T1/futs/m/n on input line 50.
    LaTeX Font Info: Encoding `OT1′ has changed to `T1′ for symbol font
    (Font) `operators’ in the math version `bold’ on input line 50.
    LaTeX Font Info: Overwriting symbol font `operators’ in version `bold’
    (Font) OT1/cmr/bx/n –> T1/futs/m/n on input line 50.
    LaTeX Font Info: Overwriting symbol font `operators’ in version `bold’
    (Font) T1/futs/m/n –> T1/futs/b/n on input line 51.
    LaTeX Font Info: Redeclaring symbol font `letters’ on input line 59.
    LaTeX Font Info: Encoding `OML’ has changed to `FML’ for symbol font
    (Font) `letters’ in the math version `normal’ on input line 59.
    LaTeX Font Info: Overwriting symbol font `letters’ in version `normal’
    (Font) OML/cmm/m/it –> FML/futmi/m/it on input line 59.
    LaTeX Font Info: Encoding `OML’ has changed to `FML’ for symbol font
    (Font) `letters’ in the math version `bold’ on input line 59.
    LaTeX Font Info: Overwriting symbol font `letters’ in version `bold’
    (Font) OML/cmm/b/it –> FML/futmi/m/it on input line 59.
    \symotherletters=\mathgroup4
    LaTeX Font Info: Overwriting symbol font `letters’ in version `bold’
    (Font) FML/futmi/m/it –> FML/futmi/b/it on input line 61.
    LaTeX Font Info: Overwriting symbol font `otherletters’ in version `bold’
    (Font) FML/futm/m/it –> FML/futm/b/it on input line 62.
    LaTeX Font Info: Redeclaring math symbol \Gamma on input line 63.
    LaTeX Font Info: Redeclaring math symbol \Delta on input line 64.
    LaTeX Font Info: Redeclaring math symbol \Theta on input line 65.
    LaTeX Font Info: Redeclaring math symbol \Lambda on input line 66.
    LaTeX Font Info: Redeclaring math symbol \Xi on input line 67.
    LaTeX Font Info: Redeclaring math symbol \Pi on input line 68.
    LaTeX Font Info: Redeclaring math symbol \Sigma on input line 69.
    LaTeX Font Info: Redeclaring math symbol \Upsilon on input line 70.
    LaTeX Font Info: Redeclaring math symbol \Phi on input line 71.
    LaTeX Font Info: Redeclaring math symbol \Psi on input line 72.
    LaTeX Font Info: Redeclaring math symbol \Omega on input line 73.
    LaTeX Font Info: Redeclaring symbol font `symbols’ on input line 113.
    LaTeX Font Info: Encoding `OMS’ has changed to `FMS’ for symbol font
    (Font) `symbols’ in the math version `normal’ on input line 113.
    LaTeX Font Info: Overwriting symbol font `symbols’ in version `normal’
    (Font) OMS/cmsy/m/n –> FMS/futm/m/n on input line 113.
    LaTeX Font Info: Encoding `OMS’ has changed to `FMS’ for symbol font
    (Font) `symbols’ in the math version `bold’ on input line 113.
    LaTeX Font Info: Overwriting symbol font `symbols’ in version `bold’
    (Font) OMS/cmsy/b/n –> FMS/futm/m/n on input line 113.
    LaTeX Font Info: Redeclaring symbol font `largesymbols’ on input line 114.
    LaTeX Font Info: Encoding `OMX’ has changed to `FMX’ for symbol font
    (Font) `largesymbols’ in the math version `normal’ on input line 1
    14.
    LaTeX Font Info: Overwriting symbol font `largesymbols’ in version `normal’
    (Font) OMX/cmex/m/n –> FMX/futm/m/n on input line 114.
    LaTeX Font Info: Encoding `OMX’ has changed to `FMX’ for symbol font
    (Font) `largesymbols’ in the math version `bold’ on input line 114
    .
    LaTeX Font Info: Overwriting symbol font `largesymbols’ in version `bold’
    (Font) OMX/cmex/m/n –> FMX/futm/m/n on input line 114.
    LaTeX Font Info: Redeclaring math alphabet \mathbf on input line 115.
    LaTeX Font Info: Overwriting math alphabet `\mathbf’ in version `normal’
    (Font) OT1/cmr/bx/n –> T1/futs/bx/n on input line 115.
    LaTeX Font Info: Overwriting math alphabet `\mathbf’ in version `bold’
    (Font) OT1/cmr/bx/n –> T1/futs/bx/n on input line 115.
    LaTeX Font Info: Redeclaring math alphabet \mathrm on input line 116.
    LaTeX Font Info: Redeclaring math alphabet \mathit on input line 117.
    LaTeX Font Info: Overwriting math alphabet `\mathit’ in version `normal’
    (Font) OT1/cmr/m/it –> T1/futs/m/it on input line 117.
    LaTeX Font Info: Overwriting math alphabet `\mathit’ in version `bold’
    (Font) OT1/cmr/bx/it –> T1/futs/m/it on input line 117.
    LaTeX Font Info: Redeclaring math alphabet \mathcal on input line 118.
    LaTeX Font Info: Redeclaring math symbol \parallel on input line 134.
    LaTeX Font Info: Redeclaring math symbol \hbar on input line 148.
    LaTeX Font Info: Redeclaring math symbol \varkappa on input line 186.
    LaTeX Font Info: Redeclaring math symbol \varvarrho on input line 187.
    LaTeX Font Info: Redeclaring math delimiter \Vert on input line 210.
    LaTeX Font Info: Redeclaring math delimiter \vert on input line 215.
    LaTeX Font Info: Redeclaring math delimiter \Downarrow on input line 225.
    LaTeX Font Info: Redeclaring math delimiter \backslash on input line 227.
    LaTeX Font Info: Redeclaring math delimiter \rangle on input line 229.
    LaTeX Font Info: Redeclaring math delimiter \langle on input line 231.
    LaTeX Font Info: Redeclaring math delimiter \rbrace on input line 233.
    LaTeX Font Info: Redeclaring math delimiter \lbrace on input line 235.
    LaTeX Font Info: Redeclaring math delimiter \rceil on input line 237.
    LaTeX Font Info: Redeclaring math delimiter \lceil on input line 239.
    LaTeX Font Info: Redeclaring math delimiter \rfloor on input line 241.
    LaTeX Font Info: Redeclaring math delimiter \lfloor on input line 243.
    LaTeX Font Info: Redeclaring math accent \acute on input line 247.
    LaTeX Font Info: Redeclaring math accent \grave on input line 248.
    LaTeX Font Info: Redeclaring math accent \ddot on input line 249.
    LaTeX Font Info: Redeclaring math accent \tilde on input line 250.
    LaTeX Font Info: Redeclaring math accent \bar on input line 251.
    LaTeX Font Info: Redeclaring math accent \breve on input line 252.
    LaTeX Font Info: Redeclaring math accent \check on input line 253.
    LaTeX Font Info: Redeclaring math accent \hat on input line 254.
    LaTeX Font Info: Redeclaring math accent \dot on input line 255.
    LaTeX Font Info: Redeclaring math accent \mathring on input line 256.
    \symUfutm=\mathgroup5
    )
    (D:\latex\toantien\vehinhMetapost\mpxerr.aux)
    LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 4.
    LaTeX Font Info: … okay on input line 4.
    LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 4.
    LaTeX Font Info: … okay on input line 4.
    LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 4.
    LaTeX Font Info: … okay on input line 4.
    LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 4.
    LaTeX Font Info: … okay on input line 4.
    LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 4.
    LaTeX Font Info: … okay on input line 4.
    LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 4.
    LaTeX Font Info: … okay on input line 4.
    LaTeX Font Info: Checking defaults for FML/futm/m/it on input line 4.
    LaTeX Font Info: Try loading font information for FML+futm on input line 4.

    (“C:\Program Files\MiKTeX 2.9\tex\latex\fourier\fmlfutm.fd”
    File: fmlfutm.fd 2004/10/30 Fontinst v1.926 font definitions for FML/futm.
    )
    LaTeX Font Info: … okay on input line 4.
    LaTeX Font Info: Checking defaults for FMS/futm/m/n on input line 4.
    LaTeX Font Info: Try loading font information for FMS+futm on input line 4.

    (“C:\Program Files\MiKTeX 2.9\tex\latex\fourier\fmsfutm.fd”
    File: fmsfutm.fd 2004/10/30 Fontinst v1.926 font definitions for FMS/futm.
    )
    LaTeX Font Info: … okay on input line 4.
    LaTeX Font Info: Checking defaults for FMX/futm/m/n on input line 4.
    LaTeX Font Info: Try loading font information for FMX+futm on input line 4.

    (“C:\Program Files\MiKTeX 2.9\tex\latex\fourier\fmxfutm.fd”
    File: fmxfutm.fd futm-extension
    )
    LaTeX Font Info: … okay on input line 4.
    LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 4.
    LaTeX Font Info: Try loading font information for TS1+cmr on input line 4.

    (“C:\Program Files\MiKTeX 2.9\tex\latex\base\ts1cmr.fd”
    File: ts1cmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions
    )
    LaTeX Font Info: … okay on input line 4.
    LaTeX Font Info: Try loading font information for T1+futs on input line 4.

    (“C:\Program Files\MiKTeX 2.9\tex\latex\fourier\t1futs.fd”
    File: t1futs.fd 2004/03/02 Fontinst v1.926 font definitions for T1/futs.
    )
    LaTeX Font Info: Try loading font information for FML+futmi on input line 17
    .

    (“C:\Program Files\MiKTeX 2.9\tex\latex\fourier\fmlfutmi.fd”
    File: fmlfutmi.fd 2004/10/30 Fontinst v1.926 font definitions for FML/futmi.
    )
    LaTeX Font Info: Font shape `FMX/futm/m/n’ will be
    (Font) scaled to size 9.19998pt on input line 17.
    LaTeX Font Info: Font shape `FMX/futm/m/n’ will be
    (Font) scaled to size 6.99199pt on input line 17.
    LaTeX Font Info: Font shape `FMX/futm/m/n’ will be
    (Font) scaled to size 5.51999pt on input line 17.
    LaTeX Font Info: Font shape `U/futm/m/n’ will be
    (Font) scaled to size 9.19998pt on input line 17.
    LaTeX Font Info: Font shape `U/futm/m/n’ will be
    (Font) scaled to size 6.99199pt on input line 17.
    LaTeX Font Info: Font shape `U/futm/m/n’ will be
    (Font) scaled to size 5.51999pt on input line 17.
    [1]
    (D:\latex\toantien\vehinhMetapost\mpxerr.aux) )
    Here is how much of TeX’s memory you used:
    1164 strings out of 494046
    14732 string characters out of 3148410
    51529 words of memory out of 3000000
    4499 multiletter control sequences out of 15000+200000
    25994 words of font info for 33 fonts, out of 3000000 for 9000
    715 hyphenation exceptions out of 8191
    28i,3n,21p,188b,86s stack positions out of 5000i,500n,10000p,200000b,50000s

    Output written on mpxerr.dvi (1 page, 196 bytes).

  8. file báo lỗi như sau; nhờ thầy xem giúp:
    ! Unable to make mpx file.
    l.7 btex
    $A_{}$ etex
    The two files given above are one of your source files
    and an auxiliary file I need to read to find out what your
    btex..etex blocks mean. If you don’t know why I had trouble,
    try running it manually through MPtoTeX, TeX, and DVItoMP

  9. Thầy ơi, em ở Bến Tre có dịp tiếp xúc với Thầy qua lớp tập huấn Casio vừa rồi.oofE cũng rất thích về Tex. Thầy hướng dẫn cho em vẽ hình bằng Gnuplot được không Thầy vì em thầy Metapost nó phức tạp quá so với các hình có nhiều dữ kiện. Em cảm ơn Thầy nhiều.

  10. Thầy ơi cho em hỏi: Mấy hôm nay em nghiên cứu về Metapost, lang thang trên net em gặp bài hướng dẫn vẽ đồ thị ở trang http://nmhieupdp.wordpress.com/2014/01/16/ve-do-thi-ham-so-tren-latex-bang-metapost/#more-842 có hướng dẫn cụ thể như sau:
    I. CÁC BƯỚC VẼ ĐỒ THỊ BẰNG METAPOST.

    B1. Tạo một marco đặt tên plot.mp có nội dung như sau:

    numeric Pi,E;
    Pi:= 3.1416;
    E:= 2.7183;
    xinc:=0.001;
    vardef sin(expr x) = sind(x/Pi*180) enddef;
    vardef cos(expr x) = cosd(x/Pi*180) enddef;
    vardef tan(expr x) = sin(x)/cos(x) enddef;
    vardef exp(expr x) = mexp(x*256) enddef;
    vardef ln(expr x) = mlog(x)/256 enddef;
    def axes(expr xmin, xmax, ymin, ymax)=
    drawarrow u*(xmin,0)–u*(xmax,0);
    drawarrow u*(0,ymin)–u*(0,ymax);
    label.rt(btex $y$ etex,u*(0,ymax));
    label.bot(btex $x$ etex,u*(xmax,0));
    label.llft(btex $O$ etex,u*(0,0));
    draw (0,0.25cm) — (0.25cm,0.25cm);
    draw (0.25cm,0) — (0.25cm,0.25cm);
    enddef;
    def compute_curve(suffix f)(expr xmin, xmax) = ( (xmin,f(xmin))
    for x=xmin+xinc step xinc until xmax: .. (x,f(x)) endfor )
    enddef;

    B2. Tạo file vẽ đồ thị hàm số đặt tên funtion.mp có nội dung như sau:

    input plot.mp;
    beginfig(1)
    numeric u;
    u :=1cm;
    axes(xmin,xmax,ymin,ymax);
    vardef f(expr x) = f(x) enddef;
    path p;
    p := compute_curve(f, xmin, xmax) scaled u;
    draw p withpen pencircle scaled 0.5bp;
    % Khai báo thêm các yếu tố cần hiển thị trên hình vẽ.
    endfig;
    end;

    Chú thích:

    Dòng 1: Chèn marco plot.mp vào file.
    Dòng 3: Khai báo biến kiểu số thực.
    Dòng 4: Định nghĩa độ dài đơn vị trên hệ trục, có thể thay đổi để phù hợp với mỗi hình vẽ.
    Dòng 5: Vẽ hệ trục tọa độ với xmin,xmax,ymin,ymax lần lượt là giá trị nhỏ nhất và lớn nhất của mỗi trục.
    Dòng 6: Khai báo hàm số cần vẽ đồ thị với f(x) là hàm số cần vẽ đồ thị.
    Dòng 8: Tạo đường cong từ biểu thức hàm với xmin, xmax là giá trị lớn nhất và nhỏ nhất cần vẽ của biến x.
    Dòng 9: Vẽ đồ thị.
    Dòng 10: Khai báo thêm các yếu tố cần hiển thị trên hình vẽ như cực trị, điểm uốn, các điểm đặc biệt,…

    B3. Biên dịch file funtion.mp:

    Mở file bằng VieTeX
    Trong VieTeX chọn mục Tools/Window accessories/Command Prompt
    Ở cửa sổ hiện ra đánh dòng lệnh mpost funtion.mp
    Khi đó máy sẽ tiến hành biên dịch; biên dịch thành công sẽ cho ta file hình funtion.mp

    B4. Xem file hình vừa vẽ:

    Tạo một file \LaTeX, đặt tên xemthu.tex, có nội dung như sau:

    \documentclass{book}
    \usepackage{amsmath,amsxtra,amssymb,latexsym, amscd,amsthm}
    \usepackage{indentfirst}
    \usepackage[mathscr]{eucal}
    \usepackage{color}
    \usepackage[utf8]{vietnam}
    \begin{document}
    \begin{figure}[hb]
    \centering
    \parbox{10cm}{\convertMPtoPDF{funtion.1}{1}{1}}
    \caption{Nội dung chú thích}
    \end{figure}
    \end{document}

    Biên dịch file xemthu.tex bằng PDF LaTeX: trong VieTeX, chọn đầu ra là PDF, sau đó biên dịch bằng Execute/Texify: TEX→(DVI/PDF);
    Biên dịch thành công sẽ cho ta một file PDF có hình vừa vẽ.

    II. MỘT SỐ VÍ DỤ MINH HỌA.

    Ví dụ 1. Vẽ đồ thị hàm số y=-x^3+3x^2-4.

    Code vẽ hình:

    input plot.mp;
    beginfig(1)
    numeric u;
    u :=1cm;
    axes(-3,4,-7,3);
    vardef f(expr x) = -x*x*x+3*x*x-4 enddef;
    path p;
    p := compute_curve(f, -1.25, 3.25) scaled u;
    draw p withpen pencircle scaled 0.5bp;
    draw (u,0)–(u,-2u) dashed evenly;
    draw (0,-2u)–(u,-2u) dashed evenly;
    draw (3u,0)–(3u,-4u) dashed evenly;
    draw (0,-4u)–(3u,-4u) dashed evenly;
    label.lft (btex $-2$ etex, (0,-2u));
    label.llft (btex $-4$ etex, (0,-4u));
    label.top (btex $1$ etex, (u,0));
    label.top (btex $2$ etex, (2u,0));
    label.top (btex $3$ etex, (3u,0));
    label.llft (btex $-1$ etex, (-u,0));
    label.rt (btex $U$ etex, (u,-2u));
    endfig;

    Hình thu được: VD1

    Ví dụ 2. Vẽ đồ thị hàm số y=x^4-2x^2-1.

    Code vẽ hình:

    input plot.mp;
    beginfig(2)
    numeric u;
    u :=1cm;
    axes(-3,3,-3,3);
    vardef f(expr x) = x*x*x*x-2*x*x-1 enddef;
    path p;
    p := compute_curve(f, -1.8, 1.8) scaled u;
    draw p withpen pencircle scaled 0.5bp;
    draw (u,0)–(u,-2u) dashed evenly;
    draw (-u,0)–(-u,-2u) dashed evenly;
    draw (-u,-2u)–(u,-2u) dashed evenly;
    label.llft (btex $-2$ etex, (0,-2u));
    label.top (btex $1$ etex, (u,0));
    label.top (btex $-1$ etex, (-u,0));
    endfig;

    Hình thu được: VD2

    Ví dụ 3. Vẽ đồ thị hàm số y=\dfrac{x-1}{x+1}.

    Code vẽ hình:

    input plot.mp;
    beginfig(3)
    numeric u;
    u :=1cm;
    axes(-5,3,-3,5);
    vardef f(expr x) = (x-1)/(x+1) enddef;
    path p, q;
    p := compute_curve(f, -5, -1.5) scaled u;
    draw p withpen pencircle scaled 0.5bp;
    q := compute_curve(f, -0.5, 3) scaled u;
    draw q withpen pencircle scaled 0.5bp;
    draw (-u,-3u)–(-u,5u);
    draw (-5u,u)–(3u,u);
    draw (-2u,0)–(-2u,3u) dashed evenly;
    draw (0,3u)–(-2u,3u) dashed evenly;
    draw (-3u,0)–(-3u,2u) dashed evenly;
    draw (0,2u)–(-3u,2u) dashed evenly;
    label.rt (btex $-1$ etex, (0,-u));
    label.rt (btex $2$ etex, (0,2u));
    label.rt (btex $3$ etex, (0,3u));
    label.urt (btex $1$ etex, (0,u));
    label.top (btex $1$ etex, (u,0));
    label.llft (btex $-1$ etex, (-u,0));
    label.bot (btex $-2$ etex, (-2u,0));
    label.bot (btex $-3$ etex, (-3u,0));
    label.ulft (btex $I$ etex, (-u,u));
    endfig;

    Hình thu được: VD3

    Ví dụ 4. Vẽ đồ thị hàm số y=\dfrac{x^2-x+1}{x-1}.

    Code vẽ hình:

    input plot.mp;
    beginfig(4)
    numeric u;
    u :=1cm;
    axes(-3,5,-3,5);
    vardef f(expr x) = (x*x-x+1)/(x-1) enddef;
    path p, q;
    p := compute_curve(f, -2.7, 0.73) scaled u;
    draw p withpen pencircle scaled 0.5bp;
    q := compute_curve(f, 1.27, 4.7) scaled u;
    draw q withpen pencircle scaled 0.5bp;
    draw (-3u,-3u)–(5u,5u);
    draw (u,-3u)–(u,5u);
    draw (2u,0)–(2u,3u) dashed evenly;
    draw (0,3u)–(2u,3u) dashed evenly;
    draw (0,u)–(u,u) dashed evenly;
    label.urt (btex $-1$ etex, (0,-u));
    label.lft (btex $3$ etex, (0,3u));
    label.lft (btex $1$ etex, (0,u));
    label.lrt (btex $1$ etex, (u,0));
    label.bot (btex $2$ etex, (2u,0));
    label.lrt (btex $I$ etex, (u,u));
    endfig;

    Hình thu được: VD4

    Ví dụ 5. Vẽ đồ thị hàm số y=\dfrac{x+3}{\sqrt{x^2+1}}.

    Code vẽ hình:

    input plot.mp;
    beginfig(5)
    numeric u;
    u :=0.5cm;
    axes(-8,8,-2,5);
    vardef f(expr x) =(x+3)/sqrt(x*x+1) enddef;
    path p;
    p := compute_curve(f, -8, 8) scaled u;
    draw p withpen pencircle scaled 0.5bp;
    draw (0,u)–(8u,u);
    draw (0,-u)–(-8u,-u);
    label.top (btex $-3$ etex, (-3u,0));
    endfig;

    Hình thu được: VD5

    Ví dụ 6. Vẽ đồ thị hàm số y=|x^2-4x+3|.

    Code vẽ hình:

    input plot.mp;
    beginfig(6)
    numeric u;
    u :=1cm;
    axes(-1,5,-1,5.5);
    vardef f(expr x) =abs(x*x-4*x+3) enddef;
    path p;
    p := compute_curve(f, -0.5, 4.5) scaled u;
    draw p withpen pencircle scaled 0.5bp;
    label.bot (btex $1$ etex, (u,0));
    label.bot (btex $3$ etex, (3u,0));
    label.lft (btex $3$ etex, (0,3u));
    endfig;

    Hình thu được:

    VD6

    Ví dụ 7. Vẽ đồ thị hàm số y=e^x.

    Code vẽ hình:

    input plot.mp;
    beginfig(7)
    numeric u;
    u :=1cm;
    axes(-3,2,-1,5);
    vardef f(expr x) =exp(x) enddef;
    path p;
    p := compute_curve(f, -3, 1.5) scaled u;
    draw p withpen pencircle scaled 0.5bp;
    draw (u,0)–(u,E*u) dashed evenly;
    draw (0,E*u)–(u,E*u) dashed evenly;
    label.bot (btex $1$ etex, (u,0));
    label.lft (btex $e$ etex, (0,E*u));
    label.ulft (btex $1$ etex, (0,u));
    endfig;

    Hình thu được: VD7

    Ví dụ 8. Vẽ đồ thị hàm số y=\ln x.

    Code vẽ hình:

    input plot.mp;
    beginfig(8)
    numeric u;
    u :=1cm;
    axes(-1,5,-3,2);
    vardef f(expr x) =ln(x) enddef;
    path p;
    p := compute_curve(f, 0.05, 5) scaled u;
    draw p withpen pencircle scaled 0.5bp;
    draw (E*u,0)–(E*u,u) dashed evenly;
    draw (0,u)–(E*u,u) dashed evenly;
    label.bot (btex $1$ etex, (u,0));
    label.bot (btex $e$ etex, (E*u,0));
    label.lft (btex $1$ etex, (0,u));
    endfig;

    Hình thu được: VD8

    Ví dụ 9. Vẽ đồ thị hàm số y=\sin x.

    Code vẽ hình:

    input plot.mp;
    beginfig(9)
    numeric u;
    u :=1cm;
    axes(-7,7,-2,2);
    vardef f(expr x) =sin(x) enddef;
    path p;
    p := compute_curve(f, -7, 7) scaled u;
    draw p withpen pencircle scaled 0.5bp;
    draw (0.5Pi*u,0)–(0.5Pi*u,u) dashed evenly;
    draw (0,u)–(0.5Pi*u,u) dashed evenly;
    draw (-0.5Pi*u,0)–(-0.5Pi*u,-u) dashed evenly;
    draw (0,-u)–(-0.5Pi*u,-u) dashed evenly;
    label.rt (btex $-1$ etex, (0,-u));
    label.lft (btex $1$ etex, (0,u));
    label.bot (btex $\pi\over 2$ etex, (0.5Pi*u,0));
    label.top (btex $-{\pi\over 2}$ etex, (-0.5Pi*u,0));
    label.urt (btex $\pi$ etex, (Pi*u,0));
    label.llft (btex $-\pi$ etex, (-Pi*u,0));
    label.ulft (btex $2\pi$ etex, (2Pi*u,0));
    label.lrt (btex $-2\pi$ etex, (-2Pi*u,0));
    endfig;
    end;

    Hình thu được: VD9
    Tuy nhiên khi em biên dịch file funtion.mp bằng cả vietex và winedt8.0 nó đều báo lỗi. Mong thầy giúp đỡ. Em gửi file qua mail cho thầy.

  11. Em đang vẽ đồ thị hàm số bang metapost tuy nhiên em không biết cách tô màu phần diện tích hình phẳng giới hạn bởi 2 đồ thị giống như trong sách LTĐH của thầy. Thầy giúp em với. Code em vẽ:
    beginfig(1)
    axes(-1,5,-5,4);
    tick(1,4,-4,-5);
    vardef f(expr x)=2*x*x*x-9*x*x+12*x-4 enddef;
    vardef g(expr x)=x*x-1 enddef;
    mplot(f,-0.081,2.9) withcolor red;
    mplot(g,-1,2.9) withcolor green;
    fill buildcycle(f, reverse g) withcolor blue;
    draw (u,0) — (u,u) dashed evenly;
    draw (0,u) — (u,u) dashed evenly;
    dotlabel.top(btex $\cal $ etex, (u,u));
    dotlabel.top(btex $\cal $ etex, (0,-4u));
    dotlabel.top(btex $\cal $ etex, (2u,0));
    label.lft(btex $-4$ etex, (0,-4u));
    label.bot(btex $1$ etex, (u,0));
    label.bot(btex $2$ etex, (2u,0));
    label.lft(btex $1$ etex, (0,u));
    label.bot(btex $3$ etex, (3u,0));
    endfig;
    Em cảm ơn thầy.

    • Em nghĩ thầy nên vẽ bằng GeoGebra phần diện tích ấy rồi xuất code qua latex.
      Dùng lệnh sau để vẽ diện tích hình phẳng giới hạn bởi hai đồ thị hàm số f và g
      IntegralBetween[ , , , ]
      Gives the definite integral of the difference f(x) ‐ g(x) of two function f and g over the interval [a, b], where a is the first number and b the second, with respect to the main variable.
      Note: This command also shades the area between the function graphs of f and g.
      Nguồn: https://wiki.geogebra.org/en/IntegralBetween_Command

  12. mong thay giup em ve lai tam giac nhu o phan dau thay huong dan

    e đã thuc hành mai nhung khong đuc thay a! Cụ thể o day la ve tam giác ABC nọi tiếp đường tròn O o trên. Đầu tiên em tai 2 file là geometrie2d.mp và labels.mp, sau do em copy cac lenh ma thay da liệt kê và khai bao ở trên đạt vao 1 cho mà khong chay đuoc thay ah! Mong thay giup do e với

  13. mình cũng lam mãi mà chưa đươc. Mong thầy giúp đỡ chúng em.

  14. E chào thầy!
    Thầy ơi muốn vẽ tam giác vuông, hoặc một tam giác có số đo cụ thể thì làm thế nào ạ? Mong thầy giúp đỡ e với, e thấy metapost hấp dẫn quá!

Trả lờ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 Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s