von Gast » Mi 10. Jul 2019, 19:04
Die erste Lösung erfordert ConTeXt (wie übrigens auch in der entsprechenden Antwort angegeben).
Die Verwendung von \everypar funktioniert in LaTeX nur sehr begrenzt. Man kann das lokal für kurzzeitige Änderungen verwenden. Da aber LaTeX selbst ebenfalls bei verschiedenen Gelegenheiten Gebrauch davon macht, überdauert es nicht alle LaTeX-Umgebungen. Eine richtig gute, vollautomatische Lösung könnte daher durchaus einige Probleme aufwerfen. Immerhin könnte man bei der Lösung mit \everypar noch testen, ob die beiden Makros für die Seitenummern bereits definiert sind und nur dann den Test vornehmen, um die Fehlermeldungen bei \ifnum beim Hinzufügen weiterer Absätze zu vermeiden.
Die folgende Lösung versucht, das Problem mit \everpar dadurch zu lösen, dass es immer wieder \everypar aufruft, kann aber auch nicht alle Probleme lösen:
\documentclass{article}
\usepackage{afterpage}
\usepackage{blindtext}
\usepackage{refcount}
\newcounter{parnumber}
\makeatletter
\AtBeginDocument{%
\@setpar{%
\edef\thisbegin@pageref{\pageref{par:begin:\theparnumber}}%
\stepcounter{parnumber}%
\edef\nextstart@pageref{\pageref{par:begin:\theparnumber}}%
\@@par
\global\everypar{\label{par:begin:\theparnumber}\marginpar{\theparnumber}}%
\ifx\thisbegin@pageref\nextstart@pageref
\typeout{Nothing to do before \theparnumber}%
\else
\ifdim\pagetotal=\pagegoal
\typeout{Do not indent \theparnumber}%
\global\everypar{\hskip-\parindent\label{par:begin:\theparnumber}\marginpar{\theparnumber}}%
\else
\typeout{Nothing to do before \theparnumber}%
\fi
\fi
}
\everypar{\label{par:begin:\theparnumber}\marginpar{\theparnumber}}%
}
\AtEndDocument{\label{par:begin:\theparnumber}}% ugly heack
\makeatother
\begin{document}
Holla die Waldfee, was soll ich sagen, wozu dieser Unsinnstext dient?
Holla die Waldfee, was soll ich sagen, wozu dieser Unsinnstext dient?
Holla die Waldfee, was soll ich sagen, wozu dieser Unsinnstext dient?
\Blindtext[12]
Holla die Waldfee, was soll ich sagen, wozu dieser Unsinnstext dient?
Holla die Waldfee, was soll ich sagen, wozu dieser Unsinnstext dient?
Holla die Waldfee, was soll ich sagen, wozu dieser Unsinnstext dient?
Holla die Waldfee, was soll ich sagen, wozu dieser Unsinnstext dient?
Holla die Waldfee, was soll ich sagen, wozu dieser Unsinnstext dient?
\Blindtext[5]
\end{document}
Die \marginpar-Anweisungen dienen nur der einfacheren Kontrolle. Am Ende wären sie natürlich (ebenso wie die \typeout-Anweisungen) zu entfernen.
Die erste Lösung erfordert ConTeXt (wie übrigens auch in der entsprechenden Antwort angegeben).
Die Verwendung von [tt]\everypar[/tt] funktioniert in LaTeX nur sehr begrenzt. Man kann das lokal für kurzzeitige Änderungen verwenden. Da aber LaTeX selbst ebenfalls bei verschiedenen Gelegenheiten Gebrauch davon macht, überdauert es nicht alle LaTeX-Umgebungen. Eine richtig gute, vollautomatische Lösung könnte daher durchaus einige Probleme aufwerfen. Immerhin könnte man bei der Lösung mit [tt]\everypar[/tt] noch testen, ob die beiden Makros für die Seitenummern bereits definiert sind und nur dann den Test vornehmen, um die Fehlermeldungen bei [tt]\ifnum[/tt] beim Hinzufügen weiterer Absätze zu vermeiden.
Die folgende Lösung versucht, das Problem mit [tt]\everpar[/tt] dadurch zu lösen, dass es immer wieder [tt]\everypar[/tt] aufruft, kann aber auch nicht alle Probleme lösen: [code]\documentclass{article}
\usepackage{afterpage}
\usepackage{blindtext}
\usepackage{refcount}
\newcounter{parnumber}
\makeatletter
\AtBeginDocument{%
\@setpar{%
\edef\thisbegin@pageref{\pageref{par:begin:\theparnumber}}%
\stepcounter{parnumber}%
\edef\nextstart@pageref{\pageref{par:begin:\theparnumber}}%
\@@par
\global\everypar{\label{par:begin:\theparnumber}\marginpar{\theparnumber}}%
\ifx\thisbegin@pageref\nextstart@pageref
\typeout{Nothing to do before \theparnumber}%
\else
\ifdim\pagetotal=\pagegoal
\typeout{Do not indent \theparnumber}%
\global\everypar{\hskip-\parindent\label{par:begin:\theparnumber}\marginpar{\theparnumber}}%
\else
\typeout{Nothing to do before \theparnumber}%
\fi
\fi
}
\everypar{\label{par:begin:\theparnumber}\marginpar{\theparnumber}}%
}
\AtEndDocument{\label{par:begin:\theparnumber}}% ugly heack
\makeatother
\begin{document}
Holla die Waldfee, was soll ich sagen, wozu dieser Unsinnstext dient?
Holla die Waldfee, was soll ich sagen, wozu dieser Unsinnstext dient?
Holla die Waldfee, was soll ich sagen, wozu dieser Unsinnstext dient?
\Blindtext[12]
Holla die Waldfee, was soll ich sagen, wozu dieser Unsinnstext dient?
Holla die Waldfee, was soll ich sagen, wozu dieser Unsinnstext dient?
Holla die Waldfee, was soll ich sagen, wozu dieser Unsinnstext dient?
Holla die Waldfee, was soll ich sagen, wozu dieser Unsinnstext dient?
Holla die Waldfee, was soll ich sagen, wozu dieser Unsinnstext dient?
\Blindtext[5]
\end{document}[/code]
Die [tt]\marginpar[/tt]-Anweisungen dienen nur der einfacheren Kontrolle. Am Ende wären sie natürlich (ebenso wie die [tt]\typeout[/tt]-Anweisungen) zu entfernen.