2010-05-04 21 views
5

Tôi đang sử dụng ntheorem để sắp xếp một tập hợp các điều kiện. Trong lời mở đầu của tôi, tôi có:Tham chiếu đến môi trường giống như định lý bằng [tên]

\theoremstyle{empty} 
\newtheorem{Condtion}{Condtion} 

Khi tôi muốn câu chữ một điều kiện, tôi viết:

\begin{Condtion}[name] 
\label{cnd:nm} 
foo foo foo 
\end{Condition} 

Tên xuất hiện in đậm trên cùng một dòng như sự khởi đầu của văn bản của tình trạng này, với không có số hay gì cả. Hoàn hảo.

Những gì tôi muốn làm bây giờ là đề cập đến tình trạng này bởi một số biến thể của lệnh \ref, \ ref gọi vào số [mà không được hiển thị bất cứ nơi nào khác] \ thref viết "n Điều kiện" cho điều kiện thứ n \ nameref viết tên của SECTION của nhãn. một giải pháp zref đã được đề xuất here, nhưng có vẻ không đạt yêu cầu và khó sử dụng.

Bất kỳ đề xuất nào về cách đơn giản để thực hiện việc này? (Ngay cả một giải pháp zref đơn giản sẽ tốt đẹp) Tại thời điểm này tôi đã chỉ định một \newcommand cho từng điều kiện và sử dụng thay vì trích dẫn chính điều kiện đó. Đây là ngữ nghĩa mờ đục và không thỏa mãn ...

(sửa: Tôi đã gửi email một tác giả của ntheorem, Wolfgang May, và ông giải thích rằng không thực sự là một cách để làm điều này trong ntheorem, vì tùy chọn [name] không được ghi lại.)

(chỉnh sửa: Đây không phải là bản in như được đề xuất trong nhận xét vì tôi quan tâm đến tham chiếu môi trường bằng lệnh tên tùy chọn của nó, không tham chiếu phần/chương mà nó nằm trong đó.)

+1

Kiểm tra http://stackoverflow.com/questions/1491842/references-with-text-in-latex mà * có thể * là bản sao có hiệu lực. Ngoài ra http://stackoverflow.com/questions/2613506/ref-chapter-name-in-latex và mọi thứ liên kết từ đó. – dmckee

+0

zref có thể hoạt động, nhưng nó có vẻ như là một cách làm việc phức tạp. Ý tôi là, [tên] đã được khai báo ở đầu môi trường. Tôi chỉ muốn gọi nó bằng tên của nó không phải là số của nó ... – Seamus

Trả lời

7

Tôi nghĩ rằng những điều sau đây có thể làm những gì bạn muốn.

\makeatletter 
\def\namedlabel#1#2{\begingroup 
    \def\@currentlabel{#2}% 
    \label{#1}\endgroup 
} 
\makeatother 

Sau đó, bạn sử dụng nó như

\begin{theorem} 
    \namedlabel{thm:seamus}{Seamus' Theorem} 
    Here is Seamus' Theorem. 
\end{theorem} 

Here I reference~\ref{thm:seamus}. 

Thật không may, nó có thể sau đó chỉ được tham chiếu theo tên, mặc dù tôi giả sử bạn có thể sử dụng bình thường \label cũng (với một chìa khóa khác nhau tất nhiên).

Đối với amsthm môi trường mà bạn có thể sử dụng

\makeatletter 
\let\@[email protected]=\@begintheorem 
\def\@begintheorem#1#2[#3]{% 
    \gdef\@[email protected]{#3}% 
    \@[email protected]{#1}{#2}[#3]% 
} 
\def\namedthmlabel#1{\begingroup 
    \edef\@currentlabel{\@[email protected]}% 
    \label{#1}\endgroup 
} 
\makeatother 
+0

Loại tác phẩm đó. Nhưng nó vẫn không lý tưởng. Vấn đề là, tôi muốn sử dụng nội dung của đối số tùy chọn của điều kiện như tên tôi đang gọi. Vì vậy, tôi có '\ begin {Condition} [Cnd Name]' và tôi muốn có một nhãn mà sẽ, khi tôi 'ref' nó, nói" Cnd Name ", in đậm vì nó là khi điều kiện đầu tiên được viết ra. Bằng cách này, tôi phải thêm một đối số thêm vào nhãn và đảm bảo rằng nó khớp với "Tên Cnd" ... – Seamus

+0

Điều đó sẽ phụ thuộc vào môi trường được sử dụng. Có thể bạn sẽ phải tạo trình bao bọc cho mỗi môi trường như vậy, vì hầu hết trong số đó có thể không lưu thông tin đó ở bất kỳ đâu. Nếu tất cả những gì bạn muốn là cho môi trường amsthm, tôi đã thêm vào câu trả lời. –

+0

OK cảm ơn. Tôi sẽ thử điều này sau. Một điều tương tự cũng có tác dụng với ntheorem? – Seamus

2

bạn có thể muốn xem gói nameref, được phân phối với hyperref. Có một phần trong tài liệu tham khảo nameref về "công cụ": http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=nameref

Thông tin thêm về tham khảo: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=nameref

+1

nameref không hoạt động: nó tham chiếu đến tiêu đề của PHẦN mà môi trường giống như định lý xuất hiện. Am đang kiểm tra các khả năng khác được tìm thấy trong các phân đoạn có thể có của chú thích ở trên. – Seamus

3

nameref không hoạt động:. Nó tham chiếu tiêu đề của PHẦN môi trường lý giống như xuất hiện trong

Đây là một lỗi nameref đã được khắc phục cách đây một thời gian: http://web.archiveorange.com/archive/v/9uUx5EuqoCGynIvx3om7#lY2MJxvge2oMgOi

Thật không may một số bản phân phối Linux như Debian/Ubuntu với các phiên bản cũ của các gói (Ubuntu 11.04 vẫn xuất xưởng TeX Live 2009 mặc dù phiên bản mới nhất là TeX Live 2011).Nếu bạn đang sử dụng một bản phân phối Linux như vậy, hãy sử dụng gói Tex Live trong bản phân phối và cài đặt TeX Live trực tiếp tại đây: http://www.tug.org/texlive/ Sau đó bạn có thể cập nhật các gói bằng tlmgr (một công cụ thực sự tuyệt vời không kèm theo Debian/Ubuntu) .

0

Tôi nghĩ những người khác có thể thấy điều này hữu ích. Mặc dù tôi đã cài đặt gói hyperref được cập nhật, tôi đã gọi một cách rõ ràng \usepackage{nameref} sau \usepackage{hyperref} để có được hành vi chính xác từ \nameref. Nếu không có cuộc gọi rõ ràng tới \usepackage{nameref}, \nameref đã hoạt động, nhưng đã hiển thị lỗi được thảo luận trong chuỗi này.

Cập nhật: cách giải quyết này không được trả lại cho một ví dụ tối thiểu (tôi đã kiểm tra). Tôi không biết liệu có điều gì đó phức tạp hơn xảy ra trong các tệp kiểu của tôi không, nhưng tôi sẽ cập nhật điều này nếu tôi tìm thấy thứ gì đó. Điều này vẫn có thể giúp một người nào đó gặp phải vấn đề tương tự như tôi.

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