This page is READ-ONLY. It is generated from the old site.
All timestamps are relative to 2013 (when this page is generated).
If you are looking for TeX support, please go to VietTUG.org

Problem #719

Cửa sổ mf.exe dùng chạy file .mf (bởi MiKTeX) biết mất sau khi nhập lệnh.

Added by rivaldinho over 2 years ago. Updated over 2 years ago.

Status: Closed Start Date: 07-08-2010
Priority: Normal Due date: 14-08-2010
Assigned to: tanphu % Done:

100%

Category: hình vẽ: MetaPOST
Target version: 2010_help Estimated time: 72.00 hours
Resolution: Fixed
Votes: 2/2

Description

Mình đã và đang học tài liệu The METAFONT Book (D.E.Knuth). Mọi việc đều suôn sẻ cho đến chương 5 của cuốn sách, trong đó mình được sách hướng dẫn chạy chương trình METAFONT rồi gõ vào dòng lệnh \relax. Nguyên văn của tác giả được trích bởi:

First you need to log in, of course; then start (strange chars), which is usually called mf for short. Once you’ve figured out how to do it, you’ll be welcomed by a message something like

This is METAFONT, Version 2.0 (preloaded base=plain 89.11.8)
**

Now type ‘\relax’—that’s backslash, r, e, l, a, x—and hit (trange chars) return (strange chars). The machine will respond by typing a single asterisk: ‘*’. This means it’s ready to accept instructions (not the name of a file).

Theo mình hiểu là phải chay file mf.exe và gõ dòng lệnh \relax. Tuy nhiên sau khi gõ bất cứ dòng lệnh nào thì cửa sổ lệnh bị biến mất.

Mình tin là có một số tiền bối (đặc biệt là anh Tan Phu đã có kinh nghiệm với mpost) đã bị khuất mắt chỗ này và cũng đã tìm ra câu trả lời. Mong nhận được cách giải quyết.

History

Updated by over 2 years ago

  • Status changed from New to Assigned

