可能であれば、引用と同じ行に引用の帰属を右揃えにするにはどうすればよいでしょうか?

可能であれば、引用と同じ行に引用の帰属を右揃えにするにはどうすればよいでしょうか?

多くの場合、引用は右揃えで表示されます。

引用文の下の行に右揃えの帰属表示がある引用文

帰属は引用文の後の新たな行にあります。ただし、引用文の最後の行に帰属を記入するのに十分な空きスペースがあると仮定します。その場合、余分な空白を避けるために、帰属を同じ行に記入した方がよいかもしれません。

同じ行に右揃えの引用文を記載

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空行を埋める長さを見つけます。\hfillの公称長さは常に 0 なので、 は使用できません。代わりに、 パッケージを使用しますlinegoal

xifthen条件を記述できるようにするためにも を使用します。

パスは2回必要になります。

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

関連情報