2010-01-03 6 views
4

В настоящее время я использую Sphinx для генерации вывода LaTeX, который преобразуется в PDF для вывода в стиле книги с использованием pdftex.Изображения в предупреждениях/предупреждениях/уведомлениях

В настоящее время у меня есть уведомления, предупреждение и другое «увещевание» показ внутри ограниченной коробки, в стиле, который выглядит немного как это:

----------------------------------- 
| Warning:  lorem ipsum foozle | 
| fuzzle fuzz buzz    | 
|---------------------------------- 

латекс, который генерирует такую ​​коробку выглядит это:

\begin{notice}{warning}{Warning:} 
The \code{repoze.bfg} documentation is offered under the 
Creative Commons Attribution-Nonconmmercial-Share Alike 3.0 United 
States License. 
\end{notice} 

Есть ряд команд в LaTeX .sty файла, которые обеспечивают поведение коробки :

% Notices/Admonitions 
% 
\newlength{\[email protected]} 

\newcommand{\[email protected]}{ 
\setlength{\fboxrule}{1pt} 
\setlength{\fboxsep}{7pt} 
\setlength{\[email protected]}{\linewidth} 
\addtolength{\[email protected]}{-2\fboxsep} 
\addtolength{\[email protected]}{-2\fboxrule} 
\setlength{\shadowsize}{3pt} 
\Sbox 
\minipage{\[email protected]} 
} 
\newcommand{\[email protected]}{ 
\endminipage 
\endSbox 
\fbox{\TheSbox} 
} 

% Some are quite plain: 
\newcommand{\[email protected]@note}{} 
\newcommand{\[email protected]@note}{} 
\newcommand{\[email protected]@hint}{} 
\newcommand{\[email protected]@hint}{} 
\newcommand{\[email protected]@important}{} 
\newcommand{\[email protected]@important}{} 
\newcommand{\[email protected]@tip}{} 
\newcommand{\[email protected]@tip}{} 

% Others gets more visible distinction: 
\newcommand{\[email protected]@warning}{\[email protected]} 
\newcommand{\[email protected]@warning}{\[email protected]} 
\newcommand{\[email protected]@caution}{\[email protected]} 
\newcommand{\[email protected]@caution}{\[email protected]} 
\newcommand{\[email protected]@attention}{\[email protected]} 
\newcommand{\[email protected]@attention}{\[email protected]} 
\newcommand{\[email protected]@danger}{\[email protected]} 
\newcommand{\[email protected]@danger}{\[email protected]} 
\newcommand{\[email protected]@error}{\[email protected]} 
\newcommand{\[email protected]@error}{\[email protected]} 

\newenvironment{notice}[2]{ 
    \def\[email protected]{#1} 
    \csname [email protected]@#1\endcsname 
    \par\strong{#2} 
}{\csname [email protected]@\[email protected]\endcsname} 

Вместо того, чтобы иметь коробку вокруг уведомления и иметь слово, представляющее вид уведомления внутри коробки, я хотел бы сохранить поле вокруг предупреждения, но вместо этого заменить слово «предупреждение» в поле изображением , например, так:

------------------------------------------- 
| ---         | 
| / \         | 
| \ /        | 
| --- Fuzzle foo buz lorem ipsum | 
------------------------------------------- 

Я не могу изменить \ начать {извещение} ... \ конец {извещение} латексные литералы, оказываемые Сфинкса (ну, я могу, но это реальная боль в заднице). Я бы предпочел просто поместить логику в новый макрос \ newenvironment {notice}. Может ли кто-нибудь рекомендовать стратегию? Все, что я пробовал до сих пор, закончилось слезами.

ответ

5

Попробуйте следующее (требуется пакет ifthen или xifthen для команды \ifthenelse):

% Keep a copy of the original notice environment 
\let\origbeginnotice\notice 
\let\origendnotice\endnotice 

% Redefine the notice environment so we can add our own code to it 
\renewenvironment{notice}[2]{% 
    \origbeginnotice{#1}{#2}% equivalent to original \begin{notice}{#1}{#2} 
    % load graphics 
    \ifthenelse{\equal{#1}{warning}}{\includegraphics{warning}}{} 
    \ifthenelse{\equal{#1}{notice}}{\includegraphics{notice}}{} 
    % etc. 
}{% 
    \origendnotice% equivalent to original \end{notice} 
} 

Вы должны найти способ, чтобы получить этот код в преамбуле документа.