회고록에 \linenottooshort가 있는 이상한 결함

회고록에 \linenottooshort가 있는 이상한 결함

memoir 문서 8.4.1장에 따르면 \linenottooshort 명령은 문단의 마지막 줄이 선택 길이(기본값 2em)보다 짧지 않도록 보장한다고 되어 있습니다. 따라서 이 명령이 마지막 줄이 짧은 단락 수를 줄이는 데 도움이 될 것으로 기대합니다.

그러나 첫 번째 MWE(\linenottooshort 없음)는 아래 그림의 왼쪽에 결과를 제공하는 반면, 두 번째 MWE(\linenottooshort 포함)는 오른쪽에 결과를 제공합니다. 이는 짧은 마지막 줄에 비해 분명히 더 나쁩니다.

나는 오른쪽 예제의 마지막 줄에 있는 텍스트가 2em보다 짧지 않을 것이라고 추측합니다. 하지만 확실히 \linenottooshort가 그것이 없는 것보다 문단을 더 나쁘게 만들어서는 안 될까요? 여기서 무슨 일이 일어나고 있는 걸까요?

왼쪽:

\documentclass[11pt]{memoir}
\setlength{\textwidth}{120mm}
\setlength{\parindent}{0mm}
\usepackage{blindtext}

\begin{document}
\blindtext
\end{document}

오른쪽:

\documentclass[11pt]{memoir}
\setlength{\textwidth}{120mm}
\setlength{\parindent}{0mm}
\usepackage{blindtext}

\linenottooshort

\begin{document}
\blindtext
\end{document}

이전과 이후

답변1

의 위치가 잘못되었습니다. 의 위치가 아직 페이지 크기를 구현하지 않았기 때문에 \linenottooshort뒤에 와야 합니다 .\begin{document}memoir

\@tempdima어쨌든 이 명령은 예고 없이 값이 바뀔 수 있는 를 스크래치 길이 레지스터로 잘못 설정했기 때문에 또 다른 이상한 결과를 낳을 수밖에 없습니다 .

서문에서 \@tempdimaafter done 의 값을 보면 325.19989pt를 얻습니다. 환경 \linenottooshort에서 수행되면 document값은 297.63295pt가 됩니다.

올바른 정의는 다음과 같습니다.

\documentclass[11pt]{memoir}
\setlength{\textwidth}{120mm}
\setlength{\parindent}{0mm}
\usepackage{blindtext}

\makeatletter
\renewcommand*{\linenottooshort}[1][4em]{%
  \@tempdima=\hsize
  \advance\@tempdima -#1\relax
  %\leftskip\z@skip    % ???
  %\rightskip\leftskip % ???
  \begingroup\edef\x{\endgroup
    \parfillskip=\the\@tempdima \@minus \the\@tempdima\relax
  }\x
}
\makeatother

\AtBeginDocument{\linenottooshort}

\begin{document}

\blindtext

\end{document}

minipage이로 인해 , \parbox또는 목록 에서 이상한 결과가 나타날 수 있으므로 주의하세요 . 그 유용성에 대해서는 잘 모르겠습니다.

관련 정보