Pergunta

Eu estou usando Esfinge para documentar um projeto. Ela produz arquivos LaTeX de reestruturado texto.

Eu gostaria de definir uma cor de fundo cinza ao dicas e notas , então eu personalizado o aviso ambiente depois de criar um ambiente Graybox :

\definecolor{MyGray}{rgb}{0.80,0.80,0.80}

\makeatletter\newenvironment{graybox}{%
   \begin{lrbox}{\@tempboxa}\begin{minipage}{\columnwidth}}{\end{minipage}\end{lrbox}%
   \colorbox{MyGray}{\usebox{\@tempboxa}}
}\makeatother

\makeatletter
\renewenvironment{notice}[2]{
  \begin{graybox}
  \bf\it
  \def\py@noticetype{#1}
  \par\strong{#2}
  \csname py@noticestart@#1\endcsname
}
{
  \csname py@noticeend@\py@noticetype\endcsname
  \end{graybox}
}
\makeatother

Tudo funciona bem, exceto se eu colocar um figura ambiente no interior do aviso ambiente. Nesse caso, eu recebo este erro:

LaTeX erro: não no modo nominal externa

Existe uma maneira de definir um fundo cinza para que aviso ambiente?

Foi útil?

Solução 2

Obrigado godbyk e Jouni para responder a minha pergunta.

O problema é que eu não faço código diretamente no LaTeX . Eu escrevo a documentação em texto reestruturado e saída Sphinx o LaTeX arquivos.

Mas eu encontrei uma solução: Eu redefinir o figura ambiente para usar o staticfigure do flowfram pacote:

\usepackage{flowfram}

\definecolor{MyGray}{rgb}{0.80,0.80,0.80}

\makeatletter\newenvironment{graybox}{%
   \begin{lrbox}{\@tempboxa}\begin{minipage}{\columnwidth}}{\end{minipage}\end{lrbox}%
   \colorbox{MyGray}{\usebox{\@tempboxa}}
}\makeatother

\makeatletter
\renewenvironment{notice}[2]{
  \begin{graybox}
  \bf\it
  \def\py@noticetype{#1}
  \par\strong{#2}
  \csname py@noticestart@#1\endcsname
}
{
  \csname py@noticeend@\py@noticetype\endcsname
  \end{graybox}
}
\makeatother

\renewenvironment{figure}[6]{
  \begin{staticfigure}
}{
  \end{staticfigure}
}

PS: Eu tive que colocar 6 com o número de argumentos quando redefinindo 'figura': se eu não fizer que ela exiba alguns 'hTBP' nos arquivos pdf (eu não sou um LaTeX especialista. é apenas a solução que eu encontrei para este problema)

Outras dicas

Esta é uma FAQ . Não faz sentido colocar uma figura (ou qualquer outro "float", que pode mudar para outro lugar na saída) dentro de uma caixa cinza; se você quiser a sua figura para conter uma caixa cinza, coloque o ambiente caixa cinza dentro do ambiente figura.

Como Jouni corretamente assinalou, figuras e tabelas (ou seja, carros alegóricos) podem ser movidos ao redor, e seu caixa cinza não pode contê-los. Para conseguir o efeito desejado, você tem duas opções:

  1. Coloque todo o seu aviso em um ambiente figure (de modo que todo o aviso pode ser flutuado na página ou para uma nova página se LaTeX assim o desejar).
  2. Não use um float (ambiente figure) - apenas o uso \includegraphics estalar sua imagem diretamente no ambiente notice. Você não será capaz de usar uma legenda com este não figura, no entanto, como legendas único trabalho dentro de um ambiente de figura ou tabela. Se você quiser uma legenda associada com esta imagem, você pode usar o href="http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=caption" rel="nofollow pacote caption :

    \documentclass{article}
    \usepackage{caption}% let's us use captions outside of floats
    \usepackage{lipsum}% provides filler text
    \begin{document}
    \lipsum[1]
    \begin{center}
      \includegraphics{mypic}
      \captionof{figure}{This is my picture.}% makes a caption for non-floats
      \label{fig:mypic}
    \end{center}
    \lipsum[2]        
    \end{document}
    

Eu não usei esfinge, então eu tenho medo que eu não posso te ajudar muito com a integração isso em sua produção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top