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

Gói XR tham khảo ngoài

Có một tình huống thế này: bạn viết một luận văn và bản tóm tắt của luận văn đó. Theo quy định, các tham khảo, định lý, phương trình,... trong bản tóm tắt phải được đánh số y hệt trong bản chính (luận văn). Đánh số cho các phương trình thì dễ, vì bạn có lệnh \setcounter để làm việc đó. Nhưng các tham khảo thì sao? Gói xr giải quyết câu hỏi này.

Ta phát biểu lại bài toán sau:
  1. giả thiết: có tài liệu main.tex, tài liệu summary.tex
  2. bài toán: từ summary.tex, tham khảo đến nhãn foobar trong main.tex

Cách dùng

Trong phần mở đầu của summary.tex bạn gõ như sau:

\usepackage{xr}
\externaldocument{main} % main là tài liệu main.tex, nơi bạn lấy tham khảo
% \externaldocument[xyz-]{main} % xyz- là tiền tố để phân biệt
% lệnh \externaldocument có thể dùng nhiều lần

Bây giờ, trong summary.tex, với \ref\pageref bạn có thể tham khảo đến mọi nhãn đã được khai báo trong main.tex bằng lệnh \label.

Xung đột

Có tình huống hiển nhiên, là một nhãn nào đó cùng được khai báo trong main.texsummary.tex. (Khi đó, lỗi khai báo đúp nhãn sẽ được thông báo). Gói xr không đưa ra cách giải quyết riêng lẻ, mà cung cấp tùy chọn khi gọi lệnh \externaldocument. Tuỳ chọn này (xyz- trong ví dụ trên) chỉ định tiền tố của tất cả các nhãn trong tập tin ngoài được lấy. Ví dụ, khi bạn dùng \externaldocument[xyz-]{main}, thì để lấy nhãn foobar trong main.tex, bạn phải dùng \ref{xyz-foobar}.

Mẹo vặt

Đôi khi, trong bản tóm tắt (summary.tex) ta chỉ đơn thuần chép lại các phương trình từ bản chính (main.tex). Khi chép như vậy, ta đồng thời chép luôn các lệnh tạo nhãn \label. Nếu không dùng các tiền tố như ở trên (vì lý do tiện lợi), thì ta có thể nghĩ đến chuyện bỏ qua mọi lệnh tạo nhãn \label trong summary.tex Hãy làm như sau:

% trong summary.tex
\makeatletter
\def\label#1{\relax}
\def\[email protected]@display#1{\relax}
\makeatother

Bây giờ thì mọi lệnh tạo nhãn bằng \label trong summary.tex đều không có hiệu lực gì cả ;)