Fazendo o texto caber em um espaço específico em Latex

Fazendo o texto caber em um espaço específico em Latex

Estou tentando encaixar meu texto em um espaço específico, pois é uma explicação em gráfico. Gostaria de fazer algo como o gráfico abaixo:

Ajustar o texto em um espaço específico

É possível fazer com que o texto caiba nesse espaço? LaTex faz isso sozinho? Um pacote ou comando deve ser usado?

Obrigado.

Responder1

RESPOSTA REVISADA (TOTALMENTE AUTOMATIZADA):

Nesta resposta revisada, invoca-se \constraintext, passando-lhe cinco argumentos:

#1A altura restrita do texto

#2a largura restrita do texto

#3o conteúdo do texto a restringir

#4uma estimativa maior ou igual à largura natural (sem escala) do conteúdo (escolher muito grande causará apenas algumas iterações extras)

#5o incremento positivo de comprimento que será subtraído da largura natural a cada iteração, em busca de satisfazer a proporção desejada.

Como mencionado, um tamanho não dimensionado \parboxé criado (no tamanho da fonte atual) usando a largura natural (input #4) como largura da caixa. A proporção de aspecto é testada. Se você selecionou #4grande o suficiente, a proporção ficará abaixo do valor desejado. Em seguida, a caixa não dimensionada fica mais estreita de acordo com um valor fornecido #5e a proporção é testada novamente. Será crescente em relação ao teste anterior. Este processo é repetido recursivamente até que a proporção testada seja igual ou exceda o valor alvo.

Nesse ponto, a caixa pode ser definida para a altura restrita ( #1), com a \parboxlargura permanecendo igual ou ligeiramente abaixo da largura restrita. O preenchimento é realizado com \hfills correspondentes para tornar a largura da composição igual à largura restrita.

Coloquei notas no MWE sobre o que comentar para remover a impressão de diagnóstico.

\documentclass{article}
\usepackage{scalerel}
\usepackage{fp}
\usepackage{lipsum}
\usepackage{stackengine}
\newcount\boxheight
\newcount\boxwidth
\newlength\constrainedwidth
\newsavebox\testbox
\newlength\currentwidth

\newcommand\aspect[1]{%
  \boxheight=\ht#1\relax%
  \boxwidth=\wd#1\relax%
  \FPdiv\testaspect{\the\boxheight}{\the\boxwidth}%
\testaspect\\%                  COMMENT THIS LINE TO REMOVE ASPECT-RATIO PRINTS
}
% TARGET-HEIGHT, TARGET-WIDTH, CONTENT, GUESS>NATURAL-WIDTH, dWIDTH
\newcommand\constraintext[5]{%
  \def\svfboxsep{\the\fboxsep}%
  \setlength\fboxsep{0pt}%
  \setlength\constrainedwidth{#2}%
  \sbox\testbox{\rule{#2}{#1}}%
TARGET ASPECT RATIO\\%          COMMENT THIS LINE TO REMOVE COMMENT
V\\%                            COMMENT THIS LINE TO REMOVE COMMENT
  \aspect{\testbox}%
  \edef\aspectratio{\testaspect}%
  \constrainsize{#1}{\aspectratio}{#3}{#4}{#5}%
  \setlength\fboxsep{\svfboxsep}%
}
\newcommand\constrainsize[5]{%
  \sbox{\testbox}{\fbox{\parbox[b]{#4}{#3}}}%
  \aspect{\testbox}%
  \FPiflt{\testaspect}{#2}%
    \setlength{\currentwidth}{#4}%
    \addtolength{\currentwidth}{-#5}%
    \constrainsize{#1}{#2}{#3}{\currentwidth}{#5}%
  \else
    \setlength\constrainedwidth{#1}%
    \FPdiv\result{1.0}{#2}%
%                               CHANGE \framebox TO \makebox TO REMOVE FRAME
    \framebox[\result\constrainedwidth]{\hfill%
      \scaleto{\parbox[b]{\currentwidth}{#3}}{#1}%
      \hfill%
    }%
  \fi%
}
\parindent 0in
\begin{document}
\constraintext{5in}{2.8in}{\lipsum[1-2]}{3in}{.02in}
\rule[-\fboxsep]{.2ex}{5in}\\
\rule{2.8in}{.2ex}
\clearpage
\constraintext{5in}{2.8in}{\lipsum[3]}{2.25in}{.02in}
\rule[-\fboxsep]{.2ex}{5in}\\
\rule{2.8in}{.2ex}
\end{document}

Dois resultados são mostrados abaixo, com fluxos de entrada de tamanhos diferentes, mas ambos configurados para a caixa final do mesmo tamanho (5 pol. x 2,8 pol.). As regras são definidas ao lado e abaixo das caixas para confirmar a precisão dos tamanhos das caixas.

Os diagnósticos são mostrados, fornecendo primeiro a proporção desejada e, em seguida, a proporção a cada iteração. Quando a proporção aumenta repentinamente, isso indica que a caixa tipográfica exigiu uma linha adicional de texto, devido à quebra automática. Quanto mais próxima a proporção final estiver do alvo, menos preenchimento horizontal será necessário para restringir a caixa.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

RESPOSTA ORIGINAL (NÃO TOTALMENTE AUTOMATIZADA):

Isso não é totalmente automatizado, mas com um pouco de iteração, dá conta do recado. Digamos que você queira colocar os dois primeiros parágrafos em uma caixa de 12 centímetros de altura por 5 centímetros de largura. Isso resulta em uma proporção de altura/largura de 2,5. Comecei colocando esses parágrafos em um quadro \parboxe (aqui está a iteração) brincando com a largura da caixa para obter a proporção correta, usando minha \aspectmacro útil (levei cerca de 4 iterações e talvez um minuto para esta fase iterativa).

Depois de obter um resultado de aspecto 2,5+/-épsilon, usei um \scaletoda scalerelembalagem para dimensionar a caixa para uma altura de 5 polegadas. A proporção garante que tenha 2 de largura. Mostro a caixa tipográfica original de 10 pontos (\x) e seu companheiro em escala.

\documentclass{article}
\usepackage{scalerel}
\usepackage{fp}
\usepackage{lipsum}
\newcount\boxheight
\newcount\boxwidth
\newcommand\aspect[1]{%
  \boxheight=\ht#1\relax%
  \boxwidth=\wd#1\relax%
  \FPdiv\result{\the\boxheight}{\the\boxwidth}\result%
}
\begin{document}
\newsavebox\x
\sbox{\x}{\fbox{\parbox[b]{2.42in}{\lipsum[1-2]}}}
\aspect{\x}

\usebox{\x}
\scaleto{\usebox{\x}}{5in}    
\end{document}

insira a descrição da imagem aqui

E quanto ao layout de sua imagem de amostra específica, reavaliei essa proporção para 1,75 como meu alvo (resultando em um tamanho de parágrafo de 5" x 20/7") e descobri isso, onde meus \rules podem ser substituídos com \includegraphics. Claro, minha altura de 15 cm é apenas um palpite, mas isso pode ser alterado.

\documentclass{article}
\usepackage{scalerel}
\usepackage{fp}
\usepackage{lipsum}
\usepackage[oldsyntax]{stackengine}
\newcount\boxheight
\newcount\boxwidth
\newcommand\aspect[1]{%
  \boxheight=\ht#1\relax%
  \boxwidth=\wd#1\relax%
  \FPdiv\result{\the\boxheight}{\the\boxwidth}\result%
}
\begin{document}
\newsavebox\x
\sbox{\x}{\fbox{\parbox[b]{2.84in}{\lipsum[1-2]}}}
%\aspect{\x}

\def\hgp{\hspace{.1in}}
\def\plotA{\protect\rule{1.36in}{0.66in}}
\def\plotB{\protect\rule{1.36in}{1.36in}}
\def\plotC{\protect\rule{1.36in}{1.36in}}
\def\plotD{\protect\rule{1.36in}{1.36in}}
\def\plotE{\protect\rule{1.36in}{1.36in}}
\def\plotF{\protect\rule{1.36in}{1.36in}\hgp}
\def\plotG{\protect\rule{1.36in}{1.36in}}

\def\stackalignment{l}
\Sstackgap=.1in
\Shortstack{{\plotA} {\plotB} {\plotC} {\plotD} {\plotE}}\hgp%
\stackon{\plotF \plotG}{\scaleto{\usebox{\x}}{5in}}

\end{document}

insira a descrição da imagem aqui

ps Estou usando o stackengine V2.0, que talvez você ainda não tenha. Até que você consiga atualizar e para que o segundo MWE funcione, basta remover a [oldsyntax]opção de pacote.

Responder2

\tcolorboxinclui biblioteca fittingcom seu comando \tcboxfit. Ele cabe seu conteúdo dentro de uma caixa de determinada largura e altura.

A seguir alguns exemplos:

\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{lipsum}
\usepackage{lmodern}

\tcbset{colframe=blue!50!black,colback=green!10!white,
boxsep=0pt,top=1mm,bottom=1mm,left=1mm,right=1mm,
nobeforeafter, arc=0pt, outer arc=0pt}

\begin{document}

\lipsum[1]

\noindent\tcboxfit[width=.5\linewidth,height=6cm]{\lipsum[1]}
\hfill
\tcboxfit[width=.45\linewidth, height=4cm]{\lipsum[1]}

\noindent\tcboxfit[width=\linewidth, height=2cm]{\lipsum[1]}

\end{document}

insira a descrição da imagem aqui

informação relacionada