Как настроить существующую среду LaTeX, не вмешиваясь в другие среды

StackOverflow https://stackoverflow.com/questions/606746

Вопрос

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

Я хотел бы установить серый цвет фона для Советы и Примечания, поэтому я настроил УВЕДОМЛЕНИЕ среда после создания среды 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

Все работает нормально, за исключением того, что я размещаю фигура окружающая среда внутри УВЕДОМЛЕНИЕ Окружающая среда.В этом случае я получаю следующую ошибку:

Ошибка LaTeX:Не в режиме внешнего сравнения

Есть ли способ установить для этого серый фон УВЕДОМЛЕНИЕ окружающая среда ?

Это было полезно?

Решение 2

Спасибо годбик и Джуни за то, что ответил на мой вопрос.

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

Но я нашел решение:Я переосмысливаю фигура среда для использования статическая конфигурация из самого потоковая рама упаковка:

\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 к числу аргументов при переопределении "цифры":если я этого не сделаю, он выводит некоторый "htbp" в PDF-файлах (я не Латекс эксперт.это просто решение, которое я нашел для этой проблемы)

Другие советы

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

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

  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}
    

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top