如何配置/重新定义引用环境来引用?

如何配置/重新定义引用环境来引用?

我想重新定义quotationquote环境,以便我有一个不同的演示风格,例如大引号或全部斜体、右对齐等。

我还想引用来源(真正的引用,或作者引用...)。

这就是我所拥有的:

\renewenvironment{quote} %[1]
{
  {\rightmargin\leftmargin}
  \relax
  {\Large\textbf{``}}
}
{
  {\Large\textbf{''}}
  %\hfill\citeauthor{#1} \cite{#1}
}

我的问题:

  • {\rightmargin\leftmargin}在小于全宽的范围内居中不起作用,我从原始quote环境中复制了它。env quotation. 使用list环境来执行此操作,但这也会改变段落间距,而我不希望这样。定义我想要的宽度和我想要居中的位置的正确方法是什么?
  • 引用本身的注释部分不起作用,我想用它作为\begin{quote}{someBibRef}Some bla bla bla.\end{quote}
    参数被正确传递,我可以打印它,但我不能将它与引用命令一起使用。输出看起来像##1 [##1],错误日志显示Illegal parameter number in definition of \endquote }
  • 我怎样才能\citeauthor显示作者的全名而不仅仅是姓氏?
  • 我希望这最后一部分出现在右边的新行中,但我还没有找到同时做到这一点的方法。

我正在使用biblatexbiber 作为后端。

答案1

这是一个quote使用NewDocumentEnvironment以下方法重新定义环境的解决方案:xparse包裹。

\let\oldquote\quote
\let\endoldquote\endquote

\RenewDocumentEnvironment{quote}{m}{%
    \oldquote
    \itshape
    \setlength{\rightmargin}{\leftmargin}
    {\Large\textbf{``}}
}
{%
    {\Large\textbf{''}}
    \item[]\mbox{}\hfill\cite{#1}\citeauthor{#1}
    \endoldquote
}

必须使用这个包,因为为什么环境的结束代码不能包含参数?,我们不能#1在常规环境的末尾使用latex

请注意,我使用了环境的原始定义quote,并添加了行

    \setlength{\rightmargin}{\leftmargin}

它设置了边距(如您所说,quote环境是根据列表定义的)。我还添加了

    \item[]\mbox{}\hfill\cite{#1}\citeauthor{#1}

到环境的末尾,根据需要添加引用。如果您担心项目之间的分页符,则可能需要添加一些代码。

截屏

% arara: pdflatex
% arara: biber
% arara: pdflatex
% !arara: indent: {overwrite: yes}
\documentclass{article}
\usepackage{lipsum}
\usepackage{xparse}
\usepackage[backend=biber]{biblatex}
\usepackage[colorlinks=true,linkcolor=blue]{hyperref}
\addbibresource{mybib.bib}

\let\oldquote\quote
\let\endoldquote\endquote

\RenewDocumentEnvironment{quote}{m}{%
    \oldquote
    \itshape
    \setlength{\rightmargin}{\leftmargin}
    {\Large\textbf{``}}
}
{%
    {\Large\textbf{''}}
    \item[]\mbox{}\hfill\cite{#1}\citeauthor{#1}
    \endoldquote
}

\begin{document}
\lipsum[1]
\begin{quote}{kn:gnus}
    \lipsum[1]
    finishing text
\end{quote}

Now is the time.
\nocite{*}

\printbibliography

\end{document}

mybib.bib

@online{kn:gnus,
author= {{David Arnold}},
title= {Writing Scientific Papers in \LaTeX},
url = {http://msemac.redwoods.edu/~darnold/math55/WritingScientificPapers/project_latex.pdf}
}

答案2

我不鼓励你重新定义quote环境,特别是如果你改变它的语法以想要一个强制参数。

因为这似乎是用于特定目的,所以最好定义一个新的环境。

\begin{filecontents*}{\jobname.bib}
@online{kn:gnus,
author= {{David Arnold}},
title= {Writing Scientific Papers in \LaTeX},
url = {http://msemac.redwoods.edu/~darnold/math55/WritingScientificPapers/project_latex.pdf}
}
\end{filecontents*}

\documentclass{article}
\usepackage{xparse}
\usepackage[backend=biber]{biblatex}
\usepackage{quoting}

\usepackage{kantlipsum}

\usepackage[colorlinks=true,linkcolor=blue]{hyperref}

\addbibresource{\jobname.bib}

\NewDocumentEnvironment{citequote}{m}
 {%
  \begin{quoting}[indentfirst=false,font=itshape]
  \bigquotes{r}{``}\ignorespaces
 }
 {%
  \unskip\bigquotes{l}{''}%
  \item\relax\hspace*{\fill}\citeauthor{#1}\ \textup{\cite{#1}}%
   \end{quoting}
 }
\newcommand{\bigquotes}[2]{%
  \makebox[0pt][#1]{%
    \raisebox{\dimexpr\fontcharht\font`A-\height}{\Large\bfseries#2}%
  }%
}

\begin{document}
\kant[1]
\begin{citequote}{kn:gnus}
\kant*[2]
And so it ends.
\end{citequote}

Now is the time.
\nocite{*}

\printbibliography

\end{document}

(我厚颜无耻地使用了 cmhughes 的参考和结构。)

quoting同名包提供的环境可以轻松定制。

还请注意,我改变了大引文的高度;如果保持自然状态,结尾的引文会使引用前最后两行之间的行距过大。它们都是“悬空”的,只需删除部分即可\makebox[0pt]避免悬空。

在此处输入图片描述

相关内容