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
어쨌든 이 명령은 예고 없이 값이 바뀔 수 있는 를 스크래치 길이 레지스터로 잘못 설정했기 때문에 또 다른 이상한 결과를 낳을 수밖에 없습니다 .
서문에서 \@tempdima
after 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
또는 목록 에서 이상한 결과가 나타날 수 있으므로 주의하세요 . 그 유용성에 대해서는 잘 모르겠습니다.