Flowfram - Problem mit der Textbreite

Flowfram - Problem mit der Textbreite

Ich lerne das Flowfram-Paket kennen und möchte auf einfache Weise einige Rahmen auf der Seite setzen und den Text durchfließen lassen. Meine Rahmen haben unterschiedliche Breiten und ich habe im Flowfram-Handbuch Folgendes gelesen: „Der Befehl \framebreak ist für Situationen vorgesehen, in denen ein Absatz zwei Fließrahmen unterschiedlicher Breite umfasst, da sich die Ausgaberoutine von TEX erst an den neuen Wert von \hsize anpasst, wenn der letzte Absatz des vorherigen Rahmens beendet ist.“ Gibt es eine Problemumgehung zum Hinzufügen manueller Umbrüche? Es gibt noch ein weiteres Problem: eine unerwartete Lücke zwischen den Rahmen.

Bitte sehen Sie sich mein MWE an und sagen Sie mir, wenn ich etwas falsch mache. Danke.

(PS: Entschuldigung, aber ich musste echten Text verwenden, um die Verwendung von \framebreak anzuzeigen, also habe ich einfach diesen sehr interessanten, öffentlich verfügbaren Artikel verwendet, den ich gerade gelesen habe:https://k-larevue.com/permis-de-vivre-sur-adolfo-kaminsky/)

\documentclass[a5paper]{article}

\usepackage{lipsum}
\usepackage{graphicx}
\usepackage{flowfram}

\newflowframe*
  {0.3\textwidth}% width
  {0.3\textheight}% height
  {0\textwidth}% x position
  {0.7\textheight}% y position

\newflowframe*
    {0.7\textwidth}
    {0.7\textheight}
    {0\textwidth}
    {0\textheight}

%\newflowframe*{\textwidth}{0.4\textheight}{0pt}{0pt}

%\newstaticframe*{2in}{2in}{0pt}{0pt}

%\setstaticcontents*{1}{\includegraphics[height=2in]{chicken}}

\begin{document}
\sloppy
%\lipsum{1}
Adolfo Kaminsky, né en 1925 en Argentine, est devenu une légende : le résistant faussaire connu pour s’être  spécialisé dans  la  fabrication  \framebreak de faux papiers  au cours de la Seconde Guerre mondiale. Il voulut être peintre, il est devenu un photographe discret, hésitant à montrer son travail – avant que le Musée d’art et  d’histoire du Judaïsme (mahJ) à Paris ne mette la lumière sur des dizaines de clichés pris pendant des décennies. Une vie clandestine, dans son œuvre comme dans ses engagements : après la guerre, il fabrique des faux papiers pour la Haganah, il est le faussaire des réseaux de soutien aux indépendantistes algériens dans les années 1950 et 1960, celui des révolutionnaires d’Amérique du Sud comme des opposants aux dictatures de l’Espagne, du Portugal et de Grèce… La philosophe Elisabeth de Fontenay témoigne de son admiration.
 
Adolfo posant avec ses Rolleiflex, Paris, 1997, photo prise par sa femme Leïla
 
L’artisanat des faux papiers, \framebreak comme la prise de vue photographique, incite  à s’interroger sur ce qu’est l’authenticité, l’ici et le maintenant de l’original, cette \framebreak autorité de la chose même qui, échappant à la reproduction, ne saurait, à plus forte raison, subir de contrefaçon. Et pourtant, quelle vie véritable, véridique et vraie que celle d’Adolfo Kaminsky, ce faussaire, artisan de génie au service de la survie et de la liberté, cet artiste photographe qui tentera, quand il aura la liberté d’exister, de traduire par fragments la beauté du monde ! Un homme, fidèle à lui-même, qui a travaillé dans l’ombre de laboratoires clandestins et dans la lumière captée par le Rolleiflex.
Instantané
« Tu photographies n’importe quoi » lui dit un jour son frère. À une autre époque que ce temps de détresse, Adolfo Kaminsky aurait pu faire une carrière scientifique, mais il avait toujours voulu être peintre. Les photographes qui observent puis « prennent » une photo ont quelque chose du flâneur dont le coup d’œil et la saisie, dénués de voyeurisme, gardent leurs distances. Est-ce là capture, vol d’une image, d’un instant ? Non, chez lui, l’objectif est un oiseau qui se pose. Paris, l’eau, la nuit, les enfants, les marchés aux puces, les petits métiers, tels sont les sujets qu’il photographie.
Le fabricant de faux papiers, quand la Libération le rendit à lui-même et aux siens, donna au droit de vivre un tout autre sens : le droit de persévérer dans son être propre, d’exister selon son gré, voire selon sa fantaisie. C’est la liberté que Kaminsky s’accorda en partie quand il se mit à vivre, à flâner et à photographier au grand jour tout en poursuivant son activité de clandestin au service de la France, puis des apatrides qui voulaient fonder un État juif et y vivre, puis aider les luttes de libération, de décolonisation et se battre contre les dictatures.
Aussi est-ce un seul et même homme qu’’il faut célébrer, le regardant à la fois dans l’obscurité de la fabrique clandestine et dans la lumière d’un travail d’artiste. Il y avait un temps pour dire non aux nazis et à leurs acolytes, non encore aux tortures coloniales, et un autre pour dire oui à la beauté et à l’énigme du monde. Les deux temps pouvaient coexister.
\end{document}

Antwort1

Der Schlüssel zur Verwendung besteht darin, die Seite so zu formatieren, wie sie ist, herauszufinden, wo die Umbrüche auftreten, und diese \framebreakan diesen Stellen hinzuzufügen.

\documentclass[a5paper]{article}

\usepackage{lipsum}
\usepackage{graphicx}
\usepackage{flowfram}

\newflowframe*
  {0.3\textwidth}% width
  {0.3\textheight}% height
  {0\textwidth}% x position
  {0.7\textheight}% y position

\newflowframe*
    {0.7\textwidth}
    {0.7\textheight}
    {0\textwidth}
    {0\textheight}

%\newflowframe*{\textwidth}{0.4\textheight}{0pt}{0pt}

%\newstaticframe*{2in}{2in}{0pt}{0pt}

%\setstaticcontents*{1}{\includegraphics[height=2in]{chicken}}

\begin{document}
\sloppy
%\lipsum{1}
Adolfo Kaminsky, né en 1925 en Argentine, est devenu une légende : le résistant faussaire connu pour s’être  spécialisé dans  la\framebreak  fabrication   de faux papiers  au cours de la Seconde Guerre mondiale. Il voulut être peintre, il est devenu un photographe discret, hésitant à montrer son travail – avant que le Musée d’art et  d’histoire du Judaïsme (mahJ) à Paris ne mette la lumière sur des dizaines de clichés pris pendant des décennies. Une vie clandestine, dans son œuvre comme dans ses engagements : après la guerre, il fabrique des faux papiers pour la Haganah, il est le faussaire des réseaux de soutien aux indépendantistes algériens dans les années 1950 et 1960, celui des révolutionnaires d’Amérique du Sud comme des opposants aux dictatures de l’Espagne, du Portugal et de Grèce… La philosophe Elisabeth de Fontenay témoigne de son admiration.
 
Adolfo posant avec ses Rolleiflex, Paris, 1997, photo prise par sa femme Leïla
 
L’artisanat des faux papiers,  comme\framebreak la prise de vue photographique, incite  à s’interroger sur ce qu’est l’authenticité, l’ici et le maintenant de l’original, cette  autorité de la chose\framebreak même qui, échappant à la reproduction, ne saurait, à plus forte raison, subir de contrefaçon. Et pourtant, quelle vie véritable, véridique et vraie que celle d’Adolfo Kaminsky, ce faussaire, artisan de génie au service de la survie et de la liberté, cet artiste photographe qui tentera, quand il aura la liberté d’exister, de traduire par fragments la beauté du monde ! Un homme, fidèle à lui-même, qui a travaillé dans l’ombre de laboratoires clandestins et dans la lumière captée par le Rolleiflex.
Instantané
Tu photographies n’importe quoi » lui dit un jour son frère. À une autre époque que ce temps de détresse, Adolfo Kaminsky aurait pu faire une carrière scientifique, mais il avait toujours voulu être peintre. Les photographes qui observent puis « prennent » une photo ont quelque chose du flâneur dont le coup d’œil et la saisie, dénués de voyeurisme, gardent leurs distances. Est-\framebreak ce là capture, vol d’une image, d’un instant ? Non, chez lui, l’objectif est un oiseau qui se pose. Paris, l’eau, la nuit, les enfants, les marchés aux\framebreak puces, les petits métiers, tels sont les sujets qu’il photographie.
Le fabricant de faux papiers, quand la Libération le rendit à lui-même et aux siens, donna au droit de vivre un tout autre sens : le droit de persévérer dans son être propre, d’exister selon son gré, voire selon sa fantaisie. C’est la liberté que Kaminsky s’accorda en partie quand il se mit à vivre, à flâner et à photographier au grand jour tout en poursuivant son activité de clandestin au service de la France, puis des apatrides qui voulaient fonder un État juif et y vivre, puis aider les luttes de libération, de décolonisation et se battre contre les dictatures.
Aussi est-ce un seul et même homme qu’’il faut célébrer, le regardant à la fois dans l’obscurité de la fabrique clandestine et dans la lumière d’un travail d’artiste. Il y avait un temps pour dire non aux nazis et à leurs acolytes, non encore aux tortures coloniales,\framebreak et un autre pour dire oui à la beauté et à l’énigme du monde. Les deux temps pouvaient coexister.
\end{document}

Antwort2

Erstens habe ich hinzugefügt, \usepackage[T1]{fontenc}um den Fehler über das «und das »im Text zu beseitigen (ohne es erhalten SieLaTeX-Fehler: Befehl \guillemetright in der Kodierung OT1 nicht verfügbar.). Außerdem benötigen Sie diese Paketoption, um die Warnung zu beseitigenAchtung: OT1-Kodierung sollte nicht für Französisch verwendet werden(denn, siehe unten, wir nutzen die frenchOption fürbabel.

Mit Hilfe derMikrotypiePaket (zum Verkleinern der Zeichen, damit sie besser in die schmale Spalte passen), dasfrench babelOption (für Silbentrennungen) und etwas Hilfestellung bei der Positionierung von Silbentrennungen in LaTeX (mit \-), erhalten Sienach mehreren VersuchenKamin\-skyein anständiges Ergebnis. Ohne erhalten Sie beispielsweise eine nicht ausreichende hbox (Silbentrennung beiKa-minskyanstattKamin-Himmel). Ein weiteres Beispiel ist das Wort „devenu“ ( deve\-nu), da hier standardmäßig keine Silbentrennung erfolgt, um ein „nu“ am Zeilenanfang zu vermeiden („nu“ bedeutet auf Französisch „nackt“).

HINWEIS: Ich habe den Trick \baselineskipaus dem Kommentar von John Kormylo auch in seiner eigenen Antwort verwendet.

\documentclass[a5paper]{article}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{flowfram}
\usepackage[shrink=30,stretch=25,babel=true,kerning=true]{microtype}

\newflowframe*
  {0.3\textwidth}% width
  {8\baselineskip}% height
  {0\textwidth}% x position
  {20\baselineskip}% y position

\newflowframe*
    {0.7\textwidth}
    {20\baselineskip}
    {0\textwidth}
    {0\textheight}

\begin{document}

Adolfo Kamin\-sky, né en 1925 en Argentine, est deve\-nu une légende : le résistant faussaire connu pour s’être  spécialisé dans la fabrication de faux\framebreak   papiers au cours de la Seconde Guerre mondiale. Il voulut être peintre, il est devenu un photographe discret, hésitant à montrer son travail – avant que le Musée d’art et  d’histoire du Judaïsme (mahJ) à Paris ne mette la lumière sur des dizaines de clichés pris pendant des décennies. Une vie clandestine, dans son œuvre comme dans ses engagements : après la guerre, il fabrique des faux papiers pour la Haganah, il est le faussaire des réseaux de soutien aux indépendantistes algériens dans les années 1950 et 1960, celui des révolutionnaires d’Amérique du Sud comme des opposants aux dictatures de l’Espagne, du Portugal et de Grèce… La philosophe Elisabeth de Fontenay témoigne de son admiration.
 
Adolfo posant avec ses Rolleiflex, Paris, 1997, photo prise par sa femme Leïla
 
L’artisanat des faux papiers,  comme la prise de vue photographique, incite  à \framebreak s’interroger sur ce qu’est l’authentici\-té, l’ici et le main- tenant de l’original, cette  autorité de la chose même qui, échappant à la reproduction, ne\framebreak saurait, ne saurait, à plus forte raison, subir de contrefaçon. Et pourtant, quelle vie véritable, véridique et vraie que celle d’Adolfo Kaminsky, ce faussaire, artisan de génie au service de la survie et de la liberté, cet artiste photographe qui tentera, quand il aura la liberté d’exister, de traduire par fragments la beauté du monde ! Un homme, fidèle à lui-même, qui a travaillé dans l’ombre de laboratoires clandestins et dans la lumière captée par le Rolleiflex.
Instantané
Tu photographies n’importe quoi » lui dit un jour son frère. À une autre époque que ce temps de détresse, Adolfo Kaminsky aurait pu faire une carrière scientifique, mais il avait toujours voulu être peintre. Les photographes qui observent puis « prennent » une photo ont quelque chose du flâneur dont le coup d’œil et la saisie, dénués de voyeurisme, gardent leurs distances. Est-ce là capture, vol d’une image,\framebreak d’un instant ? Non, chez lui, l’objectif est un oiseau qui se pose. Paris, l’eau, la nuit, les enfants, les marchés aux puces, les petits métiers, tels sont les sujets\framebreak qu’il photographie.
Le fabricant de faux papiers, quand la Libération le rendit à lui-même et aux siens, donna au droit de vivre un tout autre sens : le droit de persévérer dans son être propre, d’exister selon son gré, voire selon sa fantaisie. C’est la liberté que Kaminsky s’accorda en partie quand il se mit à vivre, à flâner et à photographier au grand jour tout en poursuivant son activité de clandestin au service de la France, puis des apatrides qui voulaient fonder un État juif et y vivre, puis aider les luttes de libération, de décolonisation et se battre contre les dictatures.
Aussi est-ce un seul et même homme qu’il faut célébrer, le regardant à la fois dans l’obscurité de la fabrique clandestine et dans la lumière d’un travail d’artiste. Il y avait un temps pour dire non aux nazis et à leurs acolytes, non encore aux tortures coloniales, et un autre pour dire oui à la beauté et à l’énigme du monde. Les\framebreak deux temps pouvaient coexister.
\end{document}

Bildbeschreibung hier eingeben

Antwort3

Ich habe mich entschlossen, eine Antwort auf diese Frage zu posten, da selbst die akzeptierte Antwort nicht das ist, was verlangt wurde, d.h. eineautomatische Lösung. Zunächst möchte ich darauf hinweisen, dass es sich um einebekanntes Problem des Paketsdas kommt von einer Kernbeschränkung von TeX*. Außerdem möchte ich Sie wissen lassen, dass ich kein TeX-Experte bin und dass dieskeine perfekte Lösung. Vielleicht kann jemand mit mehr Erfahrung als ich dieses Konzept zu einer voll funktionsfähigen Lösung ausbauen, obwohl ich bezweifle, dass dieses System viel mehr Potenzial hat.

Beispiel dafür, wie das System funktioniert und versagt Abbildung: Beispiel für die Funktionsweise und Fehler des Systems

Zunächst ein wenig Kontext. Hier definiere ich das Seitenlayout.

\documentclass{article}
\usepackage{lipsum}
\usepackage[pages=absolute]{flowfram}

\showframebboxtrue
% \newflowframe[<pages>]{<width>}{<height>}{<x>}{<y>}[<label>]
\newflowframe[>0]{0.6\textwidth}{\textheight}{-0.1\textwidth}{0.1\textheight}[thick]
\newflowframe[>0]{0.4\textwidth}{0.5\textheight}{0.6\textwidth}{0.6\textheight}[thin]
\newstaticframe[>0]{0.7\textwidth}{0.45\textheight}{0.6\textwidth}{0.1\textheight}[image]
\begin{staticcontents*}{image}
    \hrule width\textwidth height0.45\textheight
\end{staticcontents*}

\global\newcount\numberofframes\numberofframes=2\relax

Ich habe auch die Anzahl der Frames zur späteren Verwendung gespeichert. Hier definiere ich ein \moduloMakro zum Berechnen #1 mod #2und Einfügen des Ergebnisses in \modulores.

\global\newcount\modulores
\def\modulo#1#2{
    \newcount\countA
    \newcount\countB
    \newcount\result
    
    \countA=#1\relax
    \countB=#2\relax
    
    \result=\countA
    \divide\result by \countB
    \multiply\result by \countB
    \advance\countA by -\result

    \global\modulores=\countA\relax
}

Unten sehen Sie den Kern des Systems, das das Problem löst. Das \myparMakro frisst den folgenden Absatz und macht drei Dinge:

  • Zuerst berechnet es den verfügbaren Platz im Rahmen;
  • dann schätzt es die Anzahl der Zeilen, die in den verbleibenden Platz passen;
  • \hangafterSchließlich werden und \hangindentzum Ausgleich der Breitenunterschiede verwendet .

Die Tatsache, dass TeX mithilfe eines ziemlich komplexen Algorithmus entscheidet, wie viele Zeilen in diesen Rahmen und wie viele Zeilen in den nächsten Rahmen passen, verhindert, dass dieses einfache System jedes Mal die richtige Anzahl von Zeilen bestimmt, die auf die Seite passen. Wie Sie auf der zweiten Seite dieses Beispiels sehen können, ist das System tatsächlich fehlbar.

\def\mypar#1\par{
    % here we can get the content of the paragraph and the position on the page before outputting the paragraph
    \newdimen\parheight\parheight=\dimexpr\pagegoal-\pagetotal-\pagedepth\relax
    % how many lines fit into the page
    \newcount\fittinglines\fittinglines=\numexpr\parheight/\baselineskip\relax
    % width of the current frame
    \getflowbounds\thethisframe\relax
    \newdimen\currentwidth\currentwidth=\ffareawidth\relax
    % width of the next frame thenextframe = (thethisframe + 1) mod numberofframes
    \newcount\nextframe
    \modulo{\numexpr\thethisframe}{\the\numberofframes}\relax
    \nextframe=\numexpr\the\modulores+1\relax
    \getflowbounds{\the\nextframe}\relax
    \newdimen\nextwidth\nextwidth=\ffareawidth\relax
    % indentation logic
    \ifnum\nextwidth=\currentwidth\relax
        #1\endgraf
    \else
        \ifnum\nextwidth<\currentwidth\relax
            % the next is thinner
            \hsize=\the\currentwidth\relax
            \hangafter=\fittinglines\relax
            \hangindent=\dimexpr\nextwidth-\currentwidth\relax
            % info: [\thethisframe,\the\currentwidth,\the\nextwidth,thinner]
            #1\endgraf
        \else
            % the next is wider
            \hsize=\the\nextwidth\relax
            \hangafter=-\fittinglines\relax
            \hangindent=\dimexpr\currentwidth-\nextwidth\relax
            % info: [\thethisframe,\the\currentwidth,\the\nextwidth,wider]
            #1\endgraf
        \fi
    \fi
    \vbox to\parskip{}
}

