![引用时与正常环境和 \newenvironment 的输出不同](https://linux22.com/image/428083/%E5%BC%95%E7%94%A8%E6%97%B6%E4%B8%8E%E6%AD%A3%E5%B8%B8%E7%8E%AF%E5%A2%83%E5%92%8C%20%5Cnewenvironment%20%E7%9A%84%E8%BE%93%E5%87%BA%E4%B8%8D%E5%90%8C.png)
我正在尝试简化我的论文工作,因此我创建了一个重复任务的环境。一切都很好,但引用!
平均能量损失
\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}