使用 cite 创建新环境

使用 cite 创建新环境

这是我在这里的第一个问题。

我想创建一个新的环境,称之为“citar”,它能实现这些东西:基本的“引用”功能,+:打开和关闭法语引号,以斜体显示文本。

到目前为止,我想在结束的 guillemets 之后放置一个 \cite 命令,使用标准 \cite 函数的参数(我正在使用 Biblatex,如果这与问题相关)

所以我尝试写:

\newenvironment{citar}[2]{\begin{quote} \og \itshape \small}{\fg \end{quote}\cite[#2]{#1}}

在序言中,

\begin{citar}{BROUDIC1999}{46}{bonjour}\end{citar}

在文档中。

遗憾的是,它不起作用。我收到“非法参数编号”警告。

我能做什么 ?

提前致谢,

马洛

编辑: - 如果您想创建一个我正在寻找的环境,请参阅 egreg 的回答。 - 如果您想自定义 csquote 包中已经存在的环境,请参阅 Clemen 的 - 但是,我发现最简单的方法是使其成为命令而不是环境,请参阅我的最后一个答案。

答案1

标准\newenvironment命令不允许在“结束部分”使用参数。

您可以使用xparse\NewDocumentEnvironment命令来完成此操作。

\begin{filecontents*}{\jobname.bib}
@article{BROUDIC1999,
 author={X. Broudic},
 title={Whatever},
 journal={Journal},
 date={1999},
}
\end{filecontents*}

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}

\usepackage{xparse}

\usepackage{csquotes}
\usepackage{biblatex}

\addbibresource{\jobname.bib}

\NewDocumentEnvironment{citar}{om}
 {\begin{quote}\begingroup\itshape\small \og\ignorespaces}
 {\fg\par\endgroup\nopagebreak
  \IfNoValueTF{#1}{\cite{#2}}{\cite[#1]{#2}}%
  \end{quote}}

\begin{document}

\begin{citar}[46]{BROUDIC1999}
bonjour bonjour bonjour bonjour
bonjour bonjour bonjour bonjour
\end{citar}

\begin{citar}{BROUDIC1999}
bonjour bonjour bonjour bonjour
bonjour bonjour bonjour bonjour
\end{citar}

\printbibliography

\end{document}

我已经将语法改为符合的语法\cite,尽管您可能希望页码始终出现。

引用标记在里面是quote为了避免在之后总是可能出现的分页符quote

在此处输入图片描述

可能会有变化。

答案2

就像 Ulrike 在评论中说的,您可以使用csquotes块环境。您的尝试看起来像csquotes'displaycquotes环境。

可以通过重新定义钩子来定制这些环境的输出

  • \mkbegdispquote{<punct>}{<cite>}
  • \mkenddispquote{<punct>}{<cite>}

但是这将影响所有 displayquote 环境csquotes(手册中第 6.1 和 6.2 节中提到的环境)。重新定义时,它们应保留两个强制参数。它们的默认定义相当于

\newcommand\mkbegdispquote[2]{}
\newcommand\mkenddispquote[2]{#1#2}

因此,下面这样的内容可能就是您想要的:

\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@article{BROUDIC1999,
 author={X. Broudic},
 title={Whatever},
 journal={Journal},
 date={1999},
}
\end{filecontents*}

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}

\usepackage{csquotes}
\usepackage{biblatex}

\addbibresource{\jobname.bib}

\renewcommand\mkbegdispquote[2]{\begingroup\small\itshape\og}
\renewcommand\mkenddispquote[2]{\fg\par\endgroup\nopagebreak#1#2}

\begin{document}

\begin{displaycquote}[46]{BROUDIC1999}
bonjour bonjour bonjour bonjour
bonjour bonjour bonjour bonjour
\end{displaycquote}

\begin{displaycquote}{BROUDIC1999}
bonjour bonjour bonjour bonjour
bonjour bonjour bonjour bonjour
\end{displaycquote}

\printbibliography

\end{document}

结果看起来与egreg 的回答

答案3

好的,非常感谢埃格尔克莱门斯,我已经尝试过您的解决方案并且它们有效,现在我想更进一步,有两种可能的方法:

  1. 继续定制我的环境

我修改了原来的“西塔尔“由 egreg 给出的环境也在引号中添加了单倍行距(我正在使用设置空间默认间距为 1.5 倍),并在右侧添加“引用”信息。所以我有:

\NewDocumentEnvironment{q}{om}
 {\begin{quote}\begingroup\begin{singlespace}\itshape\smaller \og\ignorespaces}
 {\fg\end{singlespace}\endgroup\nopagebreak
 \begin{flushright}
 \IfNoValueTF{#1}{\cite{#2}}{\cite[#1]{#2}}%
 \end{flushright}
  \end{quote}}

(我去掉了“\par”,因为我不知道它是做什么用的,没有它也能正常工作,并将“q”中的“citar”重命名为更短的)。

它在纯文本和脚注中运行良好,只是“引用”信息有点少。可能是因为单倍空间环境在他们之前就结束了。但如果我试图把单倍空间在其他地方使用时,我遇到了一些问题。\单间距在 \itshape 之前。

  1. 个性化“displaycquote”

我尝试了 Clemen 的建议,并尝试添加单倍行距。但以下情况无效:

\renewcommand\mkbegdispquote[2]{\singlespacing\begingroup\smaller\itshape\og}
\renewcommand\mkenddispquote[2]{\fg\endgroup\nopagebreak#1#2}

和 :

\renewcommand\mkbegdispquote[2]{\begingroup\begin{singlespace}\smaller\itshape\og}
\renewcommand\mkenddispquote[2]{\fg\end{singlespace}\endgroup\nopagebreak#1#2}

它工作正常,除了\引用信息现在出现在块下的新行上,而它们位于引用行的末尾,没有单倍空间环境。

  1. 环境还是命令?

我喜欢引用是写作\引用{}比开始和结束环境要短。我想知道是否有可能制作出类似以下的东西:

q[46]{BROUDIC1999}{bonjour bonjour}

而不是 :

\begin{q}[46]{BROUDIC1999}
bonjour bonjour
\end{q}

我认为这不再是一个环境,而是一个命令:问题是,如果我尝试创建一个命令,我没有像环境那样在它之前(如 \og )和之后(如 \fg )使用括号。

所以命令会更好,因为更短,但我不知道如何写它。

无论如何,感谢您已经给出的答案,多亏了您,我离我的目标越来越近了。

答案4

我最终发现命令比环境!

所以现在我有:

\newcommand{\kota}[3]{\emph{\enquote{#3}} (\cite[#1]{#2})}

\newcommand{\kotb}[3]{\begin{quote} \begin{singlespace} \smaller \og {\itshape  #3} \fg \nolinebreak
\cite[#1]{#2} \end{singlespace} \end{quote}}

\newcommand{\kotc}[3]{\footnote{\begin{quote} \begin{singlespace} \smaller  \og {\itshape  #3} \fg \nolinebreak
\cite[#1]{#2} \end{singlespace} \end{quote}}}
  • 科塔结合引用\引用
  • 科特布结合\引用\引用
  • 科特奇结合\脚注\引用, 和\引用

这样写起来会更加容易和快捷。现在,我在文档中写道:

Comme le disait ce grand Broudic, \kota{200}{BROUDIC1995}{Bonjour les amis !}. Il avait tellement raison !\kotc{133}{BROUDIC1995}{Bonjour bonjour bonjour.}

\kotb{165}{BROUDIC1995}{Bonjour bonjour bonjour}

我已经编辑了我最初的问题。

编辑添加 \nolinebreak 使 \cite 信息与引用的文本位于同一行。

相关内容