将引用环境与引用样式相链接

将引用环境与引用样式相链接

我只是想知道是否可以将引用命令(最好是biblatex)与引用环境结合起来。

原因是这样的:

在德语试卷中你通常有两种选择(除了一些正式的选择)。

  1. 您可以使用释义/摘要,并添加带有缩写的来源“是。“(英语比较)”
  2. 或者你使用带引号的直接引用和不带“是。“。

将它们链接在一起可以为作者节省一些工作,因为它避免了手动调整的需要。

两个例子:

这是一份摘要。(Vgl. Bauer 2009)

“这是一个引文” (Bauer 2009)

我的问题是:
是否可以\cite以引用敏感的方式定义命令,

  1. 自动生成是。(Bauer 2009)在引号环境中使用时,输出会更少(例如“ ”)?
  2. 产生是。(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.}

给出

预注报价

对于abookbib 文件中给定的条目和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}

此外\enquotecsquotes软件包中还有方便的\textquote命令。

相关内容