这是我在这里的第一个问题。
我想创建一个新的环境,称之为“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
好的,非常感谢埃格尔和克莱门斯,我已经尝试过您的解决方案并且它们有效,现在我想更进一步,有两种可能的方法:
- 继续定制我的环境
我修改了原来的“西塔尔“由 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 之前。
- 个性化“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}
它工作正常,除了\引用信息现在出现在块下的新行上,而它们位于引用行的末尾,没有单倍空间环境。
- 环境还是命令?
我喜欢引用是写作\引用{}比开始和结束环境要短。我想知道是否有可能制作出类似以下的东西:
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 信息与引用的文本位于同一行。