Flowfram - problema de largura do texto

Flowfram - problema de largura do texto

Estou aprendendo o pacote flowfram e pretendo um uso simples de definir alguns frames na página e fazer com que o texto flua. Meus quadros têm larguras diferentes e li no manual do flowfram que: «O comando \framebreak é fornecido para situações onde um parágrafo abrange dois quadros de fluxo de larguras diferentes, pois a rotina de saída do TEX não se ajusta ao novo valor de \hsize até que o o último parágrafo do quadro anterior terminou.» Existe uma solução alternativa para adicionar pausas manuais? Há também outro problema: uma lacuna inesperada entre os frames.

Por favor, consulte meu MWE e me diga se eu fizer algo errado. Obrigado.

(PS: Desculpe, mas eu precisava usar texto real para mostrar o uso do \framebreak, então usei este artigo muito interessante disponível publicamente que estava lendo: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}

Responder1

A chave para usá-lo é formatar a página como está, descobrir onde ocorrem as quebras e adicionar \framebreaknesses locais.

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

Responder2

Primeiro, adicionei \usepackage[T1]{fontenc}para eliminar o erro sobre o «e o» no texto (sem ele, você obteráErro LaTeX: Comando \guillemetright indisponível na codificação OT1.). Além disso, você precisa desta opção de pacote para eliminar o avisoAviso: a codificação OT1 não deve ser usada para francês(porque, veja abaixo, usamos ofrench opção parababel.

Com a ajuda domicrotipopacote (para reduzir os caracteres para que caibam melhor na coluna estreita), ofrench babelopção (para hifenizações) e alguma ajuda para dar ao LaTeX mais posição de hifenizações (com\- ), você pode obterdepois de várias tentativasum resultado decente. Por exemplo, semKamin\-sky você obterá hbox insuficientemente preenchido (hifenização emKa-minskyem vez deKamin-céu). Outro exemplo, a palavra "devenu" ( deve\-nu), porque por padrão não há hifenização aqui para evitar ter "nu" no início de uma linha ("nu" é "nu" em francês).

NOTA: Também usei o truque \baselineskipdo comentário de John Kormylo em sua própria resposta.

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

insira a descrição da imagem aqui

Responder3

Decidi postar uma resposta para esta pergunta porque mesmo a resposta aceita não é a solicitada, ou seja, umasolução automática. Em primeiro lugar, salientarei que se trata de umproblema conhecido do pacoteisso vem de uma limitação central do TeX*. Além disso, quero que você saiba que não sou especialista em TeX e que isso énão é uma solução perfeita. Talvez alguém mais habilidoso do que eu consiga expandir este conceito para uma solução totalmente funcional, embora eu duvide que este sistema tenha muito mais potencial.

Exemplo de como o sistema funciona e falha Figura: Exemplo de como o sistema funciona e falha

Primeiro, um pouco de contexto. Aqui eu defino o layout da 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

Também armazenei o número de quadros para uso posterior. Aqui defino uma \modulomacro para calcular #1 mod #2e colocar o resultado dentro de \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
}

Abaixo está o núcleo do sistema que resolve o problema. A \myparmacro come o parágrafo a seguir e faz três coisas:

  • primeiro calcula o espaço disponível no quadro;
  • então ele adivinha o número de linhas que caberão no espaço restante;
  • finalmente ele usa \hangaftere \hangindentpara ajustar a diferença de largura.

O fato de o TeX decidir quantas linhas colocar neste quadro e quantas linhas colocar no próximo quadro usando algoritmos bastante complexos impede que este sistema simples determine sempre o número correto de linhas que cabem na página. Como você pode ver na segunda página deste exemplo, o sistema é de fato falível.

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

A soma de todos os trechos de código acima é um exemplo prático.

*Essa limitação foi o que impediu que minha primeira tentativa funcionasse; você pode encontrar minha primeira tentativa abaixo

% 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

Essas foram minhas tentativas de resolver o problema. Espero que alguém se beneficie deles.

informação relacionada