2009-10-14 79 views
17

Tôi đã sử dụng \begin{figure} ... \end{figure} trong toàn bộ tài liệu LaTeX của mình, nhưng kiểu dáng mặc định là xấu; cụ thể là, các số liệu đều được căn trái. Có cách nào để xác định lại "con số" môi trường nên nó sẽ tự động chèn một số lệnh tập trung như thế này ?:Thực hiện một sửa đổi nhỏ đối với môi trường LaTeX

\begin{figure} \begin{center} 
\end{center} \end{figure} 

Chắc chắn, tôi có thể sử dụng \newenvironment để xác định một "cfigure" môi trường, nhưng đó là không mong muốn. Tôi không muốn đi qua và thay đổi tất cả "con số" của tôi thành "số nguyên" (và sau đó nhận ra rằng tôi muốn tất cả các con số được căn phải và phải đổi tên tất cả thành "số liệu").

tôi có thể sử dụng \renewenvironment, nhưng sau đó tôi sẽ phải khai thác thông qua các nguồn LaTeX để tìm thấy những gì các "con số" môi trường ban đầu được định nghĩa là sao chép/dán nó vào.

tôi gần tìm thấy những gì tôi muốn ở this blog post, nhưng ví dụ có cho một lệnh, không phải là một môi trường.

Trả lời

15
\let\oldfigure\figure 
\def\figure{\oldfigure\centering} 

Một giải pháp khác hoạt động với các đối số tùy chọn.

Đã sửa lỗi.

\let\oldfigure\figure 
\let\oldendfigure\endfigure 
\def\figure{\begingroup \oldfigure} 
\def\endfigure{\centering \oldendfigure \endgroup} 

cố định 2. Nó hoạt động tốt với bất kỳ tùy chọn và bất kỳ quy tắc và \par bên trong.

\makeatletter 
\let\oldfigure\figure 
\def\figure{\@ifnextchar[\[email protected] \[email protected]} 
\def\[email protected][#1]{\oldfigure[#1]\centering} 
\def\[email protected]{\oldfigure\centering} 
\makeatother 
+2

Điều này không có tác dụng, bởi vì hình có một đối số tùy chọn (như [htbp] sẽ bị hỏng theo định nghĩa lại này. –

+1

Ummm ... Phải. Tôi sẽ suy nghĩ lại –

+1

Hmmm, bạn đã thử nghiệm giải pháp mới chưa?Dường như không làm việc cho tôi. –

5

Như đã đề cập trong câu trả lời khác, bạn không thể làm các trick cũ của lệnh thêm vào trước để kết thúc \figure vĩ mô bởi vì đó sẽ mess lên quá trình xử lý đối số tùy chọn.

Nếu môi trường không có đối số thì nó sẽ hoạt động tốt, nhưng nếu không sẽ không có cách đơn giản để thực hiện điều này.

Đối với vấn đề của bạn với những con số, hãy thử tải gói floatrow:

\usepackage{floatrow} 

Nếu sẽ tập trung các nội dung của các nhân vật của bạn tự động.

Cập nhật: Nếu bạn không muốn tải gói, dưới đây là một số mã cũng sẽ thực hiện. Lưu ý rằng nó đặc trưng cho môi trường figure, nhưng chủ đề cơ bản là: sao chép định nghĩa gốc, phân tích các đối số theo cùng một cách, sau đó thêm bất kỳ mã nào bạn cần vào cuối.

 
\makeatletter 
\renewenvironment{figure}[1][\[email protected]]{ 
    \edef\@tempa{\noexpand\@float{figure}[#1]} 
    \@tempa\centering 
}{ 
    \[email protected] 
} 
\makeatother 

Các \edef được yêu cầu để mở rộng đầy đủ \[email protected] trước khi nó được truyền cho các \@float vĩ mô.

+0

Tôi đã yêu cầu một giải pháp không liên quan đến việc sao chép định nghĩa, nhưng tôi đã thử cách này và nhận lệnh không xác định "\ fps". – exclipy

+0

Tôi đã giải thích tại sao không thể làm điều đó (trong trường hợp này) mà không cần sao chép định nghĩa. Bạn cần thêm '\ makeatletter' ...' \ makeatother' xung quanh mã (tôi đã thêm vào ví dụ này) khi (re) định nghĩa các lệnh chứa '@'. –

2

Làm thế nào về:

\newenvironment{centeredfigure}{\begin{figure}\begin{center}}{\end{center}\end{figure}} 

Lưu ý: chưa được kiểm tra.

+3

Không có gì sai với cách tiếp cận này nhưng bạn nên sử dụng '\ centering' thay vì môi trường' center', vì sau này thêm phần đệm dọc bổ sung không cần thiết. –

+0

điểm tốt. Tôi đã cố tránh điều này. Cảm ơn! – Martijn

+3

Như tôi đã nói trong câu hỏi của mình, tôi không muốn xác định lại nó dưới tên khác. – exclipy

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