\begin{document}
\emergencystretch 2em % avoid text overflow

\section{Lorem}
\mypar\lipsum*[1]
$$
\int_\Sigma \vec\nabla\times\vec F \hat n\textrm{d}\Sigma = \oint_\gamma \vec F \cdot \textrm{d}\vec s
$$

\subsection{Ipsum}
\lipsum*[2]

\mypar\lipsum*[3]

\mypar\lipsum*[4]

\section{Dolor}
\mypar\lipsum*[5]

\mypar\lipsum*[6]

\subsection{Sit amet}
\mypar\lipsum*[7]

\end{document}

Die Summe aller oben genannten Codeausschnitte ergibt ein funktionierendes Beispiel.

*Diese Einschränkung hat meinen ersten Versuch verhindert. Meinen ersten Versuch finden Sie weiter unten.

% this is the content of the current paragraph
\setbox100=\vbox{#1}\relax
% this is the part of paragraph that fits into the page
\setbox101=\vsplit100to\parheight\relax
% the non-fitting section of the paragraph is now inside box100
\ifvoid100#1\par\else\unvbox101\framebreak$[\the\hsize]$\unvbox100\fi

Dies waren meine Versuche, das Problem zu lösen. Ich hoffe, dass sie jemandem etwas nützen.

verwandte Informationen