2009-08-21 60 views
7

Tôi sử dụng lệnh \todo từ gói \todonotes. Tôi muốn bố trí nguồn của tôi để đưa \todos riêng từ đoạn trước:LaTeX: Tránh đoạn mới?

Some text. 

\todo{make note} 

Nhưng tôi không muốn \todo để bắt đầu một đoạn mới, hoặc nó vít lên khoảng cách của các tài liệu.

Có lệnh nào để tránh điều này không?

Nếu có lệnh/gói để tiêu thụ khoảng trắng tối đa, thì tôi có thể xác định lại \todo để sử dụng.

Chỉnh sửa: Thêm một% giữa mọi thứ rõ ràng là rất khó chịu. Còn gì nữa không?

+1

Không thêm một ký tự đơn trên '\ todo' giải pháp ít gây khó chịu nhất mà chúng ta có thể nhận được? – voyager

+0

voyager: Không, tôi không muốn thêm bất kỳ ký tự nào. Điều tốt nhất chúng ta có thể làm là để có một lệnh (nói \ tiêu thụ) mà tiêu thụ khoảng trắng dẫn đến nó, để tôi có thể xác định lại \ todo để sử dụng \ tiêu thụ. –

+1

Có \ unskip để loại bỏ không gian ngang cuối cùng, nhưng đoạn tách là một câu chuyện hoàn toàn khác nhau. –

Trả lời

9

Tôi phải đồng ý với mọi người khác rằng bạn có lẽ nên chỉ cần thêm %, nhưng tôi tìm thấy câu hỏi này inte nghỉ ngơi. Vấn đề là ngay sau khi LaTeX đọc dòng trống, nó được chuyển đổi thành lệnh \par, kết thúc đoạn trước đó. Khi bắt đầu \todo, lệnh \par đã được thực hiện và không thể hoàn tác lệnh này (tôi nghĩ). Vì vậy, hy vọng duy nhất của bạn là giữ cho rằng \par bị chèn vào hoặc không hoạt động như bình thường. Nếu bạn muốn ngăn chặn nó được chèn vào, bạn có thể thử đọc Chương 8 của "TeXbook", nó sẽ cho bạn biết cách một dòng trống được chuyển đổi thành \par. Ngoài ra, bạn có thể thử tạo một giải pháp dựa trên loại ý tưởng sau:

 
Some text.{\let\par\relax 

\todo{make note}} 

Nhưng hãy chú ý! Bạn chắc chắn không muốn trên toàn cầu thay đổi hành vi của \par, đó là lý do tôi thêm một cặp dấu ngoặc nhọn (lệnh LaTeX là phạm vi, do đó định nghĩa mới của \par chỉ có hiệu lực trong nhóm nơi định nghĩa được tạo). Chúc may mắn.

+0

Tôi nghĩ rằng đây là một câu trả lời đúng như tôi có thể nhận được. –

4

Hãy thử điều này:

 
Some text. 
% 
\todo{make note} 
+0

Thêm một% giữa mọi thứ rõ ràng là rất khó chịu. Còn gì nữa không? –

+0

@Paul Biggar Rõ ràng, bạn và tôi có dung sai khác nhau. ;-) –

+1

@Sinan Ünür: Vâng, tôi phải làm điều đó ở mọi nơi. Đó là lý do tại sao tôi yêu cầu một lệnh để tiêu thụ khoảng trắng. –

2

Làm thế nào về

Some text. 
% 
\todo{make note} 
% 
some more text 
+0

Thêm một% giữa mọi thứ rõ ràng là rất khó chịu. Còn gì nữa không? –

+1

Phải có điều gì đó sai với tôi vì tôi đã làm điều này từ năm 1993 bất cứ khi nào tôi muốn để lại một khoảng trống ở giữa đoạn văn mà không có LaTeX tạo đoạn văn. Tôi chưa bao giờ có động lực để tự hỏi liệu có cách nào khác để làm điều đó không. –

+1

@Sinan Ünür: Rõ ràng, bạn thiếu một dự án quan trọng để trì hoãn;) –

2

có thể bạn không nên rời khỏi dòng mới giữa văn bản và todo ghi chú hoặc chỉ nhận xét nó

Some text. 
% 
\todo{make note} 
+0

Thêm một% giữa mọi thứ rõ ràng là rất khó chịu. Còn gì nữa không? –

+0

không chắc chắn nếu điều này sẽ làm việc nhưng nếu bạn muốn để lại dòng mới giữa văn bản và lưu ý bạn có thể thử thêm một nhân vật backspace ở phía trước của lệnh cần làm \ b \ todo {make note} – stefita

