HƯỚNG DẪN CHÈN FONT VNI VÀ FONT TOÁN HỌC LATEX VÀO R 

Việc chèn font chữ trong R vốn không phức tạp nhưng vì có nhiều cách khác nhau (có một số cách lỗi thời không còn hoạt động được) nên khi ta search trên google sẽ rất khó khăn để biết chính xác cơ chế chèn font chữ trong R là như thế nào. Trong bài hướng dẫn này mình sẽ tiếp cận theo quy trình căn bản để hướng dẫn các bạn cách chèn font chữ nhé.

Về lý thuyết cơ chế chèn font chữ trong R thì bạn xem ở tài liệu này Murrell - 2019 - R Graphics (chapter 10), trong tài khoản học viên mình có để link truy cập tài liệu.

Ở đây ta biết được cơ chế mà R sử dụng font như sau:

1/ Sử dụng font đã được cài ở trên máy tính (nếu ở Windows là thư mục Fonts). Bạn cần copy font chữ muốn dùng đưa vào thư mục này.

2/ Trong R khi sử dụng chèn font thì bạn cần register font vào session. Việc này được tự động thực hiện khi bạn sử dụng package Cairo.

OK. Xong.

Vấn đề là font tiếng Việt Unicode như là font SVN-Dayland mình sử dụng ở bài này thì khi ta gõ trực tiếp trong R thì khi xuất ra file PDF sẽ thể hiện đầy đủ (cũng tương tự như Times hay Arial).

Trường hợp bạn dùng font tiếng Việt VNI thì cần có bước convert các ký tự đó qua kiểu Unicode. Mình có xây dựng function convert qua unicode như trong file code này cho trường hợp font VNI-Diudang.

Như vậy đến đây là ta có được cách để chèn font vào R theo kiểu căn bản, dễ hiểu, không phụ thuộc quá nhiều package bên ngoài.

**********

Trong trường hợp bạn muốn chèn công thức toán học theo chuẩn LaTeX thì bạn có 2 cách để làm:

1/ Sử dụng package tikzDevice với cách tiếp cận là sẽ convert toàn bộ plot của bạn trong R (vốn bản chất là file vector) sang code cho TikZ (TeX) để vẽ đồ thị. Như vậy thì hình ảnh và font chữ xuất ra sẽ theo kiểu (La)TeX.

Tuy nhiên hạn chế là package này không support mạnh lắm các chức năng đồ thị nâng cao và không dùng được font chữ đã khai báo trong R, mà nếu bạn muốn customize font thì cần áp dụng package của LaTeX. Việc này tăng thêm 1 lớp phức tạp không cần thiết trong quá trình vẽ đồ thị. Vì vậy mình không recommend cách dùng package tikzDevice này.

2/ Cách tiếp cận render chuẩn file TeX ra dạng PDF rồi convert qua file SVG được ưu tiên hơn vì giúp tách ra 2 sự kiện độc lập. Ta cứ vẽ plot trong R sau đó insert file SVG (vốn được render chuẩn font LaTeX rồi) vào plot R thì sẽ có được đồ thị cuối cùng chuẩn chỉnh các thể loại font như yêu cầu.

Để thực hiện cách 2/ render file TeX rồi convert từ PDF qua SVG ngay trong R thì bạn cần làm thêm các bước sau để setup hệ thống:

i) Trên máy tính bạn cài đặt MiKTeX (chạy với quyền admin để update mới nhất) mục tiêu là để cho R render file TeX. Hoặc là TeX Live đều được, mục đích là có một cái nền để cho R render file TeX.

ii) Trong RStudio bạn cài đặt package tinytex để hỗ trợ việc render file TeX

iii) Bạn cần cài đặt và setup environment variable cho phần mềm pdf2svg để R sử dụng render từ file PDF qua SVG

Xong.

Như vậy trong đoạn code R thì bạn thấy từ dòng 235 đến 264 là mình tạo ra 1 vector chứa file văn bản theo cú pháp của TeX rồi cho package exams render ra file SVG. Bạn cũng có thể khai báo 1 file TeX soạn sẵn cho package exams render sẽ tiện hơn. 

Trong ví dụ này vì mình muốn truyền tham số vào trực tiếp phương trình hồi quy tuyến tính nên cần thực hiện một vài bước để thu được đoạn TeX cuối cùng là object full_equation chứa công thức toán học theo chuẩn TeX để render ra file SVG.

Ngắn gọn như vậy, bạn download folder project về rồi giải nén ra, sau đó chạy 1 lượt thì sẽ ra được file hình ảnh kết quả. Nếu có gì trục trặc thì bạn liên hệ với mình qua email tuhocr.com@gmail.com hoặc Facebook/Zalo nhé. Chúc bạn ứng dụng R hiệu quả vào công việc.

Nếu bạn hỏi mình trong số rất nhiều bài hướng dẫn về R thời gian qua mình thực hiện thì bài viết nào mình thấy quan trọng nhất? Mình xin trả lời ngay và luôn là bài này, nói về cách chèn font vào R để ghép lại nhu cầu tha thiết chèn font chuẩn toán học vào R nhưng không biết làm sao cho thuận tiện thời gian qua.

R và TeX là hai câu chuyện hoàn toàn độc lập.

R là ngôn ngữ lập trình để xử lý thống kê và vẽ đồ thị. TeX là ngôn ngữ sắp chữ chuyên dùng cho trình bày văn bản chuyên nghiệp, đặc biệt là render các ký hiệu toán học rất xuất sắc (về tuổi đời thì R ra mắt năm 1993, còn TeX là khoảng 1978).

Tuy nhiên để chèn công thức toán học kiểu (La)TeX vào R thì rất vật vã vì có nhiều hướng dẫn rải rác khắp nơi và chưa có cách nào hoàn thiện cho đến hiện nay. Vì vậy cách tiếp cận của mình là chèn công thức toán học LaTeX ở dạng file SVG (file vector) để đảm bảo không bị vỡ ảnh vào ngay trong đồ thị do R xuất ra. Như vậy sẽ giảm thiểu sự phức tạp (không cần thiết) khi render đồ thị (file PNG raster) hay xuất ra dạng file PDF (bản chất cũng là dạng vector).

Trên cơ sở đoạn code template này, ta có thể nhanh chóng chèn công thức toán học đúng chuẩn vào đồ thị R với ít công sức nhất, thời gian còn lại để dành cho các câu chuyện phân tích, đánh giá model sâu xa hơn.