
Это известная проблема, tufte-*
и \sidenote
она \marginnote
не будет собираться, если используется внутри mdframed
окружений или tcolorbox
es. Я не нахожу обходного пути для этого, и большинство сообщений по теме предполагают, что его нет.
Я просто хочу сделать красивый серый фон позади некоторых абзацев в tufte-handout
. Можно ли это сделать?без mdframed
или tcolorbox
?
EDIT: Минимальный пример
\documentclass[nobib,justified]{tufte-handout}
\usepackage{mdframed}
\newmdenv[
linecolor=lightgray,
linewidth=3pt,
leftmargin=0pt,
innerleftmargin=0pt,
rightmargin=0pt,
innerrightmargin=0pt
]{graybox}
\usepackage{lipsum}
\begin{document}
\begin{graybox}
\lipsum[1]
\marginnote{This is a marginnote}
\end{graybox}
\end{document}
Не удается построить с! LaTeX Error: Float(s) lost.
решение1
Вот немного глупый хак, который может бытьмногоошибок, но, похоже, это работает для коротких абзацев вдали от разрывов страниц.
\documentclass{tufte-handout}
\usepackage{tcolorbox}
\usepackage{blindtext}
\usepackage{environ}
\makeatletter
\NewEnviron{grayground}{%
\noindent\smash{\begin{tcolorbox}[colback=gray!20, colframe=gray!20, oversize, top=0pt, bottom=0pt, left=4pt, right=4pt, box align=top]
\let\sidenote\@gobble
\let\marginnote\@gobble
\color{gray!20}\BODY
\end{tcolorbox}}\par\BODY}
\makeatother
\begin{document}
\begin{grayground}
\blindtext\sidenote{\blindtext}\blindtext
\end{grayground}
\end{document}
Объяснение
Основная идея состоит в том, чтобы сначала напечатать текст один раз, используя tcolorbox
, но подавить любые sidenote
или marginnote
, при этом текст должен быть того же цвета, что и фон, чтобы скрыть его.
Затем мы печатаемнастоящийтекст с активной заметкой на полях и примечанием на полях поверх него.
Теперь я рассчитываю на то, что размеры версии с надстрочными индексами и версии без них будут очень похожи, поэтому, хотя эти два текста не совсем одинаковы, они должны занимать примерно одинаковое количество вертикального пространства, и поэтому вы можете обойтись без этого.
Чтобы реализовать это, вы можете просто использовать a tcolorbox
для выполнения первого этапа печати. Затем вы его разбиваете.
Внутри tcolorbox
вы можете позволить marginnote
и sidenote
подавить @gobble
их функцию. Вы заканчиваете, печатая тот же текст снова.
Для удобства использования вы можете поместить все в Environ.
Вывод выглядит примерно так (изображение немного устарело; я внес некоторые изменения в код, чтобы сделать его более подходящим).