When an index term is written, it is done using a hanging indent. The way hanging indent is implemented is that it indents the whole term, then unindents the first line. If a page break happens during that call to render the index term (typeset_text), then it leaves an indentation on the bounds at the page break. When the new bounds is created for the next page, that indent is not being restored. When the call the render the text completes on the next page, it removes the indent that was never restored on the bounds. As a result, the margin progressively moves to the left.
The solution is to copy the total left and right indent from the current column box to the new column box when a page is advanced in the index.
Note that this issue only arises when media=prepress. That's because only the prepress media changes the page margins at a page break, which is when the column box must be recreated.
When an index term is written, it is done using a hanging indent. The way hanging indent is implemented is that it indents the whole term, then unindents the first line. If a page break happens during that call to render the index term (
typeset_text
), then it leaves an indentation on the bounds at the page break. When the new bounds is created for the next page, that indent is not being restored. When the call the render the text completes on the next page, it removes the indent that was never restored on the bounds. As a result, the margin progressively moves to the left.The solution is to copy the total left and right indent from the current column box to the new column box when a page is advanced in the index.
Note that this issue only arises when media=prepress. That's because only the prepress media changes the page margins at a page break, which is when the column box must be recreated.