TeX의 \write 명령은 때때로 가짜 수직 공간을 유발합니다.

TeX의 \write 명령은 때때로 가짜 수직 공간을 유발합니다.

FiXme(Lars Madsen이 보고) 문제를 디버깅하는 과정에서 이 문제에 직면하게 되었는데, 이는 내 전문 지식을 넘어서는 문제입니다. 다음 MWE를 고려하십시오.

\documentclass{memoir}
\usepackage{amsmath,amsthm}
\newtheorem{theorem}{Theorem}

\begin{document}
\begin{theorem}
  Theorem
  \begin{equation*}
    Equation
  \end{equation*}
  \makeatletter\write\@auxout{\string\relax}\makeatother % spurious vspace
\end{theorem}
\begin{proof}
  Proof
\end{proof}

\end{document}

호출은 \write문서에 가짜 수직 공간을 생성합니다(이 줄에 주석을 달거나 차이점을 확인하기 위해 아무 작업도 수행하지 않는 매크로를 호출합니다). 나는 무슨 일이 일어나고 있는지, 그리고 이것이 어딘가(정리 환경에서?) 버그로 간주되어야 하는지 여부를 알고 싶습니다.

감사합니다!

답변1

증명/정리 등과 같은 표시 환경 및 섹션 제목은 이 명령을 사용하여 표시되는 텍스트 앞뒤에 공백을 추가합니다. \addvspace수직 목록에 공백이 방금 추가되었는지 확인하고, 그렇다면 기존 공백이 있으면 새 공백을 추가하지 마십시오. 보다 큰. 이는 두 개의 인접한 정리가 하나의 끝과 다른 정리의 시작을 형성하는 이중 공백을 갖지 않는다는 것을 의미합니다. (기본 디스플레이 수학의 동작은 기본적으로 유사합니다)

Whatsit from \write(또는 \color유사한 문제가 있음)은 이전 공간을 볼 수 없다는 것을 의미하므로 이후 환경은 항상 시작 시 전체 요청 공간을 추가합니다.

거기에 내용을 추가하지 않는 것 외에는 할 수 있는 일이 많지 않습니다. 예를 들어 Proof에서 P 뒤에 추가했다면 괜찮을 것입니다.

expl3 xgalley코드는 이 문제를 해결하지만 대규모로 침입하므로 트랩해야 합니다.모든수직 모드에서 무엇이든 추가하려고 하는 명령으로 작업을 지연시키고 모든 간격이 합쳐질 수 있도록 순서를 변경합니다.

관련 정보