+1

Chỉ cần bỏ trống dòng hoàn toàn?Cách duy nhất cho latex để bắt đầu một đoạn mới là một dòng trống – Martijn

0

chỉ bao gồm \ cần làm đúng ở giữa văn bản của bạn. không có ngắt dòng, không có gì.

blah blah blah text \ todo {Làm điều này ngay bây giờ!} Thêm văn bản blah blah blah.

trên máy tính của tôi (win xp, miktex 2.7, texniccenter) hoạt động tốt, không tạo ngắt dòng và đặt ghi chú cần làm ở lề. . .

+2

Tôi nghĩ rằng người hỏi ban đầu thực sự muốn làm cho '\ todo' trực quan khác biệt trong ** nguồn **. –

+0

với bộ định danh cho gói todo, như \ todo [inline] {để làm văn bản}, nó bổ sung thêm vào lề với một dòng kết nối nó với văn bản ... nếu bạn sử dụng tùy chọn [inline], nó sẽ mất toàn bộ dòng và đặt màu nền thành màu cam theo mặc định. – Mica

2

Đặt \endlinechar=-1 để làm cho các dòng trống không có hiệu lực. Bạn sẽ cần phải sử dụng \par để phân tách các đoạn văn, mà tôi nghĩ là kích thích lớn hơn việc phải nhập % trên các đường phân cách, nhưng đó là những gì bạn đang yêu cầu.

+0

Điều tôi thực sự yêu cầu là khả năng nói "dòng trống cuối cùng không có hiệu lực. Nhưng rất thú vị, cảm ơn bạn. –

+0

Tôi không nghĩ điều đó sẽ dễ dàng. Khi TeX đã lấy dòng trống cuối cùng như một phân đoạn đoạn văn, nó đã hoàn thành đoạn trước đó và thêm nó vào danh sách các hộp cho trang, và có thể quyết định rằng trang đã đầy và được gọi là thường trình đầu ra cho trang. Tôi ngần ngại nói rằng việc hoàn tác điều này là không thể yêu cầu đưa ra các thủ thuật mà các trình thuật sĩ TeX có thể làm, nhưng tôi nghĩ bạn cần tìm một người quen thuộc với TeX để giúp bạn với điều này. –

1

Làm thế nào để giữ mọi thứ vẫn còn hoạt động để thực hiện các thẻ \ def, sau đó loại bỏ và di chuyển nó vào tài liệu phù hợp khi không còn việc phải làm?

Ví dụ:

\def \par1 
{ 
It was the best of times, it was the 
} 

\def \par2000 
{ 
"Repression is the only lasting philosophy. The dark deference of fear and slavery, my friend," observed the Marquis 
} 

\def \paridunno 
{ 
The end 
} 

Chuyện hai thành phố, bởi Charles Dickens

\par1 
\todo{write a whole bunch of pages} 
\par2000 
\todo{Visit ghost of Christmas future, copy pages from finished book} 
\paridunno 
\todo{Think of a better ending} 

đó có lợi ích bổ sung cho bạn một \ listoftodos cả trong nguồn theo nghĩa đen, và

trong đầu ra.

6

Khi macro đứng trước không gian không mong muốn,% không cần thiết nếu bạn sử dụng \ @ifnextchar và \ @gobble.

Hãy xem xét một cái gì đó tương tự (trong lời mở đầu, tất nhiên):

\makeatletter 
\let\oldtodo\todo 
\renewcommand\todo[1]{% 
\oldtodo{#1}% 
\@ifnextchar\par{\@gobble}{}} 
\makeatother 

Bằng cách đó, nếu bạn có một cái gì đó như:

\todo{Stuff} 

Things 

nó sẽ hoạt động giống như

\todo{Stuff} 
% 
Things 

hoặc

\todo{Stuff} 
Things 

Bạn có thể khái quát những việc như vậy với một macro như

\makeatletter 
\newcommand\gobblepars{% 
    \@ifnextchar\par% 
     {\expandafter\gobblepars\@gobble}% 
     {}} 
\makeatother 

Sau đó bạn có thể sử dụng bất cứ nơi nào \gobblepars bạn muốn ăn gian (như sau khi todo). Bạn cũng có thể xác định lại todo (như được hiển thị ở trên) để tự động đặt \gobblepars sau nó.

Để xử lý hàng đầu không gian trống. bạn cũng có thể sử dụng \gobblepars nhưng bạn phải rõ ràng. Ví dụ:

Some text\gobblepars 

\todo{Stuff} 

sẽ ngăn \ par hiển thị giữa hai dòng.

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