Thủ thuật này giúp các bạn soạn thảo tài liệu lớn bằng LaTeX quản lý và biên dịch tài liệu nhanh hơn.

Để có thể chia các chương ra thành nhiều file nhỏ để dễ quản lý thay vì đặt tất cả chung trong một file chính (tạm gọi là main.tex), bạn vui lòng xem bài viết này. Tuy nhiên, mỗi khi bạn muốn biên dịch file main.tex thì nó sẽ biên dịch lại từ đầu toàn bộ sách, dẫn tới khá là lâu trong khi bạn chỉ đang thay đổi có tí xíu ở chương 1 và muốn biên dịch để thấy kết quả.

Bạn muốn: chỉ biên dịch duy nhất chương 1 thôi thì phải làm sao?

Cách 1: dùng \includeonly

1. Trong file chính, bạn dùng lệnh \include{chapters/chapter1} như bình thường.

2. Trước \begin{document}  của file main.tex. bạn dùng lệnh \includeonly{chapters/chapter1}  để nói cho latex biết là bạn chỉ đang muốn biên dịch chapter1.tex thôi.

Bạn cũng có thể chèn nhiều chương cùng lúc

\includeonly{chapters/chapter1,chapters/chapter2}

Nhược điểm của cách 1 là khi biên dịch, bạn phải quay lại main.tex để biên dịch và có thể những phần khác nằm ngoài \includeonly  sẽ không được hiển thị sau khi biên dịch.

Nói thêm về sự khác nhau giữa include và input
  • \include{filename} : nó sẽ tạo ra một trang mới, tức nội dung trong filename.tex sẽ được đặt ở một trang mới. Bạn không nên dùng .tex phía sau filename. Với include, bạn có thể áp dụng \includeonly  như ở trên.
  • \input{filename} : đây đơn thuần là bạn đem nội dung của filename ra một file riêng thay vì ghi trực tiếp trong file main.tex. Nói cách khác, nó giống như việc bạn đem tất cả nội dung trong filename của input và dáng vào vị trí chỗ \input{filename}  trong main.tex. Tên filename bạn có thể dùng .tex hoặc không đều được.

Cách 2 (nâng cao): dùng package subfiles

Ưu điểm của cách này là bạn có thể biên dịch ngay trong file chapter1.tex mà không cần quay lại file main.tex. Cũng như các chương khác vẫn sẽ hiển thị dù bạn chỉ làm việc với chapter1.tex

1. Đặt câu lệnh sau trước \begin{document}

\usepackage{subfiles}

2. Trong main.tex chèn file bằng

\subfile{chapter1}

3. Trong file chapter1.tex, dùng

\documentclass[main.tex]{subfiles}
\begin{document}
% nội dung chương
\end{document}

Nếu bạn muốn có những nội dung chỉ hiện thị khi biên dịch chapter1.tex mà không hiển thị khi biên dịch main.tex hoặc ngược lại thì xem bài viết này.

Lưu ý, nếu bạn để hình trong 1 folder riêng, các chương trong một folder riêng, giả sử như thế này

figures
| fig1.png
| fig2.png
chapters
| chap1.tex
| chap2.tex
main.tex

Thì khi chèn hình, bạn cần dùng gói lệnh

\usepackage{graphicx}
\graphicspath{{figures/}{../figures/}}

Trong đó, cái {figures/} đầu tiên dùng cho file main.tex, còn cái {../figures/} thứ hai là dùng cho các chương trong folder chapters.

Trong mỗi chương bạn cũng cần sửa đôi chút

\documentclass[../main.tex]{subfiles}

Nhược điểm của cách này là bạn phải định nghĩa những gói lệnh, cài đặt cần thiết dùng trong chapter1.tex ngay trong main.tex. Nói khác đi, tất cả cài đặt phải được đặt trong main.tex

Cách 3: dùng gói standalone

Ưu điểm của gói này là cho phép bạn chia nhỏ thiết lập (gói lệnh, cài đặt ban đầu,…) cho từng chương riêng lẻ. Ví dụ, chapter1.tex cần dùng gói lệnh abc, xyz nào đó trong khi các chương khác thì không cần đến. Nếu bạn đặt các thiết đặt này vào main.tex thì nó quá dư thừa khi bạn làm việc ở các chương khác ngoài chapter1.

Nên dùng cách này khi bạn muốn chèn hình tikz vào trong file chính. Hình ấy được chèn đi chèn lại nhiều lần.

Bạn có thể dùng \include  hay \input  để chèn các chương vào file chính main.tex. Ví dụ cách sử dụng như bên dưới.

1. Trong file main.tex,

\documentclass{book}
\usepackage{standalone}
\begin{document}
% nội dung
\input{chapter1}
% nội dung
\end{document}

2. Trong file chapter1.tex

\documentclass{standalone}
% thiết lập cho chapter1 (và chỉ riêng cho chapter1 mà thôi)
\begin{document}
% nội dung chapter1
\end{document}

Bạn có thể biên dịch main.tex hay chapter1.tex đều được.

Share

CÙNG CHỦ ĐỀ

CÓ THỂ BẠN SẼ THÍCH