我只是想知道是否可以将引用命令(最好是biblatex
)与引用环境结合起来。
原因是这样的:
在德语试卷中你通常有两种选择(除了一些正式的选择)。
- 您可以使用释义/摘要,并添加带有缩写的来源“是。“(英语比较)”
- 或者你使用带引号的直接引用和不带“是。“。
将它们链接在一起可以为作者节省一些工作,因为它避免了手动调整的需要。
两个例子:
这是一份摘要。(Vgl. Bauer 2009)
“这是一个引文” (Bauer 2009)
我的问题是:
是否可以\cite
以引用敏感的方式定义命令,
- 自动生成是。
(Bauer 2009)
在引号环境中使用时,输出会更少(例如“ ”)? - 产生是。
(Vgl. Bauer 2009)
不使用引号时输出(例如“ ”)?
答案1
假设 a)“引号环境”实际上代表引号内的文本 b) 您愿意使用csquotes
包来处理引号(请注意,建议使用它biblatex
),您可以执行以下操作:
声明一个新的布尔开关
withintextquote
(最初设置为 false);修补
biblatex
' bibmacro,以便当开关设置为 false时prenote
,它将添加(新的)参考书目字符串compare
和一个空格;withintextquote
修补
csquotes
'内部\csq@tquote@i
宏,以便它将withintextquote
开关本地设置为 true。
compare
编辑:如果用户在引用命令中添加明确的预注,则自动预注将被覆盖。
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[style=authoryear]{biblatex}
\NewBibliographyString{compare}
\DefineBibliographyStrings{ngerman}{%
compare = {vgl\adddot},
}
\usepackage{csquotes}
\SetCiteCommand{\autocite}
% \usepackage{etoolbox}% loaded by `biblatex`
\newbool{withintextquote}
\makeatletter
\patchcmd{\csq@tquote@i}{\begingroup}{\begingroup\booltrue{withintextquote}}{}{}
\makeatother
\renewbibmacro*{prenote}{%
\iffieldundef{prenote}{%
\ifbool{withintextquote}{%
}{%
\bibstring{compare}\addspace
}%
}
{\printfield{prenote}%
\setunit{\prenotedelim}}}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{A01,
author = {Author, A.},
year = {2001},
title = {Alpha},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
This is a paraphrase \autocite{A01}
This is a paraphrase with prenote \autocite[siehe hierzu auch][]{A01}
\textcquote{A01}{This is a direct quotation}
\printbibliography
\end{document}
答案2
由于引用的文本是文本,而预注是文本,因此引用的文本可以是预注(在逻辑层面上)。
在实践层面:
一个实验(使用宏来存储和引用文本,以便以后实现潜在的自动化):
\cite[\qmenquote{\qmuseq{q001}} \textemdash ][]{abook}
其中\qmenquote
定义为
\newcommand\qmenquote[1]{\enquote{#1}}% from the csquotes package
定义\qmuseq
为
\newcommand\qmuseq[1]{\csname qm:#1\endcsname}
CSqm:q001
定义为
\expandafter\newcommand\csname qm:q001\endcsname{The cat sat on the mat.}
给出
对于abook
bib 文件中给定的条目和english
的选项csquotes
。
其潜在用途是,prenote 是一个变量,而 \cite 在一个版本中被“扩展”以包含引用,而在另一个版本中则包含 cf(或释义,或什么都没有)。
这表明,在“垂直”维度上实现自动化的可能性,而不是(或除了)“水平”方向——即,例如,通过循环或条件。应用可以是音译,也可以是翻译,也可以是原文。
代码列表中的最后一项:
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@book{abook,
author = {An Author},
title = {A Title)},
date = {2019-04-16},
location={A Location},
publisher={A Publisher},
}
\end{filecontents*}
\documentclass[12pt]{article}
\usepackage[english]{babel}
\usepackage[english=british]{csquotes}
%\usepackage[french]{babel}
%\usepackage{csquotes}
\usepackage[style=authoryear]{biblatex}
\addbibresource{\jobname.bib}
\expandafter\newcommand\csname qm:q001\endcsname{The cat sat on the mat.}
\newcommand\mycf{\textit{Vgl.}}
\newcommand\qmuseq[1]{\csname qm:#1\endcsname}
\newcommand\qmenquote[1]{\enquote{#1}}
\newcommand\qmaddsep[1]{#1\ \textemdash\ }
\newcommand\qmcite[3]{%
\if\relax\detokenize{#1}\relax \cite[\mycf][#3]{#2}\else
\qmaddsep{\qmenquote{\qmuseq{#1}}}\cite[#3]{#2}\fi}
\begin{document}
\begin{enumerate}
\item text: \qmuseq{q001}
\item enquoted: \qmenquote{\qmuseq{q001}}
\item with sep: \qmaddsep{\qmenquote{\qmuseq{q001}}}
\item quote with cite: \qmcite{q001}{abook}{S 123}
\item no quote with cite: \qmcite{}{abook}{S 123}
\item quote and no postnote: \qmcite{q001}{abook}{}
\item no quote and no postnote: \qmcite{}{abook}{}
\item \textbackslash textquote: \textquote[{\cite[S 456]{abook}}]{\qmuseq{q001}}
\item using the prenote \cite[\qmenquote{\qmuseq{q001}} \textemdash ][]{abook}
\end{enumerate}
\printbibliography
\end{document}
此外\enquote
,csquotes
软件包中还有方便的\textquote
命令。