Updated by over 2 years ago

    Không biết có lý do nào xui khiến bạn đọc cuốn METAFONT :D Cuốn đó quá khó gặm đối với bất kỳ người dùng TeX nào. Mình nghĩ cái bạn cần là METAPOST.

    Thông thường, các chương trình mf hay mpost được sử dụng theo cách sau

    $ mf    foobar.mf
    $ mpost foobar.mp
    

    Trong đó, foobar.mf hay foobar.mp là tên các tập tin nguồn, chứa các đoạn mã vẽ hình hoặc vẽ chữ.

    Về trục trặc mà bạn gặp phải, có thể là do thiết kế của mf.exe (có trong bộ MiKTeX?). Cái này mình bạn Phú sẽ kiểm tra và hồi âm sau.

    Updated by rivaldinho over 2 years ago

      Mình không hiểu ý bạn Kỳ Anh. Tại sao The METAFONT Book lại khó đọc. Mình thấy tương đối dễ theo dõi ngoài trừ các để có thể chạy được một file .mf thật sự. Việc đến với cuốn sách đã nói trên cũng là hệ lụy của việc mình đọc vài sách trước đó METAPOST A User's Manual (by John D.Hobby)Learning METAPOST by Doing (by Andre Hack) nhưng vẫn gặp phải vấn đề tương tự là không thể chạy một file .mp thực sự để tạo xuất ra file hình.

      Sau đây là cách làm của mình theo như Kỳ Anh gợi ý và vẫn nhận được kết quả là cửa sổ biến mất.

      Mình soạn file line.mf và được lưu vào D:\My Latex Files\MetaPost Figure\line.mf, có nội dung:

      draw (0,0)..(100,100)..(100,50);
      showit;
      shipit; 
      end;
      

      rồi nhập vào dòng lệnh sau khi cửa sổ mf.exe xuất hiện với dòng lệnh. Dòng lệnh chào của mf.exe:

      This is METAFONT, version 2.718281 (MiKTeX 2.8)
      **
      

      ** (nghĩa là 2 dấu sao) Dòng lệnh mình nhập:
      $ mf D:\My Latex Files\MetaPost Figure\line.mf

      Mình đã thử dòng lệnh trên với cả backslash(\)forwardslash(/) nhưng cửa sổ biến mất ngay sau đó. Nếu có thể, bạn nào đó dành thời gian mô tả tỉ mỉ làm sao để chạy được một file .mf.mpost (chỉ cần đơn giản là vẽ đoạn thẳng) để mình thao khảo một lần cho biết. Cám ơn bạn đó trước.

      Updated by tanphu over 2 years ago

        Bạn nên dùng MetaPOST thay vì Metafont, vì theo mình nghĩ thì MetaPOST dễ chịu hơn. Bạn đã từng biên dịch thành công MetaPOST chưa? Bạn thử theo hướng dẫn ở đây thử xem: Metapost First Example

        Cho mình biết kết quả khi biên dịch cái này trước đã!

        Updated by tanphu over 2 years ago

          rivaldinho wrote:

          Mình không hiểu ý bạn Kỳ Anh. Tại sao The METAFONT Book lại khó đọc.

          Đọc thì dễ, nhưng dùng cực khó. Mình đã từng đọc qua METAFONT rồi. Tất nhiên, còn tuỳ vào mục đích, khả năng của bạn. Mục đích của METAFONT là để vẽ chữ, do đó, sẽ dính dáng tới nhiều vấn đề về typography và kỹ thuật tạo font nữa.

          Sau đây là cách làm của mình theo như Kỳ Anh gợi ý và vẫn nhận được kết quả là cửa sổ biến mất. Mình soạn file line.mf và được lưu vào D:\My Latex Files\MetaPost Figure\line.mf, có nội dung:

          Quy tắc đầu tiên nên áp dụng là tất cả các tên thư mục và tập tin trong TeX không được chứa khoảng trắng; tốt nhất là dùng tên tiếng Anh hoặc tiếng Việt không dấu. Ví dụ, tên và đường dẫn sau là tốt nhất: D:/my_latex_files/metapost/...

          Sau khi bạn tạo tập tin line.mf, bạn sử dụng nó như sau đây

          $ cd d:/my_latex_files/metapost_figure/
          $ mpost line.mf
          

          Ví dụ về METAPOST thì bạn Phú đã chỉ ra ở trên. Bạn theo đó để thực hiện xem có thành công không nhé.

          --
          Kỳ Anh (trả lời nhờ tài khoản của Tân Phú)

          Updated by rivaldinho over 2 years ago

            Cám ơn Tân Phú và Kỳ Anh. Mình đã làm được như hướng dẫn được đính kèm trong file pdf SdMetaPost.

            Tuy nhiên, từ đó cũng sẽ nảy sinh câu hỏi làm sao để ta có thể run từng dòng lệnh một trong cửa sổ mf.exe hay mpost.exe. Mình nghĩ điều này cũng khá quan trọng khi muốn tạo một hình vẽ phức tạp vì mình có thể chạy từng đoạn code (giống như mình typeset trong file .tex sau mỗi lần viết thêm đoạn mới).

            Việc mình viết một file .mp hoàn chỉnh rồi run file từ cửa sổ cmd để xem kết quả cũng giống như việc mình viết một file .tex hoàn chỉnh rồi typeset một lần. Điều này rõ ràng là một bất lợi lớn khi muốn vẽ các hình với nhiều nét (ngay cả với trong hình học phẳng).

            Mong được chỉ cách khắc phục nhược điểm này.

            Updated by over 2 years ago

              rivaldinho wrote:

              Tuy nhiên, từ đó cũng sẽ nảy sinh câu hỏi làm sao để ta có thể run từng dòng lệnh một trong cửa sổ mf.exe hay mpost.exe. Mình nghĩ điều này cũng khá quan trọng khi muốn tạo một hình vẽ phức tạp vì mình có thể chạy từng đoạn code (giống như mình typeset trong file .tex sau mỗi lần viết thêm đoạn mới).

              Mình không nghĩ là điều này có thể thực hiện được (vẽ từng bước, giống như chạy qua từng lệnh.) Thường thì ghi vẽ hình bằng METAPOST hay METAFONT, trong đầu đã có ý tưởng META rồi, chứ không phải đợi tới lúc vẽ mới vừa chỉnh vừa vẽ (như thế là giống với dân xài ... msPaint.) Việc vẽ từng bước chỉ giúp bạn hình dung về cách làm việc của METAPOST/FONT thôi (đoán vậy!)

              Việc mình viết một file .mp hoàn chỉnh rồi run file từ cửa sổ cmd để xem kết quả cũng giống như việc mình viết một file .tex hoàn chỉnh rồi typeset một lần.

              Theo mình nhớ thì TeXMaker và TeXniccenter hỗ trợ soạn thảo tập tin .mp. Nhưng mình không chắc lắm... Về ý tưởng thì sẽ thế này:

              1. soạn thảo tập tin .mp trong editor bất kỳ
              2. khi cần biên dịch, nhấn một phím tắt trong trình soạn thảo (phím tắt này cấu hình được)
              3. trình soạn thảo sẽ xác định vị trí hiện tại của con trỏ soạn thảo (ví dụ, con trỏ đang ở dòng n)
              4. truyền hai thông tin (a) số dòng n và (b) tên tập tin foobar.mp vào một kịch bản biên dịch nằm bên ngoài (my_compiler.bat)
              5. trình dịch ngoài my_compiler sẽ dựa vào n để biến hình đang được vẽ là hình số mấy (tức là tìm ra số k trong beginfig(k)
              6. chạy trình biên dịch mpost và nếu thành công thì lấy ra hình thứ k (tức là tập tin foobar.k)
              7. nhúng tập tin foobar.k vào một tập tin tex mẫu và tiến hành biên dịch bằng TeX để xem thử

              Đó là cách mình làm vào năm 2002 với EditPlus (http://editplus.com/). Các editor xịn hơn bây giờ thì mình không biết đã có hỗ trợ tốt hơn hay chưa. Riêng Tân Phú thì... hình như vẫn còn phải làm bằng tay :D -- nhưng quen rồi thì cũng lẹ lắm.

              Điều này rõ ràng là một bất lợi lớn khi muốn vẽ các hình với nhiều nét (ngay cả với trong hình học phẳng).

              Mình từng vẽ rất nhiều hình với METAPOSTMETAFONT theo cách ở trên. Chẳng có gì là... bất tiện cả. Bất tiện duy nhất là mình phải tự viết cái my_compiler.bat rất rối rắm thôi :))

              Updated by over 2 years ago

                rivaldinho wrote:

                Theo mình hiểu là phải chay file mf.exe và gõ dòng lệnh \relax. Tuy nhiên sau khi gõ bất cứ dòng lệnh nào thì cửa sổ lệnh bị biến mất.

                Mình đã kiểm tra lại trên Windows (bộ MiKTeX). Quả đúng như bạn nói: khi gõ lệnh nào thì cửa sổ mf hay mpost cũng biến mất tiêu. Đây có thể là đặc điểm của bộ MiKTeX, và hoàn tòan không phải là bộ METAPOST/FONTD. Knuth nói tới trong các cuốn sách của ông ấy. Để thưởng thức đúng hàng xịn, bạn nên dùng TeXLive (trên Windows hoặc Linux.)

                Updated by rivaldinho over 2 years ago

                • Votes: 1/1

                Ah, có thể mình biểu diễn không rõ ý. Ý mình là về cơ bản mình có thể "sketch" một bản trên giấy rồi viết MetaPost Code. Tuy nhiên quá trình viết code thì sẽ dẫn tới sai syntax. Và nếu phải vẽ một hình tương dối phức tạp, chẳng hạn trong sách bài tập lớp 10 hoặc lớp 9 (tập trung nhiều vào hình vẽ Euclide) thì sẽ rất dễ gặp lỗi syntax khi run code như mình typeset file .tex. Đư nhiên là nó có thể giải quyết bởi vẽ hình phẳng với Eukleides

                Ngoài ra ý tưởng dùng Asymptote của anh phucluoi trong buổi offline sắp tới sẽ đáp ứng được khó khăn này. Mình đã theo ý tưởng đó và đang xem Asymptote. Nó là một phần mềm miễn phí theo mình nghĩ là tốt hơn cả MetaPost vì nó tận dụng ngôn ngữ của MetaPost và cả C++-like language.

                Mình sẽ thử TeXLive's command window mf.exempost.exe như bạn gợi ý. Cảm ơn nhiều về vấn đề này. Dù gì cũng ngộ ra vài thứ.

                Updated by over 2 years ago

                • % Done changed from 0 to 50

                rivaldinho wrote:

                Ah, có thể mình biểu diễn không rõ ý. Ý mình là về cơ bản mình có thể "sketch" một bản trên giấy rồi viết MetaPost Code. Tuy nhiên quá trình viết code thì sẽ dẫn tới sai syntax. Và nếu phải vẽ một hình tương dối phức tạp, chẳng hạn trong sách bài tập lớp 10 hoặc lớp 9 (tập trung nhiều vào hình vẽ Euclide) thì sẽ rất dễ gặp lỗi syntax khi run code như mình typeset file .tex. Đư nhiên là nó có thể giải quyết bởi vẽ hình phẳng với Eukleides

                Syntax là vấn đề cơ bản mà hầu hết các newbie đều gặp. Cách giải quyết là đọc tài liệu thật kỹ. Thời gian ban đầu có thể bạn gặp trục trặc, nhưng về lâu dài thì vấn đề cơ bản là ... làm thế nào để vẽ với ngôn ngữ META :D

                Ngoài ra ý tưởng dùng Asymptote của anh phucluoi trong buổi offline sắp tới sẽ đáp ứng được khó khăn này. Mình đã theo ý tưởng đó và đang xem Asymptote. Nó là một phần mềm miễn phí theo mình nghĩ là tốt hơn cả MetaPost vì nó tận dụng ngôn ngữ của MetaPost và cả C++-like language.

                Vì vài lý do cá nhân, phucluoi chưa thể có bài viết trong offline này.

                Mình sẽ thử TeXLive's command window mf.exempost.exe như bạn gợi ý. Cảm ơn nhiều về vấn đề này. Dù gì cũng ngộ ra vài thứ.

                Mình thấy bạn quan tâm nhiều đến METAPOST/FONT. Để làm việc với nó thật dễ dàng và uyển chuyển, có lẽ bạn nên tìm hiểu và chuyển qua môi trường Linux. Mình và Tân Phú đều đã chuyển qua Linux từ lâu. Bạn An ở Vũng Tàu cũng tìm thấy được hứng thú với Ubuntu :)

                Updated by tanphu over 2 years ago

                  Syntax error là chuyện tất nhiên phải gặp đối với người dùng TeX hay MetaPOST, gỡ rối lỗi cú pháp trong MetaPost thì nhức đầu hơn nhiều so với gỡ rối lỗi trong TeX. Lúc đầu sử dụng MetaPost thấy hơi khó vậy thôi chứ sử dụng quen thì chuyện này không thành vấn đề.

                  Với MetaPost có thể vẽ nhiều hình trong 1 file .mp và chỉ cần biên dịch nhiều lần, thậm chí là dùng vòng lặp để vẽ hàng loạt hình bằng 1 lệnh lặp. MetaPost chẳng qua là công cụ để thể hiện ý tưởng về hình vẽ của mình trong đầu ra giấy. Với MetaPost mình thấy như thế này: cái gì mình hình dung được trong đầu thì MetaPost vẽ ra được, bất kể nét vẽ là phức tạp đến thế nào. Mình khuyên bạn nên dùng MetaPost thay vì MetaFont.

                  Tham khảo cái này để thấy sức mạnh của MetaPost:

                  http://tex.loria.fr/prod-graph/zoonekynd/metapost/metapost.html

                  Updated by over 2 years ago

                  • Status changed from Assigned to Closed
                  • % Done changed from 50 to 100