我正在尝试定义一个将文本放在引号中的环境 - 但是它包含一个不应被操作的 cite 命令。
例子:
\begin{myEnv}
this text in quotes. \autocite[p.123]{author.2019}
\end{myEnv}
最终结果应如下所示:
“此文字用引号括起来。”(作者,2019 年,第 123 页)
目前这是 myEnv 的定义:
\newenvironment{myEnv}{\grqq}{\grqq}
看起来像这样:
“此文字在引号中。(作者,2019,第 123 页)”
有什么方法可以“排除” cite 命令被解析?
答案1
这使用类似的方法LokiRagnarok 的答案并假设你总是结尾您的myEnv
环境\autocite
(或类似;根据需要更改)。
\documentclass{article}
\usepackage{biblatex}
\newenvironment{myEnv}
{\let\oldautocite\autocite
\renewcommand{\autocite}{\unskip ''~\oldautocite}%
``\ignorespaces}
{\par}
\addbibresource{biblatex-examples.bib}
\begin{document}
\begin{myEnv}
this text in quotes. \autocite[p.~123]{augustine}
\end{myEnv}
\begin{myEnv}
Another text in quotes. \autocite{companion}
\end{myEnv}
\printbibliography
\end{document}
答案2
您可以利用正则表达式:
\documentclass{article}
\usepackage{biblatex}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentEnvironment{myEnv}{b}
{
\tl_set:Nn \l__razorhall_myenv_tl { #1 }
\regex_replace_once:nnN
{ (.*) (\s\c{autocite}.*) \Z }
{ ``\1''\c{nobreakspace}\2 }
\l__razorhall_myenv_tl
\begin{quote}
\tl_use:N \l__razorhall_myenv_tl
\end{quote}
}{}
\ExplSyntaxOff
\addbibresource{biblatex-examples.bib}
\begin{document}
\begin{myEnv}
this text in quotes. \autocite[p.~123]{augustine}
\end{myEnv}
\begin{myEnv}
Another text in quotes. \autocite{companion}
\end{myEnv}
\printbibliography
\end{document}
答案3
针对无法更改环境调用的版本进行了更新:
\documentclass{article}
\usepackage[ngerman]{babel} %grqq
\usepackage{xpatch}
\newenvironment{myEnv}{%
\let\oldcite\cite %save original macro
\xpretocmd{\cite}{\makebox[0em][r]{\grqq}}{}{}%
%prepend grqq to every cite and gobble a bit of space to the left
% prepend grqq to your TEXT
\grqq}{%
\let\cite\oldcite% %switch back to old version
}
\begin{document}
\begin{myEnv}
first text in quotes. \cite[p.123]{author.2019}
\end{myEnv}
\begin{myEnv}
second text in quotes. \cite[p.123]{author.2019}
\end{myEnv}
This is a simple cite. \cite{new citation}
\begin{myEnv}
third text in quotes. \cite[p.123]{author.2019}
\end{myEnv}
\end{document}
通用版本:
使用一个参数作为您传递引用的环境。
\usepackage{xparse}
....
\NewDocumentEnvironment{myEnv}{ m }{%
\grqq%
}{%
\grqq #1%
}
像这样使用它:
\begin{myEnv}{\autocite[p.123]{author.2019}}
this text in quotes.
\end{myEnv}
(感谢 Phelype Oleinik 发现我的解决方案中的错误)。