5

in order to provides new feature in eledpar, I would like to output somes notes only on odd page. I have a problem, as you could see with the following MWE

I have modified the output routine to add a test

\documentclass{article}
\usepackage{blindtext}
\makeatletter
\gdef \@makecol {%
   \ifvoid\footins
     \setbox\@outputbox \box\@cclv
   \else
     \setbox\@outputbox \vbox {%
       \boxmaxdepth \@maxdepth
       \unvbox \@cclv
        \ifodd\c@page%
           \vskip \skip\footins
           \color@begingroup
           \normalcolor
           \footnoterule%
           \unvbox \footins
       \color@endgroup
       \fi%
       }%
   \fi
   \let\@elt\relax
   \xdef\@freelist{\@freelist\@midlist}%
   \global \let \@midlist \@empty
   \@combinefloats
   \ifvbox\@kludgeins
     \@makespecialcolbox
   \else
     \setbox\@outputbox \vbox to\@colht {%
       \@texttop
       \dimen@ \dp\@outputbox
       \unvbox \@outputbox
       \vskip -\dimen@
       \@textbottom
       }%
   \fi
   \global \maxdepth \@maxdepth
}

\makeatother

\begin{document}
 \blindtext Before\footnote{\blindtext[13]
\textbf{2}}\blindtext[10]

After
even more After

\end{document}

So : if we are in odd page, output the notes, if note, don't do it.

In the real example, I play with the counter linked to the insert to prevent goal problem. Thats work.

Unfortunatly, as you can say on p. 3, the last line of notes is too close of the previous. Any idea?

If we use the box in even page, the problem is solved, as we can see in the MWE

\documentclass{article}
\usepackage{blindtext}
\makeatletter
\gdef \@makecol {%
   \ifvoid\footins
     \setbox\@outputbox \box\@cclv
   \else
     \setbox\@outputbox \vbox {%
       \boxmaxdepth \@maxdepth
       \unvbox \@cclv
        \ifodd\c@page%
           \vskip \skip\footins
           \color@begingroup
           \normalcolor
           \footnoterule%
           \unvbox \footins
       \color@endgroup
       \else
         \global\setbox0=\box\footins
       \fi%
       }%
   \fi
   \let\@elt\relax
   \xdef\@freelist{\@freelist\@midlist}%
   \global \let \@midlist \@empty
   \@combinefloats
   \ifvbox\@kludgeins
     \@makespecialcolbox
   \else
     \setbox\@outputbox \vbox to\@colht {%
       \@texttop
       \dimen@ \dp\@outputbox
       \unvbox \@outputbox
       \vskip -\dimen@
       \@textbottom
       }%
   \fi
   \global \maxdepth \@maxdepth
}

\makeatother

\begin{document}
 \blindtext Before\footnote{\blindtext[13]
\textbf{2}}\blindtext[10]

After
even more After

\unvbox0
\end{document}

The \unvbox0 has no problem of space. But of course, I would like to use it in the main note

12
  • That can't work, as TeX will cut less of the galley into box 255 to allow space for the footnotes but then you don't use the footnote box so the page will be short. Feb 25, 2015 at 17:43
  • That why in my real example, I switch the counter linked to the insert between 0 and 1000. So when I will start a even page, I switch it to 0. And when I will start a odd page, I will switch to 0. I have made test : it's working. See my parenthis.
    – Maïeul
    Feb 25, 2015 at 17:46
  • the real example is here github.com/maieul/ledmac/tree/issue17-quater (the .tex file, you must run .ins files)
    – Maïeul
    Feb 25, 2015 at 17:55
  • It seems the vertical problem is linked to the fact the output routines don't unvbox the footins
    – Maïeul
    Feb 26, 2015 at 8:44
  • ? the code you quote has the line \unvbox \footins which looks unboxed to me. Feb 26, 2015 at 9:28

1 Answer 1

1

Ok, so my solution. And also answer to @david-carlisle.

First, why I want to have not in only one side ? because it's for eledpar, which allow to typeset texte in // : original language in one said, translation in other said. So it could be useful to have notes for some side.

