Freqüentemente, as citações são definidas com a atribuição alinhada à direita:
A atribuição está em uma nova linha após a citação. Suponhamos, entretanto, que houvesse espaço vazio suficiente na última linha da citação para conter a atribuição. Então, podemos querer que esteja na mesma linha para evitar espaços em branco excessivos.
Gostaríamos de definir um comando (chame-o de quoteattr
) que calcule se a cotação caberá e a colocará de acordo, automaticamente.
Código sem definição de comando:
\documentclass[12pt]{book}
\begin{document}
\quoteattr{Early to bed and early to rise,\\
Makes a man healthy, wealthy, and wise.}{Benjamin Franklin, 1706--1790}
\quoteattr{Seek not the favor of the multitude; it is seldom got by honest and lawful means. But seek the testimony of few; and number not voices, but weigh them.}{Immanuel Kant, 1724--1804}
\end{document}
Responder1
Parece que o tabto
pacote pode ajudar neste aspecto.
\documentclass[12pt]{book}
\usepackage{tabto}
\def\quoteattr#1#2{\setbox0=\hbox{#2}#1\tabto{\dimexpr\linewidth-\wd0}\box0}
\parskip 1em
\begin{document}
\quoteattr{Early to bed and early to rise,\\
Makes a man healthy, wealthy, and wise.}{Benjamin Franklin, 1706--1790}
\quoteattr{Seek not the favor of the multitude; it is seldom got by honest and lawful means. But seek the testimony of few; and number not voices, but weigh them.}{Immanuel Kant, 1724--1804}
\quoteattr{In attempting to make this not give enough space... Seek not the favor of the multitude; it is seldom got by honest and lawful means. But seek the testimony of few; and number not voices, but weigh them.}{Immanuel Kant, 1724--1804}
\end{document}
Responder2
Isso pode ser tratado no estilo TeX clássico com uma macro deO TeXBook, p106, apenas brincando com penalidades, pulos e caixas:
\def\signed #1 (#2){{\unskip\nobreak\hfil\penalty50
\hskip2em\hbox{}\nobreak\hfil\sl#1\/ \rm(#2)
\parfillskip=0pt \finalhyphendemerits=0 \par}}
Isso permitirá que você insira suas cotações da seguinte forma:
\begin{quote}Here is one way to solve the problem.
\signed Donald E. Knuth (Berkeley, CA)
\end{quote}
Se houver espaço para 2em e a assinatura na mesma linha, lá vai; caso contrário, ele seguirá para uma nova linha. Claro, talvez você queira apenas um nome, em vez de nome e localização, ou talvez prefira um pouco mais no estilo LaTeX; nesse caso, você poderia fazer algo assim:
\def\signed#1{{\unskip\nobreak\hfil\penalty50
\hskip2em\hbox{}\nobreak\hfil\sl#1
\parfillskip=0pt \finalhyphendemerits=0 \par}}
E você inseriria como acima, mas com \signed{Donald E. Knuth}
.
Responder3
Para implementar isso, usaremos \newsavebox
para encontrar o comprimento do preenchimento da linha vazia. Não podemos usar \hfill
, pois sempre tem comprimento nominal 0. Em vez disso, usaremos o linegoal
pacote.
Também usaremos xifthen
para nos permitir escrever a condição.
Serão necessárias duas passagens.
\documentclass[12pt]{book}
\usepackage{linegoal}
\usepackage{xifthen}
\newsavebox{\quotebox}
\newlength{\emptywidth}% To save the length of empty space
\newlength{\attrwidth}% To save the length of the attribution
% Define the new command
\newcommand{\quoteattr}[2]{
\begin{quote}#1%
\begin{lrbox}{\quotebox}\hspace{\linegoal}\end{lrbox}
\setlength{\emptywidth}{\linegoal}
\settowidth{\attrwidth}{\textit{#2}}
% The following line can be tweaked to force attributions
% onto a new line if it would be a very tight squeeze
\addtolength{\attrwidth}{0em}
% Compare the two widths.
\ifthenelse{\lengthtest{\emptywidth>\attrwidth}}
% If it fits:
{\null\hfill\textit{#2}}
% If it doesn't:
% We need to provide a stretch in this way because TeX
% might compress a slightly-too-long line to prevent
% a loose line followed by a lonely word. However, then
% on the next run, TeX won't compress it because of the
% following text on a new line.
{\hspace{0pt plus \textwidth minus 3pt}\null\nopagebreak\linebreak\null\hfill{\textit{#2}}}%
% For debugging, display the lengths.
Empty space: \the\emptywidth
\\Attribution space: \the\attrwidth
\end{quote}
}
\begin{document}
\quoteattr{Early to bed and early to rise,\\
Makes a man healthy, wealthy, and wise.}{Benjamin Franklin, 1706--1790}
\quoteattr{Seek not the favor of the multitude; it is seldom got by honest and lawful means. But seek the testimony of few; and number not voices, but weigh them.}{Immanuel Kant, 1724--1804}
\end{document}