Как настроить существующую среду LaTeX, не мешая другим средам - PullRequest
2 голосов
/ 03 марта 2009

Я использую Sphinx для документирования проекта. Он производит файлы LaTeX из реструктурированного текста .

Я бы хотел установить серый фоновый цвет для tips и notes , поэтому я настроил среду note после создания среды 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

Все работает нормально, за исключением случаев, когда я помещаю рисунок среду в среду note . В этом случае я получаю эту ошибку:

LaTeX Error: не в режиме внешнего пар

Есть ли способ установить серый фон для этой заметки окружающей среды?

Ответы [ 3 ]

3 голосов
/ 03 марта 2009

Это FAQ . Не имеет смысла помещать фигуру (или любой другой «плавающий элемент», который может перемещаться в другое место на выходе) внутри серого поля; если вы хотите, чтобы ваша фигура содержала серый прямоугольник, поместите среду серого прямоугольника в среду рисунка.

2 голосов
/ 04 марта 2009

Спасибо Годбык и Джуни за ответ на мой вопрос.

Проблема в том, что я не кодирую напрямую в LaTeX . Я пишу документацию в виде реструктурированного текста, и Sphinx выводит LaTeX файлы.

Но я нашел решение: я переопределяю среду figure для использования staticfigure из пакета flowfram :

\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: мне пришлось поставить 6 на количество аргументов при переопределении 'figure': если я не сделаю этого, он выведет некоторый htbp в pdf-файлы (я не LaTeX эксперт. это просто решение, которое я нашел для этой проблемы)

1 голос
/ 04 марта 2009

Как правильно указал Джоуни, фигуры и таблицы (т.е. плавающие) можно перемещать, и ваша серая коробка не может их содержать. Для достижения желаемого эффекта у вас есть два варианта:

  1. Поместите все ваше уведомление в среду figure (чтобы все уведомление можно было перемещать на странице или на новой странице, если LaTeX выберет).
  2. Не используйте поплавок (figure окружение) - просто используйте \includegraphics, чтобы вставить ваше изображение непосредственно в окружение notice. Однако вы не сможете использовать подпись с этим не рисунком, так как подписи работают только внутри среды рисунка или таблицы. Если вы хотите подпись, связанную с этим изображением, вы можете использовать пакет 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}
    

Я не использовал Сфинкса, поэтому боюсь, что не смогу вам слишком сильно помочь с интеграцией этого в их вывод.

...