Second, we have to know that eledpar insert \newpage between each page. So the MWE which I will provide now try to imitate it. There are some problems if you do it with normal page breaking, but there is no reason to have this need with normal page breaking ;-).

So there is three problem.

  1. Print the footnote only on one side. A simple test is enough.
  2. Ensure that long footnote will not : a. Shorten the page where they are not printed. b. Overlap line number in the page where there are printed.
  3. Problem of last line of notes too close of previous. That was my question.

For point 2, what we do is, in the ouput routine, checking parity of the current page. If the next page should not have notes, we set the \footins count to 0 and the \footins skip to 0pt. In the next page should have notes, we reset these count and skip to default value.

The point 3 is the most problematic, and was my question.The problem is that TeX, when a \insert is too long for a page, add at less one line to the insert box at the begining of new page construction, even if the previous insert box was not void.

So in my case, I have one line too much. And this line has a bad glue with the previous line. The solution I have found is to split the \footins box in two : the first part, and the last line, the "too much" line. And print them after. I have some adjusting for skip between the two part to do, but is quite easy.

In an ideal situation, I will prevent this "too much line" but changing the \footins dimen . In this example, already complex I won't. But in eledpar, I will. I have made test. It's working.

So the final "MWE".

     \documentclass{article}
    \dimen\footins=\dimexpr\textheight - \baselineskip\relax
    \usepackage[showframe]{geometry}
    \usepackage{blindtext}
    \makeatletter
\newif\iffootinsnotprinted
    \gdef \@makecol {
       \ifvoid\footins
         \setbox\@outputbox \box\@cclv
       \else
         \setbox\@outputbox \vbox {%
           \boxmaxdepth \@maxdepth
           \unvbox \@cclv
            \ifodd\c@page%
               \vskip \skip\footins
               \color@begingroup
               \normalcolor
               \splittopskip=0pt
               \footnoterule%
               \footnotesize
               \iffootinsnotprinted
                 \setbox\footins=\vbox{
                    \vsplit\footins to \dimexpr\ht\footins-1pt\relax
                    \vskip \dimexpr-0.5\baselineskip-0.5\lineskip-0.5pt\relax
                    \unvbox\footins}
                    \global\footinsnotprintedfalse
                  \fi
                  \unvbox\footins
                 \color@endgroup
           \else
               \ifvoid\footins\else
                 \global\footinsnotprintedtrue
               \fi
           \fi%
           }%
       \fi
       \let\@elt\relax
       \xdef\@freelist{\@freelist\@midlist}%
       \global \let \@midlist \@empty
       \@combinefloats
       \ifvbox\@kludgeins
         \@makespecialcolbox
       \else
         \setbox\@outputbox \vbox to\@colht {%
           \@texttop
           \dimen@ \dp\@outputbox
           \unvbox \@outputbox
           \vskip -\dimen@
           \@textbottom
           }%
       \fi
       \global \maxdepth \@maxdepth
        \ifodd\c@page
          \global\count\footins=0
           \global\skip\footins=0pt%
          \else
            \global\count\footins=1000
            \global\skip\footins=\footskip
          \fi
    }

    \makeatother

    \begin{document}
    Here will be eledpar Right page\footnote{\blindtext[16]
    \textbf{2}}
     \newpage

    even more After. In eledpar, here will be left page. even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.  even more After. In eledpar, here will be left page. even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page. even more After. In eledpar, here will be left page. even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.  even more After. In eledpar, here will be left page. even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After.  In eledpar, here will be left page.even more After. In eledpar, here will be left page.even more After. 
        \newpage
    Here will be eledpar Right page

    \end{document}

And so the result

enter image description here enter image description here enter image description here Of course, I don't think many people should use this type of construction. As I said in prelimary, there is two limits:

  • one line to much in notes after the first output. That can be solved by changing the \footins dimen.
  • \newpage is a necessity for setting right \count\footins. However, in my original problem, I have a new page. I don't think anyone would like to have not only for one side if not typessetting text in parallel. However, If someone would like, I thinks the problem could be solved by a false output routine (like \output={\unvbox255 \penalty\outputpenalty} mentionned in TeXBook p. 255).

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .