Flowfram: problema con el ancho del texto

Flowfram: problema con el ancho del texto

Estoy aprendiendo el paquete flowfram y pretendo utilizarlo de forma sencilla: configurar algunos marcos en la página y hacer que el texto fluya. Mis marcos tienen diferentes anchos y leí en el manual de flowfram que: «El comando \framebreak se proporciona para situaciones en las que un párrafo abarca dos marcos de flujo de diferentes anchos, ya que la rutina de salida de TEX no se ajusta al nuevo valor de \hsize hasta que Ha finalizado el último párrafo del cuadro anterior.» ¿Existe alguna solución para agregar descansos manuales? También hay otro problema: una brecha inesperada entre fotogramas.

Por favor consulte mi MWE y dígame si hago algo mal. Gracias.

(PD: Lo siento, pero necesitaba usar texto real para mostrar el uso de \framebreak, así que usé este artículo muy interesante disponible públicamente que estaba leyendo: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}

Respuesta1

La clave para usarlo es formatear la página tal como está, encontrar dónde ocurren los saltos y agregar \framebreaken esas ubicaciones.

\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}

Respuesta2

Primero, he agregado \usepackage[T1]{fontenc}para eliminar el error sobre el «y el »en el texto (sin él, obtendrásError de LaTeX: el comando \guillemetright no está disponible en la codificación OT1.). Además, necesita esta opción de paquete para eliminar la advertencia.Advertencia: la codificación OT1 no debe usarse para francés(porque, ver más abajo, usamos la frenchopción paraBabel.

Con la ayuda delmicrotipopaquete (para reducir los caracteres para que quepan mejor en la columna estrecha), elfrench Babelopción (para guiones) y algo de ayuda para darle a LaTeX más posiciones de guiones (con \-), puede obtenerdespués de varias pruebasun resultado decente. Por ejemplo, sin Kamin\-skyusted obtendrá hbox completo (separación de palabras enKa-minskyen lugar deKamin-sky). Otro ejemplo, la palabra "devenu" ( deve\-nu), porque por defecto aquí no hay separación de palabras para evitar tener "nu" al principio de una línea ("nu" es "desnudo" en francés).

NOTA: También utilicé el truco \baselineskipdel comentario de John Kormylo en su propia respuesta.

\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}

ingrese la descripción de la imagen aquí

Respuesta3

He decidido publicar una respuesta a esta pregunta porque incluso la respuesta aceptada no es la solicitada, es decir, unasolución automática. En primer lugar, señalaré que se trata de unproblema conocido del paqueteeso proviene de una limitación central de TeX*. Además de eso quiero que sepas que no soy un experto en TeX y que esto esno es una solución perfecta. Quizás alguien más capacitado que yo pueda ampliar este concepto a una solución completamente funcional, aunque dudo que este sistema tenga mucho más potencial.

Ejemplo de cómo funciona y falla el sistema Figura: Ejemplo de cómo funciona y falla el sistema

Primero, un poco de contexto. Aquí defino el diseño de la página.

\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

También almacené la cantidad de cuadros para su uso posterior. Aquí defino una \modulomacro para calcular #1 mod #2y poner el resultado dentro \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
}

A continuación se muestra el núcleo del sistema que resuelve el problema. La \myparmacro se come el siguiente párrafo y hace tres cosas:

  • primero calcula el espacio disponible en el marco;
  • luego adivina el número de líneas que caben dentro del espacio restante;
  • finalmente usa \hangaftery \hangindentpara ajustar la diferencia de ancho.

El hecho de que TeX decida cuántas líneas poner en este marco y cuántas líneas poner en el siguiente marco utilizando algoritmos bastante complejos impide que este sistema simple determine el número correcto de líneas que caben en la página cada vez. Como puede ver en la segunda página de este ejemplo, el sistema es, de hecho, falible.

\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}

La suma de todos los fragmentos de código anteriores es un ejemplo práctico.

*Esta limitación es lo que impidió que mi primer intento funcionara; Puedes encontrar mi primer intento a continuación.

% 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

Estos fueron mis intentos de resolver el problema. Espero que alguien se beneficie de ellos.

información relacionada