полная финальная строка + примечание = ложная пустая строка

полная финальная строка + примечание = ложная пустая строка

Время от времени в большой книге я получаю ложную пустую строку между абзацами. Общим фактором, похоже, является то, что абзац довольно точно заполняет свою последнюю строку, и за ним следуют некоторые инструкции, связанные с концевыми сносками/сносками.

Мой MWE немного толстый, потому что это сложное поведение для воспроизведения; изменение всего, что меняет точную компоновку, похоже, заставляет проблему исчезнуть. Вот мой код latex (он сгенерирован XSLT и не предназначен для чтения людьми, а затем был вручную немного порезан, чтобы уменьшить размер, извините):

\documentclass[11pt]{memoir}
%%
\setstocksize{11in}{8.5in}%
\settrimmedsize{9.25in}{6.125in}{*}%
    \setlength{\trimtop}{\stockheight}            %
    \addtolength{\trimtop}{-\paperheight}         %
    \setlength{\trimedge}{\stockwidth}            %
    \addtolength{\trimedge}{-\paperwidth}         %
\settrims{0.875in}{1.1875in}                      %
\settypeblocksize{8.0in}{4.8in}{*}                %
\setbinding{0in}                                  %
\setlrmargins{0.8in}{*}{*}                        %
\setulmargins{0.75in}{*}{*}                       %
\setheadfoot{\onelineskip}{\footskip}             %
\setheaderspaces{*}{.3in}{*}                      %
\checkandfixthelayout                             %
\showtrimson%
%%
\usepackage[utf8]{inputenc}
\usepackage[american]{babel}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{mathptmx}
\usepackage{helvet}
\usepackage{courier}
\usepackage[style=alphabetic,backend=biber,backref=true]{biblatex}
\usepackage{color}
\usepackage{graphicx}
\usepackage{hyphenat}
\usepackage[strict=true]{csquotes}
\usepackage{url}
\usepackage{ellipsis}
\usepackage{refcount}
\usepackage[debug=true,colorlinks=true,pdftex,draft=false,bookmarks,bookmarksopen,pdfpagelabels]{hyperref}
\usepackage[toc]{glossaries}
\makeindex

\makepagenote

