разрушаемый tcolorbox с пустым/скрытым внутренним пространством и непустой рамкой

разрушаемый tcolorbox с пустым/скрытым внутренним пространством и непустой рамкой

Я хотел бы определить разрываемый tcolorbox, внутренняя часть которого не содержит цвета или другого кода рисования, поэтому отображает любой цвет, находящийся за ним.tcolorboxв skinsбиблиотеке есть опции interior emptyи interior hidden, которые управляют прорисовкой внутренней части, хотя я с трудом понимаю взаимодействие между этими клавишами и соответствующими frame emptyи frame hidden. Я ожидал, что первые клавиши напечатают рамку, окружающую содержимое коробки, без каких-либо действий с внутренней частью, но вместо этого коробка напечатана с темно-серым фоном.

Отэтот ответ, я вижу, что мы можем обойти это, установив оба frame emptyи interior emptyзатем нарисовав рамку с помощью borderline. Это работает для целостных ящиков, но если ящик сломан, то, похоже, клавиши frame emptyи interior emptyигнорируются, и вступают в силу значения по умолчанию tcolorbox.

\documentclass{article}

\usepackage[skins,breakable]{tcolorbox}
\usepackage{kantlipsum}

\pagecolor{yellow!10}

\tcbset{enhanced}

\begin{document}

\begin{tcolorbox}[
  interior empty
  ]
This is a \textbf{tcolorbox}.
\end{tcolorbox}

\begin{tcolorbox}[
  interior empty,
  frame empty % don't want hidden frame
  ]
This is a \textbf{tcolorbox}.
\end{tcolorbox}

\begin{tcolorbox}[
  interior hidden
  ]
This is a \textbf{tcolorbox}.
\end{tcolorbox}

\begin{tcolorbox}[
  interior hidden,
  frame hidden, % don't want hidden frame
  ]
This is a \textbf{tcolorbox}.
\end{tcolorbox}

\begin{tcolorbox}[
  frame empty,
  interior empty,
  borderline={1pt}{0pt}{},
]
This is a \textbf{tcolorbox}.
\end{tcolorbox}

\begin{tcolorbox}[
  breakable,
  frame empty,
  interior empty,
  borderline={1pt}{0pt}{},
]
This is a \textbf{tcolorbox}.
\kant[1-3]
\end{tcolorbox}
\end{document}

tcbox

Я, возможно, не понимаю, что на самом деле подразумевается под «рамкой» и «внутренней частью», но есть ли способ сделать разрушаемый tcolorbox с пустой внутренней частью?

Редактировать

Как указывает samcarter_is_at_topanswers.xyz в комментариях, "рамка" — это закрашенный прямоугольник за полем, а не линия, нарисованная вокруг него. Это объясняет вывод с interior emptyи interior hidden.

Я также обнаружил, что это breakableне очень хорошо взаимодействует с frame emptyи interior emptyв целом:

\begin{tcolorbox}[
  breakable,
  interior empty,
  frame empty
  ]
This is a \textbf{tcolorbox}.
\kant[1-5]
\end{tcolorbox}

Это сбрасывает настройки рамы и интерьера по умолчанию в случае поломки.

Для контекста я пытаюсь адаптироватьэтот ответдля эмуляцииthmboxс tcolorbox для использования цвета фона страницы, а не предустановленного цвета фона white, поскольку это поведение thmbox.

решение1

Оказывается, ответ — читать документы :)

Обычно движок рамы заполняет всю область коробки цветом, а другие движки заполняют определенные области другими цветами. [...] Для некоторых коробок требуется более тонкая процедура. Например, если коробка должна быть полупрозрачной, уже окрашенную область нельзя сделать неокрашенной. Поэтому более сложные движки рамы выпиливают отверстия в раме, где внутренняя область и, по желанию, область заголовка будут окрашены. Полученные оболочки называются оболочками-мозаиками.

Итак, нужно просто использовать Jigsaw Box:

\documentclass{article}
\usepackage{xcolor}
\usepackage{pagecolor}
\pagecolor{yellow}
\usepackage[most]{tcolorbox}
\usepackage{kantlipsum}

\begin{document}

\begin{tcolorbox}[
  enhanced jigsaw,
  breakable,
  opacityback=0,
]
This is a \textbf{tcolorbox}.
\kant[1-5]
\end{tcolorbox}

\end{document}

введите описание изображения здесь

решение2

Вместо того, чтобы сделать tcolorbox прозрачным, вы можете сделать егосмотретьпрозрачным, окрасив его в тот же цвет, что и страница:

\documentclass{article}
\usepackage{xcolor}
\usepackage[skins,breakable]{tcolorbox}
\usepackage{kantlipsum}
\usepackage{pagecolor}

\pagecolor{yellow}

\tcbset{enhanced}

\begin{document}

\begin{tcolorbox}[
  breakable,
  colback=\thepagecolor
]
This is a \textbf{tcolorbox}.
\kant[1-5]
\end{tcolorbox}


\end{document}

введите описание изображения здесь

решение3

Хотя frame emptyи interior emptyне работают так, как ожидается, если заданы с breakable, они работают, если заданы с extraskey. Таким образом, мы можем подделать фрейм с borderline.

\documentclass{article}

\usepackage[skins,breakable]{tcolorbox}
\usepackage{kantlipsum}

\pagecolor{yellow!10}

\begin{document}

\begin{tcolorbox}[
  breakable,
  extras={frame empty,interior empty},
  borderline={1pt}{0pt}{}
  ]
