MWE

MWE

에 대한 후속 질문입니다.tcolorbox 상단의 들여쓰기 및 세로 공간 제어.

@egreg는 원래 문제에 대한 훌륭한 솔루션을 제공했지만 특정 환경(아마도 a 기반의 모든 환경 trivlist) 이 tcolorbox. 첫 번째 환경 위의 간격이 누락되었습니다.

이러한 환경이 올바른 간격으로 배치되도록 @egreg의 답변을 어떻게 조정합니까?

MWE

\documentclass{article}

\usepackage{tcolorbox}

\tcbset{mybox/.style={colback=white, colframe=blue, left=2mm, right=2mm,
  fonttitle=\bfseries}, fontupper=\small,
  before upper=\setlength{\parindent}{1em}\everypar{{\setbox0\lastbox}\everypar{}},
}

\newtcolorbox{mybox}[1][]{mybox,#1}

\begin{document}
\begin{mybox}
  This line should not be indented.

  This line should be indented.

  \begin{center}
    This line should be centred. The spacing above is wrong.
  \end{center}

  This line should be indented.

  \begin{center}
    This line should be centred. The spacing above is right.
  \end{center}

  This line should be indented.
\end{mybox}

\begin{mybox}
  \section{Should not have gap above this heading}
\end{mybox}
\end{document}

MWE 출력

답변1

내부 center환경에서 세로 공간이 누락된 이유는 앞에 빈 줄을 남겨둘 때 원하는 공간을 삽입하기 위해 가 \@item사용 하고 세로 모드에서는 이 공간을 추가하지 않기 때문입니다 . 이는 사실입니다. 이는 내부 환경의 경우입니다 . 따라서 이 공백을 삽입하려면 의 옵션 에서 설정하면 됩니다 .\addvspace\@topsep\begin{center}\addvspace\if@minipagemybox\@minipagefalsebefore uppertcolorbox

두 상자 사이의 수직 간격은 본질적으로 기본값 때문입니다 (매뉴얼 의 /tcb/noparskip문서 참조 ). 을 설정하면 추가된 항목이 제거됩니다 ./tcb/autoparskiptcolorboxbefore=\par\noindent\smallskip

\documentclass{article}
\usepackage{tcolorbox}

\makeatletter

\tcbset{mybox/.style={colback=white, colframe=blue, left=2mm, right=2mm,
  fonttitle=\bfseries}, fontupper=\small,
  before upper={\setlength{\parindent}{1em}%
                \everypar{{\setbox0\lastbox}\@minipagefalse\everypar{}}},
  before=\par\noindent, after=\par
}

\makeatother

\newtcolorbox{mybox}[1][]{mybox,#1}

\begin{document}
\begin{mybox}
  This line should not be indented.

  This line should be indented.

  \begin{center}
    This line should be centered. The spacing above is correct.
  \end{center}

  This line should be indented.

  \begin{center}
    This line should be centered. The spacing above is right.
  \end{center}

  This line should be indented.
\end{mybox}

\begin{mybox}
  \section{Should not have gap above this heading}
\end{mybox}
\end{document}

스크린샷

정말로 없애고 싶다면모든 격차, 기본 수직 목록에 추가된 관심 있는 두 상자 사이의 모든 수직 연결을 억제합니다. 다음을 설정했기 \nointerlineskip때문에 세로 모드에서 올바르게 사용되는 를 사용하여 이 작업을 수행할 수 있습니다 .after=\par

\documentclass{article}
\usepackage{tcolorbox}

\makeatletter

\tcbset{mybox/.style={colback=white, colframe=blue, left=2mm, right=2mm,
  fonttitle=\bfseries}, fontupper=\small,
  before upper={\setlength{\parindent}{1em}%
                \everypar{{\setbox0\lastbox}\@minipagefalse\everypar{}}},
  before=\par\noindent, after=\par
}

\makeatother

\newtcolorbox{mybox}[1][]{mybox,#1}

\begin{document}
\begin{mybox}
  This line should not be indented.

  This line should be indented.

  \begin{center}
    This line should be centered. The spacing above is correct.
  \end{center}

  This line should be indented.

  \begin{center}
    This line should be centered. The spacing above is right.
  \end{center}

  This line should be indented.
\end{mybox}
\nointerlineskip
\begin{mybox}
  \section{Should not have gap above this heading}
\end{mybox}
\end{document}

여기에 이미지 설명을 입력하세요

참고: 환경 으로 시작하는 경우 상자 내부에 추가 수직 공간이 생기지 않도록 \@minipagefalse내부를 임시 로 설정했습니다 . 하지만 다음과 같이 의 시작 부분에 직접 설정하면 :\everyparcenterbefore upper

\tcbset{mybox/.style={colback=white, colframe=blue, left=2mm, right=2mm,
  fonttitle=\bfseries}, fontupper=\small,
  before upper={\@minipagefalse\setlength{\parindent}{1em}%
                \everypar{{\setbox0\lastbox}\everypar{}}},
  before=\par\noindent, after=\par
}

환경 으로 상자를 시작하십시오 center.

\begin{mybox}
  \begin{center}
    This line should be centered. The spacing above is correct.
  \end{center}

  This line should be indented.

  \begin{center}
    This line should be centered. The spacing above is correct.
  \end{center}
...
\end{mybox}

다음과 같이 상자 상단에 추가 공간이 생깁니다.

여기에 이미지 설명을 입력하세요

관련 정보