2010-02-07 21 views
6

Làm cách nào để khuyến khích/làm cho Latex gõ một số phần văn bản để tất cả văn bản xuất hiện trên một trang liên tục, trang lẻ?Làm cho các loại mủ cao su cho văn bản trên hai trang đối diện

Với thử và sai, \nopagebreak có thể được áp dụng để thực hiện việc này, nhưng có chiến lược nào hoạt động không? Một cái gì đó giống như một môi trường samepage sẽ là lý tưởng, nhưng một trong đó:

  1. Sẽ buộc phải phân trang trên trang lẻ nếu cần thiết để có được tất cả các trang văn bản;
  2. Cho phép tối đa một lần ngắt trang ở bất kỳ đâu trong thân môi trường và không ồn ào nếu không thể đảm bảo điều đó.

Trả lời

6

Bạn có thể đặt cùng một môi trường như

 
\newenvironment{twopage}{% 
    \begingroup\setbox0\vbox\bgroup 
}{% 
    \egroup 
    \ifdim\ht0>\textheight 
    \setbox1\vsplit0 to \textheight 
    \cleardoublepage\unvbox1\clearpage 
    \ifdim\ht0>\textheight 
     \PackageWarning{twopage}{Overflow in twopage environment}% 
    \fi 
    \unvbox0\clearpage 
    \else 
    \clearpage\unvbox0\clearpage 
    \fi\endgroup 
} 

Nếu bạn muốn có một thất bại ồn ào, thay đổi \PackageWarning vào \PackageError, The \unvbox es nên cho phép cho các ghi chú/phao để hoạt động đúng - nếu bạn không cần thay vào đó, bạn có thể xem xét thay đổi tất cả thành \box es (mặc dù tôi hơi bị ảnh hưởng bởi hành vi của \vsplit đối với độ sâu hộp và bỏ qua, do đó có thể tạo ra hành vi vui nhộn, nhưng nó sẽ đảm bảo rằng bạn chỉ mất hai trang bằng cách chảy bất cứ thứ gì thêm ở dưới cùng của trang thứ hai).

+0

Đã chấp nhận: Điều này có vẻ hoàn hảo. Tôi có phải là điểm của \ unvbox là để ngăn chặn không gian giả, bởi vì nếu không \ vsplit sẽ đảm bảo hộp 1 là chính xác \ textheight cao? –

+0

'\ unvbox' có hai hiệu ứng chính, cả hai đều phải làm cho weith làm cho nó hoạt động như thể không có môi trường kèm theo. Đầu tiên là bất kỳ whatsits/'\ vadjust' nào (được sử dụng bởi '\ mark',' \ footnote', '\ marginpar', v.v.) không hoạt động đúng trong các hộp, vì chúng muốn là" cấp cao nhất " trong trang được chuyển đi (các hộp không được đệ quy). Người kia phải làm gì với không gian - tôi không nhớ lại hành vi của '\ vsplit', nhưng tôi tin rằng có sự khác biệt giữa' foo \ par \ vbox {bar \ par baz} \ par qux' và ' foo \ par bar \ par baz \ par qux', và dường như với tôi rằng chúng tôi muốn thứ hai. – Steve

3

a distinction between \clearpage and \cleardoublepage. Bằng cách sử dụng \cleardoublepage ngay trước nội dung bạn muốn ở bên trái và \clearpage trước nội dung bạn muốn ở phía bên phải, bạn có thể buộc bố cục bạn đang tìm kiếm.

Tất nhiên, tùy chọn twoside là phải.

+0

Về mặt kỹ thuật, vâng, điều này trả lời câu hỏi tôi đã hỏi, nhưng tôi thực sự sau khi một cái gì đó tương tự như samepage: Tôi không muốn bất kỳ nghỉ trừ khi họ là cần thiết để giữ cho văn bản trên các trang phải đối mặt. Đề xuất của bạn sẽ đảm bảo văn bản nằm trên các trang đối diện, nhưng nó khá háo hức để thực hiện ngắt trang. –

Các vấn đề liên quan