2010-06-27 27 views

Trả lời

9

Bạn có thể thực hiện việc này bằng cách sử dụng \expandafter. Ví dụ:

% redefine \textstring by appending " world" to it 
\expandafter\def\expandafter\textstring\expandafter{\textstring { }world} 

Nếu bạn không sử dụng \expandafter thì bạn kết thúc với một vấn đề đệ quy. Bạn có thể đọc thêm về nó here.

+0

Phương thức này hoạt động tốt (ngay cả khi văn bản được nối có chứa lệnh). Nhưng bây giờ tôi đã có một vấn đề với nó: khi tôi sử dụng \ textstring trong văn bản của tôi nó cho thấy "Xin chào thế giới" nhưng tôi phải sử dụng nó trong \ endnotetext [\ value {enumi}] {\ textstring} tạo ra một chú thích trống . – flaflamm

1

Vấn đề ở đây là ghi đè định nghĩa của \textstring, thay vì tham chiếu giá trị cũ. Để nối thêm, cách tiêu chuẩn là sử dụng lệnh TeX \edef, mở rộng định nghĩa trước khi gán một cái gì đó. Vì vậy, nếu bạn có

\def\textstring{Hello} % Or with \newcommand 
\edef\textstring{\textstring{} world} 

LaTeX sẽ thay đổi ở phía bên tay phải của \edef vào Hello world, và sau đó phân công lại đó để \textstring, đó là những gì bạn muốn. Thay vào đó, trong phiên bản hiện tại của bạn, các \newcommandkhông mở rộng phía bên tay phải, vì vậy khi bạn sử dụng \textstring, nó mở rộng để \textstring world, mà tự nó mở rộng để \textstring world world, mà tự mở rộng để ... bạn sẽ có được ý tưởng.

+0

Phương pháp này dường như có vấn đề khi văn bản để thêm lệnh chứa, nó tạo ra nhiều lỗi. – flaflamm

1

Tương tự như câu trả lời David Underhill là sau

\newcommand{\textstring}{Hello} 
\makeatletter 
\[email protected]@macro\textstring{ world} 
\makeatother 

Các [email protected]@macro vĩ mô đạt được tác dụng tương tự, và có thể tạo mã hơi dễ đọc hơn (đặc biệt là nếu mã của bạn là trong một gói/phong cách, hoặc nếu bạn' lại đã có trong một tình huống \makeatletter & \makeatother)

2

Được sử dụng đầu vào từ câu hỏi này để tạo

\edef\history{ } 
\newcommand{\historyAdd}[1]{\edef\history{\history{}#1 }} 
\newcommand{\historyAddEcho}[1]{#1\historyAdd{#1}} 

The history was: 
\historyAddEcho{Hi brian} 
\historyAdd{you idiot} 
\historyAddEcho{how are you?} 

\lipsum[3] 

The real history was: \history 

(xin lỗi brian, nhưng đây là ví dụ minh họa nhất mà tôi có thể nghĩ đến)

Các scructure có thể giúp bạn tạo ra một danh sách todo đơn giản với một cái gì đó như:

\lipsum[1] 

\historyAdd{\\work more with: } 
\section{\historyAddEcho{Introduction}} 

\lipsum[1] 

\historyAdd{\\work more with the text on page \thepage} 
\lipsum[1] 

\section{ToDo:} 
\history 

Hy vọng điều này có thể giúp ai đó ngoài kia cố gắng để chuỗi concat cho mục đích này.

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