환경에서 길이 설정 문제(환경 외부로 유출)

환경에서 길이 설정 문제(환경 외부로 유출)

내 문서의 단락 사이에 간격이 있는데 내가 정의한 사용자 정의 환경을 추적할 수 있었던 것 같습니다.

\makeatletter
\def\remarkname{Remark}
\newcounter{counter@myremarks}
\newenvironment{remark}{\par\vspace{0.2cm}\par\noindent\begingroup\small%
  \addtocounter{counter@myremarks}{1}%
  \textbf{\remarkname~\arabic{counter@myremarks}.}~~\ignorespacesandallpars}{%
  \endgroup\par\vspace{0.2cm}\par\@afterindentfalse\@afterheading}
\newenvironment{remark*}{\par\vspace{0.2cm}\par\noindent\begingroup\small%
  \textbf{\remarkname.}~~\ignorespacesandallpars}{%
  \endgroup\par\vspace{0.2cm}\par\@afterindentfalse\@afterheading}
\makeatother

명령 은 \ignorespacesandallparsMartin Scharrer가 작성했으며 다음에서 유래했습니다.이전 StackExchange 질문.

(나는 이런 종류의 환경을 얻기 위해 패키지나 amsmath의 정의와 같은 다른 많은 방법이 있다는 것을 알고 있지만 아직 완전히 만족스러운 것을 찾지 못했고 지금은 다음을 사용하는 것이 더 쉽습니다. 사용자 정의.)

이 정의를 사용한 후에 간격이 약간 이상하고 추가 \smallskip 또는 \medskip 명령이 필요하다는 것을 알았습니다. 내가 뭘 잘못하고 있는지 궁금합니다.

내 문제가 다른 곳에 있는 걸까요, 아니면 여기서 뭔가 잘못하고 있는 걸까요?

업데이트:다음 스니펫은 문제 중 하나를 보여줍니다(두 번째 항목별 목록 앞의 간격이 첫 번째 항목과 동일하지 않음).

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

\documentclass{article}

\makeatletter
\def\ignorespacesandallpars{%
  \begingroup
  \catcode13=10
  \@ifnextchar\par
    {\endgroup\expandafter\ignorespacesandallpars\@gobble}%
    {\endgroup}%
}
\def\remarkname{Remark}
\newenvironment{remark*}{\par\vspace{0.2cm}\par\noindent\begingroup\small%
  \textbf{\remarkname.}~~\ignorespacesandallpars}{%
  \endgroup\par\vspace{0.2cm}\par\@afterindentfalse\@afterheading}
\makeatother

\begin{document}

Following is an item list
\begin{itemize}
\item One
\item ...
\end{itemize}

\begin{remark*}
  Now a remark.
\end{remark*}

And another item list
\begin{itemize}
\item One
\item ...
\end{itemize}

\end{document}

답변1

이것이 \@afterheading섹션화 명령을 그룹으로 사용해서는 안 되는 이유 중 하나입니다 ;-)

그것은 전체적으로 설정 \@nobreaktrue되고장소 상에서\everypar취소하도록 설정합니다 . 따라서 환경이 종료된 후( \everypar설정 취소) \@nobreaktrue다음 목록에서 이를 포착할 때까지 기다리게 됩니다.

그리고 \@nobreak목록을 삽입하지 않게 만듭니다 \topsep...

\@afterheading이러한 혼란을 피하려면 환경 외부에서 호출되는지 확인해야 합니다 .

정의에서 다음 \@afterheading으로 바꾸면 환경에서 정의된 그룹 외부로 이동하고 다시 나타납니다.\aftergroup\@afterheading\@afterheading\topsep

관련 정보