Plain TeX 具有创建悬挂标点符号的方法,其中某些文本左侧的标点符号/字符有效地位于边距中。
我想对引号执行此操作,以便引号文本的正文在两侧缩进,但开头的引号位于开头字符的左侧。这是我想要的效果:
``Lord Bacon, in 'the true marshalling of the sovereign degrees of
honor,' assigns the first place to 'the Conditores Imperiorum,
founders of States and Commonwealths'; and, truly, to build up from
the discordant elements of our nature the passions, the interests,
and the opinions of the individual man, the rivalries of family, clan,
and tribe, the influences of climate and geographical position, the
accidents of peace and war accumulated for ages,– to build up from these
oftentimes warring elements a well-compacted, prosperous, and powerful
State, if it were to be accomplished by one effort or in one generation
would require a more than mortal skill.''
我可以用以下方法做到这一点quote
:
\begin{quote}
{}\hspace{-5pt}{``}Lord Bacon, in 'the true marshalling
would require a more than mortal skill.''
\end{quote}
但这似乎很笨拙。 有没有更好的方法?
答案1
你的方法{}\hspace{-5pt}{``}
很笨拙,因为你必须猜测前导引号的实际宽度``
。避免这种计算的方法是使用宏,\makebox[0pt][r]{``}
该宏放置一个右对齐的零宽度框,有效地将文本重叠到左侧。但是,如你所见,它并没有节省太多的打字时间。
因此,处理该问题的一种方法是将该宏放入其自己的宏中\def
,并将其称为\andIquote
,这样,就像在我的 MWE 的第一个例子中一样,仅仅调用它\andIquote
作为引用中的第一个项目。
也许更好的方法是创建一个新的环境,我称之为,就像我对第二个引号所做的那样quoted
,它会自动将引号放在环境的开始和结束处。
\documentclass{article}
\def\andIquote{\makebox[0pt][r]{``}}
\newenvironment{quoted}
{\quote\andIquote\ignorespaces}{\unskip''\endquote}
\begin{document}
\begin{quote}
\andIquote Lord Bacon, in 'the true marshalling
would require a more than mortal skill.''
\end{quote}
\begin{quoted}
Lord Bacon, in 'the true marshalling
would require a more than mortal skill.
\end{quoted}
\end{document}
答案2
如果我没记错的话,这是 knuth 对 的定义的理由之一\llap
;这已经延续到了 latex 中。它确实只需要在水平模式下使用,因此您应该确保\noindent
在引用段落的开头使用:
\begin{quote}
\noindent\llap{``}Lord Bacon, in 'the true marshalling ...
答案3
除了 Steven Segletes 的答案之外,您可能(就界面而言)考虑使用引用包,它提供了各种钩子来生成显示引文的自动环境。这样做的潜在好处是,它避免了在任何引文开头添加的需要\andIquote
:假设您希望所有引文都以这种方式设置样式,它会自动为您完成。
“用户”语法是
\begin{displayquote}[cite][closing-punctuation]
...
\end{displayquote}
使用提供的“钩子” \mkbegispquote
,\mkenddispquote
您可以安排在每个显示的引文周围自动放置开始和结束引号。(我还展示了 Steven 将引号放在页边距中的另一种方法,尽管他的这种方法同样有效。)
\documentclass{article}
\usepackage{csquotes}
\renewcommand{\mkbegdispquote}[2]{\strut\llap{``}}
% #1 is closing punctuation, #2 is citation.
% We don't use them in this instance, but they
% need to be "catered for"
\renewcommand{\mkenddispquote}[2]{#1''\ifblank{#2}{}{#2}}
% #1 is closing punctuation, #2 is citation.
% again, we provide for them if needed
\begin{document}
\begin{displayquote}
Here is a displayed quotation, which should be long enough to go over a number
of lines. In this case I have not specified any closing punctuation or citation
for the quotation.
\end{displayquote}
\begin{displayquote}[][\ldots]
Here is another displayed quotation. In this case there is some specified
punctuation which goes at the end of the quotation before the closing mark.
\end{displayquote}
\begin{displayquote}[cite]
Here is yet another displayed quotation, this time with a citation to be included
in the mix, which will be printed at the end of the quotation, after the quotes
are closed.
\end{displayquote}
\end{document}