Hola chicos. Nuestro instituto tiene algunos requisitos de formato especiales y me pregunto si uno de ellos puede automatizarse mediante alguna ingeniosa magia de LaTex:
Un título (también secciones y subsecciones) está colocado a la derecha. Sin embargo, el salto de línea se realiza de tal manera que la línea siguiente es más larga que la línea anterior (con la excepción de la última línea, si no es posible mantenerla). Sin embargo, no se pretende tener la última línea completamente \textwith sino encontrar el primer punto de interrupción que de alguna manera hace que la siguiente línea sea un poco más larga.
Así que aquí hay algunos ejemplos:
Este:
This is an example of a very long caption of a figure which might be too long to stay in one line so that it will automatically jump to a new line.
Debería convertirse en esto:
This is an example of a very long caption of a figure which might be too long to stay in one line so that it will automatically jump to a new line instead.
This is an example of a very long caption of a figure which might be too long to stay in one line so that it will automatically jump to a new line instead but now it is even more text.
Tengo mucha curiosidad por saber si este tipo de formato se puede automatizar.
Todo lo mejor, Bernte.
Respuesta1
esto comienza con la primera línea siendo la mitad del ancho y luego se hace más larga... Advierte mucho en el registro...
\documentclass{article}
\usepackage{shapepar}
\makeatletter
\def\zzshape#1{%
{0}%
{0}b{0}\\%
{0}t{0}{10}\\%
{#1}t{0}{20}\\%
{#1}e{20}%
}
\def\zzzshape{\zzshape\count@}
\def\zz#1{%
\count@=1 %
\loop
\setbox0\hbox{\Shapepar\zzzshape#1\par}%
\ifdim\wd0>\linewidth
\advance\count@\@ne
\repeat
\usebox0
\par}
\begin{document}
\raggedright
\setlength\parskip\bigskipamount
\zz{%
This is an example of a very long caption of a figure which might be
too long to stay in one line so that it will automatically jump to a
new line.}
\zz{%
This is an example of a very long caption of a figure which might be
too long to stay in one line so that it will automatically jump to a
new line.
This is an example of a very long caption of a figure which might be
too long to stay in one line so that it will automatically jump to a
new line.}
\zz{%
This is an example of a very long caption of a figure which might be
too long to stay in one line so that it will automatically jump to a
new line.
This is an example of a very long caption of a figure which might be
too long to stay in one line so that it will automatically jump to a
new line.
This is an example of a very long caption of a figure which might be
too long to stay in one line so that it will automatically jump to a
new line.}
\zz{%
This is an example of a very long caption of a figure which might be
too long to stay in one line so that it will automatically jump to a
new line.
This is an example of a very long caption of a figure which might be
too long to stay in one line so that it will automatically jump to a
new line.
This is an example of a very long caption of a figure which might be
too long to stay in one line so that it will automatically jump to a
new line.
This is an example of a very long caption of a figure which might be
too long to stay in one line so that it will automatically jump to a
new line.}
\end{document}
o con
\def\zzshape#1{%
{0}%
{0}b{0}\\%
{0}t{0}{17}\\%
{#1}t{0}{20}\\%
{#1}e{20}%
}
obtienes un bloque más rectangular:
Respuesta2
Esto intenta crear un triángulo para reemplazar el espacio extra en la última línea. No del todo perfeccionado, ya que me gustaría evitar la separación de palabras y terminar siempre con una línea completa al final. Se pueden corregir errores mediante el uso cuidadoso de \rlap
. Por ejemplo, exam\rlap{ple}
.
Probablemente esto sea incompatible con todos los paquetes que modifican \@makecaption
.
\documentclass[12pt]{article}
\makeatletter
\long\def\@makecaption#1#2{\bgroup
\vskip\abovecaptionskip
\sbox\@tempboxa{#1: #2}%
\ifdim \wd\@tempboxa < \hsize
\global \@minipagefalse
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
\else
\ifdim \wd\@tempboxa < 2\hsize
\dimen0=\dimexpr \wd\@tempboxa - \hsize\relax
\parshape=2 0pt \dimen0 0pt \hsize
#1: #2\par
\else
\count1=\numexpr \wd\@tempboxa/\hsize\relax% number lines
\dimen0=\dimexpr \count1\hsize - \wd\@tempboxa\relax% extra space
\ifdim \dimen0 < 0pt
\advance \count1 by 1
\advance \dimen0 by \hsize
\fi
\count2=\numexpr \count1-1\relax
\dimen1=\dimexpr 2\dimen0/\count1/\count2\relax% increment
\ifdim\dimen1 < 2em\relax
\count2=\count1
\advance\count1 by 1
\advance\dimen0 by \hsize
\dimen1=\dimexpr 2\dimen0/\count1/\count2\relax
\fi
\dimen2=\dimexpr \hsize - \count2\dimen1\relax
\edef\@makecaptionparshapeargs{\the\count1}% \parshape arguments
\loop\ifnum\count1>0\relax
\edef\@makecaptionparshapeargs{\@makecaptionparshapeargs\space0pt \the\dimen2}%
\advance\count1 by -1
\advance\dimen2 by \dimen1
\repeat
\parshape=\@makecaptionparshapeargs
#1: #2\par
\fi
\fi
\vskip\belowcaptionskip
\egroup}
\makeatother
\begin{document}
\begin{figure}
\caption{Short cpation.}
\caption{This is an example of a very long caption of a figure which might be
too long to stay in one line.}
\caption{This is an example of a very long caption of a figure which might be
too long to stay in one line so that it will automatically jump to a
new line.}
\caption{This is an example of a very long caption of a figure which might be
too long to stay in one line so that it will automatically jump to a
new line.
This is an example of a very long caption of a figure which might be
too long to stay in one line so that it will automatically jump to a
new line.}
\caption{This is an example of a very long caption of a figure which might be
too long to stay in one line so that it will automatically jump to a
new line.
This is an example of a very long caption of a figure which might be
too long to stay in one line so that it will automatically jump to a
new line.
This is an example of a very long caption of a figure which might be
too long to stay in one line so that it will automatically jump to a
new line.}
\end{figure}
\end{document}