2010-03-10 25 views
9

Tôi muốn xác định lại lệnh \part* để nó tự động thêm dòng nội dung. Điều này chứng tỏ khó khăn vì tôi muốn sử dụng lại lệnh \part* gốc bên trong phiên bản được gắn dấu sao của tôi.LaTeX: Xác định lại lệnh được gắn dấu sao

thường (ví dụ cho các lệnh xoá dấu sao) Tôi sẽ làm điều đó như thế này:

\let\[email protected]\part 
\renewcommand\part[2][]{ 
    \[email protected][#1]{#2} 
    … rest of definition} 

Đó là, tôi sẽ tiết kiệm định nghĩa ban đầu của \part trong \[email protected] và sử dụng.

Tuy nhiên, điều này không hoạt động đối với các lệnh được gắn dấu sao vì chúng không xác định một từ đơn lẻ (không giống như lệnh \part trong ví dụ ở trên). Câu hỏi này tóm tắt câu hỏi sau: Tôi làm cách nào để lưu lệnh được gắn dấu sao?

Lưu ý rằng tôi đã biết cách xác định lại chính lệnh được gắn dấu sao, sử dụng lệnh \WithSuffix từ gói suffix. Đây không phải là vấn đề.

Trả lời

8

Không có lệnh \part*. Điều gì xảy ra là lệnh \part sẽ xem xét ký tự tiếp theo sau nó (với \@ifstar) và gửi đến một trong hai thói quen khác thực hiện công việc thực tế dựa trên việc có dấu hoa thị hay không.

http://www.tex.ac.uk/cgi-bin/texfaq2html?label=cmdstar

+0

“Không có' \ phần * 'lệnh.” - Tôi biết. :-(Nếu không, tôi sẽ không gặp vấn đề này –

+0

Vì vậy, sau đó xác định lại '\ part' như bạn có và xử lý cả hai phiên bản? Hoặc khai thác vào nguồn LaTeX và xác định lại mã được gắn dấu sao-' \ part'? –

+0

… nhưng điều này Bây giờ tôi đã có nó ngay bây giờ.Chúng tôi sẽ giải quyết vấn đề này ngay lập tức –

3

Nhờ câu trả lời @ SMG, tôi đã gom góp một giải pháp mà hoạt động hoàn hảo. Đây là nguồn hoàn chỉnh, cùng với ý kiến ​​giải thích:

% If this is in *.tex file, uncomment the following line. 
%\makeatletter 

% Save the original \part declaration 
\let\[email protected]\part 

% To that definition, add a new special starred version. 
\WithSuffix\def\part*{ 
    % Handle the optional parameter. 
    \ifx\next[% 
    \let\next\[email protected]@star% 
    \else 
    \def\next{\[email protected]@star[]}% 
    \fi 
    \next} 

% The actual macro definition. 
\def\[email protected]@star[#1]#2{ 
    \ifthenelse{\equal{#1}{}} 
    {% If the first argument isn’t given, default to the second one. 
    \def\[email protected]@short{#2} 
    % Insert the actual (unnumbered) \part header. 
    \[email protected]*{#2}} 
    {% Short name is given. 
    \def\[email protected]@short{#1} 
    % Insert the actual (unnumbered) \part header with short name. 
    \[email protected]*[#1]{#2}} 

    % Last, add the part to the table of contents. Use the short name, if provided. 
    \addcontentsline{toc}{part}{\[email protected]@short} 
} 

% If this is in *.tex file, uncomment the following line. 
%\makeatother 

(. Điều này cần các gói suffixifthen)

Bây giờ, chúng ta có thể sử dụng nó:

\part*{Example 1} 
This will be an unnumbered part that appears in the TOC. 

\part{Example 2} 
Yes, the unstarred version of \verb/\part/ still works, too. 
Các vấn đề liên quan