\begin{document}%
\frontmatter%
\mainmatter
     \chapter{Ricercar}
 \label{id265899}\setlength{\epigraphwidth}{.6\linewidth}\setlength{\epigraphrule}{0pt}\epigraph{
It is unbelievable how much you don't know{\itshape } about the game you've
been playing all your life. }{\textit{---Mickey Mantle}}\setcounter{pagenote}{0}\pagenote[id265899]{{\itshape 
It is unbelievable how much you don't know}: \cite[p.\ 42]{b:QualityOfCourage}}%%
  %
\par
A man is sitting at a desk and typing.
He is writing in a language that no one on earth speaks.
Without long hours of study,
even someone who understood the language would be hard
pressed to read his work and understand his precise intent.
Sometimes, he stops and thinks, or draws pictures on
a piece of paper or whiteboard, or stops to sleep, eat, or
meet with others, but he always returns to typing.
Hours turn into days, days into weeks,
weeks into months, and perhaps even months into
years before the man stands up and declares he is \enquote{done.}%
\par
Done with what?
What has he created?%
\par
What he has created is a computer program,
but that explains little about what it is or even where
it exists.
At the physical level,
a computer program is usually a microscopic pattern of either electricity or
magnetism.
It may flow as whirling fields of electromagnetism from one form into another,
and be endlessly duplicated and replicated across many different
machines.
It often exists in a great many places---indeed, it only
really ceases to exist if all those copies are tracked down and obliterated
(and modern programmers generally keep an astounding number of copies of each program).%
\par
What, then, is computer programming, really?
Computer programming can be described in a number of ways,
but I will give you a factually accurate description of the
profession that you have not heard before: \begin{quote}\textbf{Computer programming is the act of designing complex patterns
of energy that affect the world.}\end{quote} I chose the two clauses in that definition carefully.
Although there are other professions that produce patterns
of energy (such as broadcasting electromagnetic FM waves),
they are not acts of designed energy like computer programming,
where every ultra-microscopic electric, magnetic, or chemical state is a result of human decision. \label{id265852}The composer Edgard Var\`{e}se declared that \label{id265846}\enquote{Music is organized sound.} and I am making an analogous declaration: software is organized energy. \label{id265842}\setcounter{pagenote}{0}\pagenote[id265852]{{\itshape The composer Edgard Var\`{e}se declared that \enquote{Music is organized sound.}}: \protect \cite[]{j:OrganizedSound}.
    And though an infinite amount of music can be composed
    with a twelve-note scale,
    software has reduced this to the logical extreme,
    generating its infinite variations from only two notes.
    Var\`{e}se also said that \enquote{Our musical alphabet is poor and illogical} \protect \cite[]{b:ClassicEssaysMusic},
    which is perhaps also analogous to the situation with software,
    or maybe the mere longing of all creators for better tools.}\ignorespaces %%
 And though much software operates nearly invisibly,
software affects the world in increasingly direct ways;%
\footnote{\label{FN:id265788}\label{FN:id265811}Turing Award winner Butler Lampson asserts the three historical phases of computers to date are:
    modeling the world, connecting people, and engaging with the physical world.
    The progression of these phases represents increasingly direct effects on the world.}
even in the early days when software might produce merely a
number that a human would read,
some of those numbers helped create the first atomic bomb,
so the size of software's effect on the world cannot be inferred
from how directly the software manipulates the world.
% removing the following line eliminates the unwanted empty line between paragraphs.
\setcounterref{pagenote}{FN:id265788}\pagenote[FN:id265811]{{\itshape Turing Award winner Butler Lampson asserts the three historical phases of computers}: \cite[]{c:WhatComputersDo}}
\par
\label{id265810}Born quite accidentally from the most obscure and useless mathematics, computers have turned that uselessness on its head; 
 \label{id265743}if mathematics is an art, \label{id265733}\setcounter{pagenote}{0}\pagenote[id265743]{{\itshape if mathematics is an art}: A position argued most passionately by
    Paul Lockhart as a primary factor dooming
    the teaching of mathematics in the United States. \protect \cite[]{w:MathematiciansLament}}\ignorespaces %%
 \label{id265730}then computer programming is the surprising
translation of art into action.%
\footnote{\label{FN:id265710}Robert Tarjan (another Turing Award winner) chose
computer science over mathematics as a graduate student
because he saw it as \label{FN:id265706}\enquote{a way to do mathematics and see it actually perform in practice.}} \label{id265726}\setcounter{pagenote}{0}\pagenote[id265730]{{\itshape then computer programming is the surprising
translation of art into action.}: made more surprising by its suddenness. \enquote{\textup{[\kern-.05pt...\kern-.2pt]}\xspace{}
        the modern notion of computation emerged remarkably suddenly,
        and in a most complete form,
        in a single paper published by Alan Turing in 1936.} \protect \cite[p.\ 3]{b:ProbablyApproximatelyCorrect}}\ignorespaces %%
  Mathematics has been called \label{id265702}\enquote{the science of patterns,}\setcounter{pagenote}{0}\pagenote[id265702]{{\itshape \enquote{the science of patterns,}}: \cite[p.\ 7]{b:MathGene}} and that intersects with my own definition of
computer programming in the word \label{id265696}\enquote{patterns.} This is correct, since patterns are the common ground shared by
mathematics (on the more descriptive side) and programming \label{id265692}(on the decidedly prescriptive side). \label{id265661}\setcounter{pagenote}{0}\pagenote[id265692]{{\itshape (on the decidedly prescriptive side)}: I use here the definition of \enquote{prescribe} that is
    synonymous with \enquote{stipulate} or \enquote{dictate.}}\ignorespaces %%
\setcounterref{pagenote}{FN:id265710}\pagenote[FN:id265706]{{\itshape\enquote{a way to do mathematics and see it actually perform in practice.}}: \cite[]{v:AlgorithmicViewUniverse}}%
      \end{document}

Точная суть нежелательного поведения заключается в этих строках:

from how directly the software manipulates the world.
% removing the following line eliminates the unwanted empty line between paragraphs.
\setcounterref{pagenote}{FN:id265788}\pagenote[FN:id265811]{{\itshape Turing Award winner Butler Lampson asserts the three historical phases of computers}: \cite[]{c:WhatComputersDo}}
\par

И нежелательная пустая строка в итоге выглядит так (это справедливо даже если я включу настоящую библиографию и выполню множество проходов, чтобы «действительно» построить полную книгу): введите описание изображения здесь Я использую Tex Live 2017 и ввожу «pdflatex book.tex», чтобы получить вывод.

This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2017.7.12)

Я могу подкрутить много мелочей, чтобы проблема исчезла, но мне не хочется постоянно проверять весь документ, чтобы увидеть, не появилась ли проблема где-то в новом месте. И поскольку мой LaTeX сгенерирован машиной, мне бы очень хотелось на самом деле понять проблему и просто не генерировать код, который ее создает, если это возможно. Однако после долгих манипуляций я в тупике и не могу понять, что вызывает проблему.

решение1

Брать:

from how directly the software manipulates the world.
\setcounterref{pagenote}{FN:id265788}\pagenote[FN:id265811]{{\itshape Turing 
Award winner Butler Lampson asserts the three historical phases of computers}: 
\cite[]{c:WhatComputersDo}}
\par

На каждой новой строке LaTeX видит пробел. Особенно пробел между первой и второй строкой. Инструкции после этого должны записываться в aux-файл, поэтому они вставляют узел "whatsit". Таким образом, пробел в конце первой строки является "отбрасываемым" и будет отброшен в конце абзаца, но за ним следует неотбрасываемый "whatsit", поэтому его нельзя отбросить. Это приводит к пробелу в конце абзаца, который TeX иногда использует в качестве точки останова. (Для получения дополнительной информации см. TeXbook после упражнения 14.12)

Этого можно избежать, не добавляя этот пробел, поэтому всякий раз, когда за текстом следуют строки с \pagenote, добавляйте a %в конце строки.

В данном примере это будет

from how directly the software manipulates the world.%
\setcounterref{pagenote}{FN:id265788}\pagenote[FN:id265811]{{\itshape Turing 
Award winner Butler Lampson asserts the three historical phases of computers}: 
\cite[]{c:WhatComputersDo}}
\par

Связанный контент