단어 변경, 레이아웃 변경 등으로 가득 찬 상자를 제거할 수 없는 경우 기본적으로 상자를 제거하는 두 가지 전략이 있습니다.
- 가치를 높이다
\tolerance
- 가치를 높이다
\emergencystretch
두 번째 전략의 자주 인용되는 장점은 증가가 \emergencystretch
"나쁜" 문단(예: 만족스러운 조판이 불가능한 문단)에만 영향을 미치고 \tolerance
"좋은" 문단(즉, 만족스러운 조판이 가능한 문단 \tolerance
)에는 영향을 미치지 않는다는 것입니다.
반면에 \emergencystretch
줄 바꿈 프로세스를 변경하는 방식은 나에게 적합하지 않은 것 같습니다. \emergencystretch
나쁜 점을 계산할 때 각 줄의 신축성에 추가됩니다. 따라서 증가하면 \emergencystretch
세 번째 패스에서 불량이 줄어들지만 총 단점 계산에 포함된 다른 매개변수( \hyphenpenalty
, \adjdemerits
, \doublehyphendemerits
, ...)는 변경되지 않습니다. 이로 인해 악의 영향이 줄어들고, 하이픈 등으로 끝나는 줄의 영향이 커집니다. 또한 추가 신축성은 공백이 10개인 선과 공백이 4개인 선에 다른 효과를 갖습니다.
(예를 들어 자동 조판에 유용할 수 있다는 것을 알고 있습니다 . 에 따라 충분히 높게 \emergencystretch
설정하면 [입력에 라인보다 넓은 하이픈을 넣을 수 없는 단어와 같은 이상한 것이 포함되지 않는 한] 상자가 너무 꽉 차는 일이 발생하지 않도록 할 수 있기 때문입니다. 또한 지나치게 가득 찬 상자를 생성하지 않지만 끔찍한 줄바꿈 결정으로 이어질 수 있습니다.)\emergencystretch
\hsize
\tolerance=10000
\emergencytolerance
TeX의 줄바꿈 알고리즘이 세 번째 단계에서 허용오차로 사용하는 값을 선택적으로 지정할 수 있는 매개변수(또는 적절한 이름이 무엇이든)가 없는 이유가 궁금합니다 . 그러면 세 번째 패스는 다음과 같이 작동합니다.
\emergencytolerance
기본값이 이라는 매개변수가 있습니다-1
.- 두 번째 패스가 실패하고
\emergencystretch
양수이거나 음수\emergencytolerance
가 아닌 경우 세 번째 패스가 실행됩니다. - 세 번째 패스의 절차는 다음과 같습니다.
\emergencystretch
양수이면 이 값은 불량을 계산할 때 각 라인의 신축성에 추가됩니다. 음수가 아닌 경우\emergencytolerance
이 값은 대신 불량에 대한 제한으로 사용되며\tolerance
, 그렇지 않으면\tolerance
두 번째 패스에서와 같이 사용됩니다.
\emergencystretch
이렇게 하면 상자를 너무 많이 채우지 않고 "좋은" 문단을 변경하지 않고 위에서 설명한 대로 증가하는 단점 없이 "나쁜" 문단을 조판할 수 있습니다 . 적어도 eTeX나 pdfTeX(Knuth의 TeX는 기본적으로 동결되어 있습니다)와 같은 최신 엔진에서는 이 기능(구현하기 쉬움)을 사용할 수 없는 이유는 무엇입니까?
답변1
내 의견에 대한 후속 조치(귀하의 질문에 대한 답변은 아닐 수도 있지만, 사람들이 이 사실을 알면 도움이 될 수 있다고 생각합니다).
David가 댓글에 쓴 것처럼 왜 뭔가가 추가되지 않았는지 대답하는 것은 그리 쉽지 않습니다. LuaTeX가 동결되어 있어서 추가되지 않을 것 같다고 들었는데, 요즘에는 LuaMetaTeX에서 가능하다는 정보를 통해 느끼셨으면 좋겠습니다.
설명에 표시된 대로 허용 오차를 늘리는 것보다 훨씬 더 많은 작업을 수행하는 것이 가능합니다. 그러나 아래의 최소 예에서는 허용 오차가 증가하면서 두 개의 구문 분석만 추가합니다.
\setuppapersize[A6]
\showmakeup[page]
\startsetups align:pass:test
\pretolerance 100
\tolerance 200
\parpasses 2
threshold 0.025pt
tolerance 400
next
threshold 0.025pt
tolerance 800
\relax
\stopsetups
\starttext
\samplefile{hawking}
\page[yes]
\setupalignpass[test]
% \tracingonline2
% \tracingpasses2
\samplefile{hawking}
\stoptext
두 페이지를 나란히:
추적 매크로의 주석 처리를 제거하면 터미널에 추가 정보가 표시됩니다.
그건 그렇고, 이것은 런타임에 거의 아무것도 추가하지 않습니다. 300페이지 분량의 책에서는 4개의 추가 패스(확장 포함)가 1초도 안 되어 추가된 것 같습니다. (그래서 이것은 실제로 TeX가 시간을 보내는 곳이 아닙니다...)