我之前曾尝试描述我的问题(脚注文本跳转回前页第二段)。因此,在交付“MWE”时,Ulrike Fischer 给了我宝贵的建议,即通常情况下,此类错误只需要几页就可以在 MWE 中重现——尽管 100 页之外的文本中的更改可能会让错误消失,就像我之前尝试生成 MWE 时一样。
我不相信她,因为我以前也试过——但她是对的。我仍然感到羞愧,称以下内容为 MWE——但生成的 PDF 不再是 1020 页,现在只需要 5 页……
\documentclass[12pt,fleqn,twoside,draft]{report}%
\RequirePackage{xfloat}%
\RequirePackage{xcolor}%
\RequirePackage[ngerman]{babel}%
\RequirePackage{booktabs}%
\RequirePackage{paralist}%
\RequirePackage{mathpazo}%
\newif\ifquotations\quotationstrue%
% Neues Float für Rezepte:
\makeatletter
\newcounter{recipe}% the counter
\renewcommand*\therecipe{\arabic{recipe}}% the default format for the counter
\newcommand*\fps@recipe{tbp}% default floating options
\newcommand*\ftype@recipe{4}% float type number, needs to be a power of 2;
\newcommand*\ext@recipe{lor}% extension of file for the list of recipes
\newcommand*\fnum@recipe{\recipename\nobreakspace\therecipe}% used in caption
\newcommand*\recipename{Rezept}% the name
\newcommand*\listrecipename{Rezepte}% the name of the list
\newenvironment{recipe}{\setlength{\tabcolsep}{0.17em}% Halber Spaltenabstand
\let\fcolorboxold\fcolorbox%
\renewcommand\fcolorbox{\setlength{\fboxsep}{8pt}\fcolorboxold}%
\footnotesize%
\@float{recipe}%
}%
{\end@float}% the environment
\makeatother
\definecolor{shadecolor}{cmyk}{0,0,0.3,0} % Gelber Hintergrund
\setlength\footnotesep{10pt}%
% Weitgehend nach https://tex.stackexchange.com/questions/310103/format-footnotes: Fußnote formatiert als ein \item einer list-Umgebung
\newif\iffootn\footnfalse% Wir befinden uns normalerweise außerhalb einer Fußnote
\makeatletter%
\renewcommand{\@makefntext}[1]{%
\footntrue% Jetzt befinden wir uns innerhalb einer Fußnote
\begin{list}{}{\footnotesize}%
\item[\@makefnmark\hfil]%
\RaggedRight% Rechts Flattersatz
#1%
\end{list}%
}%
\makeatother%
% replaces \markleft, I normally take from a package
\makeatletter%
\providecommand{\markleft}[1]{%
\begingroup
\let\label\relax \let\index\relax \let\glossary\relax
\expandafter\@markleft\@themark {#1}%
\@temptokena \expandafter{\@themark}%
\mark{\the\@temptokena}%
\endgroup
\if@nobreak\ifvmode\nobreak\fi\fi}
\providecommand{\@markleft}[3]{\@temptokena {#2}%
\unrestored@protected@xdef\@themark{{#3}{\the\@temptokena}}}
\makeatother%
%DINA 4:
\setlength{\paperwidth}{210mm}
\setlength{\paperheight}{297mm}
%Satzspiegel
\textwidth 13.5cm
\textheight 21.4cm
% \textheight an ganzzahlige Zeilenanzahl anpassen
\setlength{\dimen0}{\textheight}%
\addtolength{\dimen0}{-\topskip}%
\divide\dimen0\baselineskip%
\setlength{\textheight}{\number\dimen0 \baselineskip}%
\addtolength{\textheight}{\topskip}%
%Position auf dem Blatt
\setlength{\topmargin}{-0.5cm}
%Zeilenabstand
\renewcommand{\baselinestretch}{1.2}
%kompaktere Form der Auflistung:
\newif\ifitemize\itemizefalse% Normalerweise nicht in itemize-Umgebung
\renewenvironment{itemize}%
{\pagebreak[1]%
\smallskip%
\itemizetrue% Jetzt in itemize-Umgebung
\begin{compactitem}}%
{\end{compactitem}\smallskip\pagebreak[1]}%
\begin{document}
\section{Nothing}
\newpage
letztlich lohnte sich der Aufwand, denn sie wohnte in der Wohnung über viele Jahrzehnte bis zu ihrem Tod.
Sie bekam wegen ihres Mannes Tod im Krieg eine Hinterbliebenenrente, allerdings bitter wenig. Deswegen arbeitete sie immer wieder, die letzten Jahre in der Uni"=Mensa.
Nachdem sie einen Schlaganfall erlitten hatte, war sie pflegebedürftig. Ihre Tochter Mausi, die abgesehen von einem Engagement als Tänzerin in sehr jungen Jahren und sporadischen Beschäftigungen als Serviererin in ihrem Leben kaum je gearbeitet hatte, übernahm die Pflege und die ihr dafür zustehende staatliche Bezahlung. Leider war Tante Thea eigentlich Frühaufsteherin, kam aber nicht mehr allein aus dem Bett, Mausi dagegen stand normalerweise erst nachmittags auf.
Tante Thea hatte bereits seit den Dreißigerjahren einen Führerschein, nach dem Tod ihres Mannes Karl aber kein Fahrzeug mehr und nutzte daher auch ihren Führerschein nicht mehr. Als Gisela 1982 ihren Führerschein machte, erklärte sie: Nein, angesichts des dichten heutigen Verkehrs würde sie sich nicht mehr trauen zu fahren.
Wie meine Großmutter Emilie kochte auch ihre Schwester Thea noch diverse althergebrachte Gerichte. Ihre Tochter Marion berichtet von
\begin{itemize}
\item Rhabarbergrütze mit Grießklößen (Rezept~\ref{rec_rhabarber}),
\item Hamburger Aalsuppe (Rezept~\ref{rec_aal}),
\item Buchweizengrütze (Rezept~\ref{rec_buchweizen}),
\item Haferbrei (Rezept~\ref{rec_haferbrei}),
\item Süßkartoffeln mit Gemüse und Dörrfleisch,
\item Matjes mit Pellkartoffeln oder Bratkartoffeln,
\item Kalbsleber mit gebratenen Apfelscheiben und Kartoffelmus,
\item Schnauze und Pfoten vom Schwein in Sülze mit Bratkartoffeln,
\end{itemize}
\begin{recipe}(caption=outer, align=bottom, width=normal)%
\fcolorbox{black}{shadecolor}{%
\begin{tabular}{rlp{0.05\textwidth}rl}
500\,g & Rhabarber && 0,25\,l & Johannisbeersaft \\
2\,EL & Speisestärke && 3\,EL & Zucker \\
\midrule
\multicolumn{5}{p{0.52\textwidth}}{\emph{%
Rhabarber putzen, waschen, klein schneiden, 0,375\,l Wasser mit Saft aufkochen, Rhabarber dazu, etwa 4 Minuten bei kleiner Hitze köcheln. Stärke und 3\,EL Wasser verrühren und zum Rhabarber geben. Mit Zucker abschmecken (etwa 3\,EL) , abkühlen lassen. Grießklößchen nach Rezept~\ref{rec_fliederbeersuppe} auf Seite~\pageref{rec_fliederbeersuppe} hinzugeben. Variationsmöglichkeiten: Zusätzlich Schlagsahne oder Vanillepudding statt Grieß.}}\\
\end{tabular}
}% Ende \fcolorbox
\caption{Rhabarbergrütze mit Grießklößchen oder Vanillepudding (Marion).\label{rec_rhabarber}}
\end{recipe}
%
\begin{recipe}(caption=outer, align=bottom, width=wide)
\fcolorbox{black}{shadecolor}{%
\begin{tabular}{rlp{0.05\textwidth}rl}
2\,l & Fleischbrühe && 1\,kg & Schinkenknochen o. \\
& o. Wasser && & geräuch. Rippchen \\
200\,g & Schinkenschwarte && 350\,g & Dörrobst (Äpfel, \\
1\,gr. o. 2\,kl. & Bund Suppengrün && & Birnen o. Pflaumen) \\
300\,g & grüne Erbsen && 200\,g & grüne Bohnen \\
1 Spritzer & Essig && 1 Prise & Zucker \\
1 Bund & Bohnenkraut && 1 Msp. & gem. Muskat \\
2 & Lorbeerblätter && nach Wahl & Kräuter (Thymian, \\
2 & ganze Gewürznelken && & Salbei, Basilikum, \\
& Salz && & Majoran, Kerbel) \\
& Pfeffer && & \\
\midrule
\multicolumn{5}{p{0.83\textwidth}}{\emph{%
Vorbereitung: Dörrobst über Nacht in Wasser quellen lassen. Am nächsten Tag: Suppengrün waschen/putzen, Karotten/Sellerie schälen. Schale zusammen mit dunkelgrünen Porreeteilen aufbewahren. In gr. Topf: Schinkenknochen, Schinkenschwarte, Fleischbrühe/Wasser, Bohnenkraut, Nelken, Lorbeerblätter, Petersilie, die aufbewahrten Schalen/dunkelgrünen von Sellerie/Karotte und Porree-Enden anderthalb Stunden bei milder Hitze zu Brühe kochen, durch Sieb in anderen Topf gießen.}}\\
\multicolumn{5}{p{0.83\textwidth}}{\emph{%
Restliches Suppengrün, Bohnen, Erbsen und Kräuter klein schneiden/hacken, mit dem Backobst in die Suppe geben, weitere halbe Stunde garen lassen. Fleisch vom Schinkenknochen dazu, mit Salz und Pfeffer, Zucker, Essig, Muskatnuss, Salz und Pfeffer würzen. Damit wäre eine Aalsuppe ohne Aal bereits fertig, in unserer Familie kam zuletzt noch Aal hinein, 200\,g mundgerechte Stücke geschnitten, geräuchert oder frisch, der dann noch zehn Minuten in der Suppe ziehen durfte.%
}}\\
\end{tabular}
}% Ende \fcolorbox
\caption{Hamburger Aalsuppe mit und ohne Aal (Marion).\label{rec_aal}}
\end{recipe}
%
\begin{recipe}(caption=outer, align=bottom, width=normal)%
\fcolorbox{black}{shadecolor}{%
\begin{tabular}{rlp{0.05\textwidth}rl}
1\,l & Buttermilch && 200\,g & Buchweizengrütze \\
& Milch && & Zucker \\
\midrule
\multicolumn{5}{p{0.52\textwidth}}{\emph{%
Buttermilch (in der \glqq schlechten Zeit\grqq\ ersatzweise Wasser) in hohem Topf erwärmen. Buchweizengrütze unter ständigem Umrühren hinzugeben und halbe Stunde quellen lassen. Reichlich Zucker nach Geschmack hinzufügen. Wenn die Grütze fest wird, in Schüssel umfüllen und mit ein wenig Zucker bestreuen, um Hautbildung zu vermindern. Nach zwei Stunden zum weiteren Abkühlen bis zur Mahlzeit (Frühstück, als Nachtisch oder zum Abendbrot) in den Kühlschrank. Mit kalter Milch darüber servieren.}}\\
\end{tabular}
}% Ende \fcolorbox
\caption{Buchweizengrütze mit Milch (Marion).\label{rec_buchweizen}}
\end{recipe}
%
\begin{recipe}(caption=outer, align=bottom, width=normal)%
\fcolorbox{black}{shadecolor}{%
\begin{tabular}{rlp{0.05\textwidth}rl}
0,25\,l & Milch && 50\,g & feine Haferflocken \\
1 Prise & Salz && 2\,TL & Zucker \\
0,5 TL & Zimt (nach Wahl) && & \\
\midrule
\multicolumn{5}{p{0.64\textwidth}}{\emph{%
Haferflocken, Salz und Zucker unter ständigem Rühren in der Milch (ersatzweise Wasser) aufkochen, drei Minuten ziehen lassen, in eine Schüssel umfüllen, mit Zimt bestreuen, mit zusätzlicher kalter Milch darüber servieren.}}\\
\end{tabular}
}% Ende \fcolorbox
\caption{Haferbrei mit Milch (Marion).\label{rec_haferbrei}}
\end{recipe}
%
Marion wurde in Hamburg eingeschult, wechselte kurz darauf für zwei Jahre nach Wien. Anschließend ging sie in Bayern ein Jahr zur Schule, ab da in Travemünde. 1949 verließ sie die Schule vorzeitig vor dem Ende des letzten Schuljahrs, weil sie Geld verdienen sollte: In den nächsten beiden Jahren arbeitet sie in einer Eisdiele, als Kindermädchen und als Mädchen für alles. Ihre Schwester Ingrid machte eine Lehre zum Einzelhandelskaufmann in einem Lebensmittelgeschäft.
Ab September 1951 wohnte Marion bei ihrer Tante Emilie, die ihr eine Lehrstelle in dem kleinen Friseurgeschäft hatte vermitteln können, in dem sie ihre Haare frisieren ließ. Leider musste sie die Lehre abbrechen: Ihre Lehrherrin wollte auch ihre eigene Tochter als Lehrling aufnehmen, es sei aber unerwarteterweise nur ein Lehrling zulässig gewesen.\footnote{Die Lehrherrin scheint hier einem eigentlich unerklärlichen Irrtum erlegen zu sein, falls es sich nicht um eine Schutzbehauptung handelte: Herr Dr. Thomas Felleckner von der Handwerkskammer Braunschweig-Lüneburg-Stade teilte dazu am 3.\,3.\,2022 per E-Mail mit:
\leavevmode
\begin{itshape}
$\lbrack $In der britischen Besatzungszone$\rbrack $ galt bereits seit dem 6. Dezember 1946 eine Aufbauverordnung der britischen Militärregierung für das Handwerk, die nahezu vollständig das deutsche Handwerksrecht von vor 1933 wieder in Kraft gesetzt hatte. Demnach gab es in deren Wirkungsbereich keinerlei quantitative Beschränkungen für die Beschäftigung von Mitarbeitern oder Lehrlingen in Handwerksbetrieben. Ein Verbot für die Aufnahme von mehr als einem Lehrling hat daher für ordnungsgemäß in die Handwerksrolle der jeweiligen Kammer eingetragene Handwerksbetriebe im Bereich der ehemaligen britischen Besatzungszone im Jahr 1951 nicht bestanden.
\end{itshape}}
Nun besorgte Emilie eine Stelle im Haushalt in Hamburg, bis Marion erneut eine Lehrstelle bei einer Friseurin außerhalb Hamburgs fand, zu der sie jeden Morgen mit dem Bus fahren musste. Doch auch diesmal endete die Lehre nach drei Monaten: Es stellte sich heraus, dass Marion das Dauerwellenwasser nicht vertrug, damit war eine Friseurlehre generell gescheitert. 1953 verschaffte Uromi Jaja ihr eine Stelle im Haushalt an der Elbchaussee mit Kost und Logis, deshalb konnte sie nun am Glashütter Damm ausziehen. Dort blieb sie zwei Jahre bis Mitte 1955, anschließend wechselte sie in das Hotelgewerbe und arbeitete ein Dreivierteljahr als Anlernling im Hotel zum Stern in Siegburg.
Doch sie träumte von einem Leben in der Schweiz und einer Arbeit als Podologin. Irgendwann hatte sie genug Geld gespart, um für diesen Beruf über einen Kurs die begehrte Zulassung zu erwerben. Doch als sie damit 1956 nach Zürich zog, wurde zu ihrem Entsetzen ihr deutsches Diplom von der Schweiz nicht anerkannt. Ihr blieb nur die Rückkehr ins Hotelgewerbe. Während der kommenden zwei Jahre wechselte ihr Wohnsitz zweimal zurück nach Deutschland, wo sie bei ihrer Mutter in der Parkallee 26$^{II}$ in Hamburg wohnte, und wieder in die Schweiz. Ab 1959 blieb sie -- abgesehen von einem viermonatigen Zwischenspiel auf der Isle of Wight 1961 -- bis 1963 in der Schweiz, lernte dort 1960/61 ihren späteren Mann Wilfried kennen, den sie 1964 heiratete.
Mit ihm zog sie 1963 für zehn Jahre in die USA, baute mit ihm ein eigenes Restaurant in San Francisco auf. Nach einer Fehlgeburt im siebten Schwangerschaftsmonat 1967 (Zwillingsmädchen) kam 1968 Sohn Albert gesund zur Welt. 1972 kehrten sie in die Schweiz zurück, um dort wieder eine eigene Wirtschaft zu gründen, stießen aber wegen Marions deutscher Staatsbürgerschaft auf Schwierigkeiten. Wenige Jahre später gab es Streit: Marion war mit 41 Jahren wieder schwanger, ihr Mann Wilfried wünschte kein weiteres Kind, Marion aber trug Iris aus, die 1975 zur
\end{document}
生成的 PDF 并没有“准确”地传达原始错误,但至少它没有像我之前的尝试那样再次消失。
我的第一个问题: 如果您编译文本,您将在第 4 页底部找到 \footnotemark No. 1,并且相应的 \footnotetext No. 1 从页脚开始。但是那里的空间不够,所以 \footnotetext 在第 5 页的页脚继续。到目前为止一切都应该如此......
但现在事情开始变得奇怪了:虽然在我看来第 5 页有足够的空间来完成 \footnotetext —— 因为只需要再加 3 行 —— 但 \footnotetext 仍然在另一个页脚上继续。而且不是在第 6 页,正如人们所预料的那样,而是回到第 4 页,在同一个脚注的开头上方!
有人知道我怎样才能在不改变其余外观的情况下阻止这种奇怪的行为吗?
我的第二个问题: 为了编译,你需要我自己编写的文件“xfloat.sty”——但这超过了允许的 30,000 个字符。所以现在按照 Ulrike Fischer 的提示,我将其上传到 https://workupload.com/file/JHA2xpWVt6X 。错误很可能就出在该文件内……
(还有一个问题:是否可以删除我以前提出的关于此问题的问题,因为它对任何人都没有帮助?)
答案1
您正在使用nextfloatpages 包和afterpage 包。前者有时会解开页面以重新分配浮动元素,而后者会在下一页插入某些内容并将其部分解开,因此两者会发生冲突。
不要\afterpage
轻易使用。这是一个非常脆弱的命令。在您的例子中,您似乎想在浮动后将信息传递给页面。使用\label
存储有关页面的此类信息并在下一次编译中查询它们的值。这要安全得多。
这里有一个较小的例子。您可以通过取消注释标记的行来在坏的和好的之间切换。
\documentclass[12pt,fleqn,twoside,draft]{report}%
\RequirePackage[trace]{fewerfloatpages}
\RequirePackage{afterpage}%
\usepackage{lipsum}
%Satzspiegel
\textwidth 13.5cm
\textheight 21.4cm
%Zeilenabstand
\renewcommand{\baselinestretch}{1.2}
\begin{document}
\vspace*{26\baselineskip}
blub
\begin{figure}
\fbox{%
\rule{1cm}{10\baselineskip}
}%
\end{figure}
%
\begin{figure}
\afterpage{\typeout{blub}} % <=============== comment this
\fbox{%
\rule{1cm}{22\baselineskip}
}%
\end{figure}
%
\begin{figure}
\fbox{%
\rule{1cm}{11\baselineskip}
}%
\end{figure}
%
\begin{figure}
\fbox{%
\rule{1cm}{8\baselineskip}
}%
\end{figure}
%
x\\x\\x\\x\\x\\x\\x
Ab September 1951 wohnte Marion bei ihrer Tante Emilie, die ihr eine
Lehrstelle in dem kleinen Friseurgeschäft hatte vermitteln können, in dem sie
ihre Haare frisieren ließ. Leider musste sie die Lehre abbrechen: Ihre
Lehrherrin wollte auch ihre eigene Tochter als Lehrling aufnehmen, es sei
aber unerwarteterweise nur ein Lehrling zulässig gewesen.\footnote{START
\lipsum[1-2]}
\lipsum[1-5]
\end{document}