Как настроить существующую среду LaTeX, не вмешиваясь в другие среды
-
03-07-2019 - |
Вопрос
Я использую Сфинкс для документирования проекта.Он создает файлы 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-файлах (я не Латекс эксперт.это просто решение, которое я нашел для этой проблемы)
Другие советы
Это настоящий Вопросы и ответы.Не имеет смысла помещать цифру (или любой другой "плавающий элемент", который может перемещаться в другом месте выходных данных) внутри серого прямоугольника;если вы хотите, чтобы ваш рисунок содержал серое поле, поместите окружение серого поля внутри окружения рисунка.
Как правильно указал Джуни, рисунки и таблицы (т. Е. числа с плавающей точкой) можно перемещать, и ваш серый прямоугольник не может их содержать.Чтобы добиться желаемого эффекта, у вас есть два варианта:
- Поместите все ваше уведомление в
figure
окружающая среда (так что все уведомление может быть перемещено по странице или на новую страницу, если LaTeX того пожелает). Не используйте поплавок (
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, поэтому, боюсь, не смогу вам слишком сильно помочь с интеграцией этого в их выходные данные.