具有嵌入式命令的环境

具有嵌入式命令的环境

我正在尝试定义一个将文本放在引号中的环境 - 但是它包含一个不应被操作的 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 发现我的解决方案中的错误)。

相关内容