Как определить многостраничную среду, не прерываемую таблицами и рисунками? - PullRequest
2 голосов
/ 13 июня 2010

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

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

\newcounter{bioclipse}
\def\thebioclipse{\thechapter-\arabic{bioclipse}}
\newenvironment{bioclipse}[2][]{\begin{small}\begin{shaded}\refstepcounter{bioclipse} \par\medskip\noindent%
   \textbf{Bioclipse Excursion~\thebioclipse #1: #2
   \vspace{0.1cm} \hrule \vspace{0.1cm}}
   \rmfamily}{\medskip \end{shaded}\end{small}}

Любое решение, запрещающее прерывание, подойдет, даже если цвет фонасделано по-другому.

1 Ответ

1 голос
/ 13 июня 2010

Алгоритм вставки довольно сложный. По сути, вы хотите, чтобы любая ожидающая вставка не помещалась на страницу, где применяется env bioclipse. В качестве первого быстрого решения вы можете сначала очистить все вставки, а затем начать новую главу. Если вы хотите поместить цифры или что-то еще в среду, и вы хотите, чтобы они «сбрасывались» только после последней страницы, на которой работает env ... Второе быстрое решение: поместите их непосредственно после среды !! Таким образом, они не будут «раздражать» страницу (ы) (конечно, избегайте использования сносок).

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

Копая немного в кодах LaTeX, я вижу, что есть условие, которое вы можете попробовать использовать, это \@insert*, т.е. \@insertfalse и \@inserttrue. Если вам повезет, они «управляют» возможностью вставки вставок, так что в начале вашей env вы можете сказать \@insertfalse, а в конце \@inserttrue. Попробуйте , я не говорю, что это работает.

Как вы, наверное, знаете, использовать @ в качестве буквенного кода для того, чтобы оно могло быть частью имени «команды», вы должны использовать \makeatletter и \makeatother, когда закончите (вероятно, преамбула класса / стиля по умолчанию делает это для вы).

Вы также можете заинтересоваться стилем placeins (он может быть уже в вашей установке, в противном случае см. Здесь ), который, очевидно, может решить (частично) вашу проблему.

...