인용문은 속성이 오른쪽으로 정렬된 상태로 설정되는 경우가 많습니다.
귀속은 인용문 뒤의 새 줄에 있습니다. 그러나 인용의 마지막 줄에 귀속을 담기에 충분한 빈 공간이 있다고 가정해 보십시오. 그런 다음 과도한 공백을 피하기 위해 같은 줄에 있기를 원할 수 있습니다.
quoteattr
우리는 견적이 적합한지 계산하고 그에 따라 자동으로 배치하는 명령(호칭)을 정의하려고 합니다 .
명령 정의가 없는 코드:
\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}
답변1
tabto
이와 관련하여 패키지가 도움이 될 수 있는 것 같습니다 .
\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}
답변2
이는 다음의 매크로를 사용하여 고전적인 TeX 방식으로 처리할 수 있습니다.TeXBook, p106, 페널티, 건너뛰기 및 상자를 조작하면 됩니다.
\def\signed #1 (#2){{\unskip\nobreak\hfil\penalty50
\hskip2em\hbox{}\nobreak\hfil\sl#1\/ \rm(#2)
\parfillskip=0pt \finalhyphendemerits=0 \par}}
그러면 다음과 같이 견적을 입력할 수 있습니다.
\begin{quote}Here is one way to solve the problem.
\signed Donald E. Knuth (Berkeley, CA)
\end{quote}
같은 줄에 2em과 서명을 위한 공간이 있으면 거기에 있습니다. 그렇지 않으면 새 줄로 이동합니다. 물론 이름이나 위치보다는 이름만 원할 수도 있고, 좀 더 LaTeX 스타일을 원할 수도 있습니다. 이 경우 다음과 같이 할 수 있습니다.
\def\signed#1{{\unskip\nobreak\hfil\penalty50
\hskip2em\hbox{}\nobreak\hfil\sl#1
\parfillskip=0pt \finalhyphendemerits=0 \par}}
위와 같이 입력하지만 \signed{Donald E. Knuth}
대신에 다음을 사용합니다.
답변3
\newsavebox
이를 구현하기 위해 빈 줄을 채우는 길이를 찾는 데 사용합니다 . 는 항상 명목 길이가 0이므로 사용할 수 없습니다 \hfill
. 대신 패키지를 사용하겠습니다 linegoal
.
xifthen
또한 조건을 작성하는 데에도 사용할 것입니다 .
두 번의 패스가 필요합니다.
\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}