引用时与正常环境和 \newenvironment 的输出不同

引用时与正常环境和 \newenvironment 的输出不同

我正在尝试简化我的论文工作,因此我创建了一个重复任务的环境。一切都很好,但引用!

平均能量损失

\documentclass{article}
\usepackage[romanian]{babel}
\usepackage[backend=biber]{biblatex}
\usepackage{csquotes}
\DeclareQuoteStyle{romanian}
  {\quotedblbase}
  {\textquotedblright}
  {\guillemotleft}
  {\guillemotright}

\newenvironment{qt}[1]
      {\begin{quote}
      {\enquote{{#1}}}
      \end{quote}
      }

\begin{filecontents}{\jobname.bib}
@book{key,
 title        = {Title},
 author       = {Author, An},
 year         = {2021},
 location     = {Location},
 publisher    = {Publisher}
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}

With \textbackslash newenvironment:
\qt
{Lorem ipsum dolor \enquote{sic} amet.}
\cite{key}
\endqt

With normal environment:

\begin{quote}
\enquote{Lorem ipsum dolor \enquote{sic} amet.}
\cite{key}
\end{quote}

\printbibliography
\end{document}

输出

输出

答案1

人们对环境的工作方式存在一些误解。

首先,尽管\newenvironment{foo}{...}{...}定义了\foo\endfoo并不意味着可以在文档中使用\foo\endfoo。相反,他们应该不是

第二个问题。该命令\newenvironment需要三个强制参数:环境名称、开始时要执行的代码和结束时要执行的代码。#1第二个强制参数中的参数不引用环境内容。

您的代码

\newenvironment{qt}[1]
      {\begin{quote}
      {\enquote{{#1}}}
      \end{quote}
      }

缺少最后一个强制参数,并且由于它后面跟着一个空行,因此“结束部分”被视为\par。让我们看看调用

\qt
{Lorem ipsum dolor \enquote{sic} amet.}
\cite{key}
\endqt

被处理。宏\qt被定义为具有一个参数,我们发现它是下面的括号组。然后插入“开始部分”,我们发现

\begin{quote}{\enquote{{Lorem ipsum dolor \enquote{sic} amet.}}}\end{quote}
\cite{key}
\endqt

现在代码可以正常处理了,\cite{key}在 之外找到quote。最后\par得到 的结果\endqt

怎么修?

\documentclass{article}
\usepackage[romanian]{babel}
\usepackage[backend=biber]{biblatex}
\usepackage{csquotes}
\DeclareQuoteStyle{romanian}
  {\quotedblbase}
  {\textquotedblright}
  {\guillemotleft}
  {\guillemotright}

\newenvironment{qt}[1]
 {\begin{quote}\enquote{#1} \ignorespaces}
 {\end{quote}}

\begin{filecontents}{\jobname.bib}
@book{key,
 title        = {Title},
 author       = {Author, An},
 year         = {2021},
 location     = {Location},
 publisher    = {Publisher}
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}

With \textbackslash newenvironment:
\begin{qt}{Lorem ipsum dolor \enquote{sic} amet.}
\cite{key}
\end{qt}

With normal environment:

\begin{quote}
\enquote{Lorem ipsum dolor \enquote{sic} amet.}
\cite{key}
\end{quote}

\printbibliography
\end{document}

在此处输入图片描述

相关内容