This is a \textbf{tcolorbox}.
\kant[1-5]
\end{tcolorbox}

\end{document}

бьющаяся коробка

решение4

Для контекста я пытаюсь адаптироватьэтот ответдля эмуляцииthmboxс tcolorbox для использования цвета фона страницы, а не предустановленного цвета фона white, поскольку это поведение thmbox.

Кажется, тебе нужно

\tcbset{
    thmbox/.style={
        % ...
        % colback=white,
        % colframe=white,
        % colbacktitle=white,
        %% in order to imitate effect of "enhanced jigsaw, boxrule=0pt"
        frame engine=empty,
        interior titled engine=empty,
        interior engine=empty,
        extras broken={
          frame engine=empty,
          interior titled engine=empty,
          interior engine=empty
        },
        % ...
    }
}

введите описание изображения здесь

Полный пример, основанный на ссылке@Ignasi's ответ:

\documentclass{article}
\usepackage{amssymb}
\usepackage{lipsum}
\usepackage{tcolorbox}
\tcbuselibrary{breakable, skins, theorems}

\pagecolor{yellow!10}

\tcbset{
    thmbox/.style={
        breakable,
        enhanced,
        sharp corners=all,
        fonttitle=\bfseries\normalsize,
        fontupper=\normalsize\itshape,
        top=0mm,
        bottom=0mm,
        right=0mm,
        % colback=white,
        % colframe=white,
        % colbacktitle=white,
        %% in order to imitate effect of "enhanced jigsaw, boxrule=0pt".
        %% or put the following three lines in "extras unbroken={...}"
        frame engine=empty,
        interior titled engine=empty,
        %% every theorem has a title, so this is just for completeness
        interior engine=empty,
        extras broken={
          frame engine=empty,
          interior titled engine=empty,
          interior engine=empty
        },
        coltitle=black,
        attach boxed title to top left,
        boxed title style={empty, size=minimal, bottom=1.5mm},
        overlay unbroken ={
            \draw (title.south west)--(title.south east);
            \draw ([xshift=3.5mm]frame.north west)|-%
                  (frame.south east)--(frame.north east);},
        overlay first={
            \draw (title.south west)--(title.south east); 
            \draw ([xshift=3.5mm]frame.north west)--([xshift=3.5mm]frame.south west);
            \draw (frame.north east)--(frame.south east);},
        overlay middle={
            \draw ([xshift=3.5mm]frame.north west)--([xshift=3.5mm]frame.south west);
            \draw (frame.north east)--(frame.south east);},
        overlay last={
            \draw ([xshift=3.5mm]frame.north west)|-%
                  (frame.south east)--(frame.north east);},
        },
    S/.style={thmbox, 
        overlay unbroken ={
            \draw (title.south west)--(title.south east);
            \draw ([xshift=3.5mm]frame.north west)--([xshift=3.5mm]frame.south west);},
        overlay first={
            \draw (title.south west)--(title.south east); 
            \draw ([xshift=3.5mm]frame.north west)--([xshift=3.5mm]frame.south west);},
        overlay middle={
            \draw ([xshift=3.5mm]frame.north west)--([xshift=3.5mm]frame.south west);},
        overlay last={
            \draw ([xshift=3.5mm]frame.north west)--([xshift=3.5mm]frame.south west);},
        },
    L/.style={thmbox, 
        overlay unbroken ={
            \draw (title.south west)--(title.south east);
            \draw ([xshift=3.5mm]frame.north west)|-([xshift=15mm]frame.south west);},
        overlay first={
            \draw (title.south west)--(title.south east); 
            \draw ([xshift=3.5mm]frame.north west)--([xshift=3.5mm]frame.south west);},
        overlay middle={
            \draw ([xshift=3.5mm]frame.north west)--([xshift=3.5mm]frame.south west);},
        overlay last={
            \draw ([xshift=3.5mm]frame.north west)|-([xshift=15mm]frame.south west);},
        },
    LQ/.style={thmbox, 
        overlay unbroken ={
            \draw (title.south west)--(title.south east);
            \draw ([xshift=3.5mm]frame.north west)|-([xshift=15mm]frame.south west);
            \node[anchor=east] at (frame.south east) {$\square$};},
        overlay first={
            \draw (title.south west)--(title.south east); 
            \draw ([xshift=3.5mm]frame.north west)--([xshift=3.5mm]frame.south west);},
        overlay middle={
            \draw ([xshift=3.5mm]frame.north west)--([xshift=3.5mm]frame.south west);},
        overlay last={
            \draw ([xshift=3.5mm]frame.north west)|-([xshift=15mm]frame.south west);
            \node[anchor=east] at (frame.south east) {$\square$};},
    },  
}

\newtcbtheorem[]{tcbthmbox}{Theorem}{thmbox}{theo}
\newtcbtheorem[]{tcbSthmbox}{Theorem}{thmbox,S}{theo}
\newtcbtheorem[]{tcbLthmbox}{Theorem}{thmbox,L}{theo}
\newtcbtheorem[]{proof}{Démonstration}{thmbox,LQ}{theo}

\begin{document}

\begin{tcbthmbox}{First result}{}
\lipsum[3]
\end{tcbthmbox}

\begin{tcbSthmbox}{Important}{}
\lipsum[2]
\end{tcbSthmbox}

\begin{tcbLthmbox}{Final}{}
\lipsum[1]
\end{tcbLthmbox}

\begin{proof}{Proof}{}
\lipsum[1]
\end{proof}
\end{document}

Связанный контент