我希望能够以一种不会对编辑器中文本的阅读造成很大干扰的方式插入一些带有参考的文本。
目前我有这样的东西:
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum has been the industry's standard dummy text
ever since the 1500s \cite{www.somethingaboutlorumipsom.com},
when an unknown printer took a galley of type and scrambled it
to make a type specimen book.
当我更喜欢这样的内容时,在第一段下面较小的段落中完整显示参考名称:
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum has been the industry's standard dummy text ever since the 1500s \cite{1},
when an unknown printer took a galley of type and scrambled it
to make a type specimen book.
我的描述引文的文字:
\cite{1}{www.somethingaboutlorumipsom.com}
我知道我可以在 bibtex 或 natbib 中更改参考文献,因此我只需输入 \cite{@1} 或其他内容。问题在于我的工作流程:我通常希望将整个参考文献名称放在适当的位置,这样我就可以看到我引用过或未引用的内容。我做了很多文献综述,让名称可见至关重要。
你能推荐一些软件包或方法给我吗?说实话,这确实很有帮助。
答案1
这通常不是 BibTeX/ 中的引用biblatex
工作方式。它看起来有点像 markdown 中的方法。(如果再加点创意,manual thebibliography
+\bibitem
就是该方法的一个不太灵活的版本。)
biblatex
在 LaTeX 世界中,想法是,在文件中为每个来源分配一个有用的标签 BibTeX/ .bib
,并在整个文档中使用该标签(甚至用于加载同一.bib
文件的所有文档)。人们通常会从标题中选择第一作者的姓氏,可能还有年份、关键字或几个重要的词。例如,,,(sigfridsson
改编自nussbaum1978
geer:thesis
worman:cast
biblatex-examples.bib
标签应该足够长,这样你就能立刻知道它指的是什么,但又要足够短,这样它就不会占用你源代码中的太多空间,你也能快速记住并输入它。
使用biblatex
Biber,可以使用字段ids
为条目提供.bib
几个可能的键,以便引用该条目,但这些键仍驻留在文件中.bib
,无法从文档中动态更改.tex
。(参见重命名 BibTeX 键而不破坏现有文档。
以下是一个概念证明,它允许您在文档中定义任意别名。使用以下命令定义别名
\assigncite{<document cite key>}{<bib cite key>}
例如\assigncite{1}{sigfridsson}
您可以1
在文档中使用并sigfridsson
从.bib
文件中获取。
然后照常引用\jsmcite{<document cite keys>}
。
由于我们将别名写入文件,.aux
因此在运行 BibTeX/Biber 之前需要进行两次编译运行(因此完整的编译序列至少是 LaTeX、LaTeX、Biber/BibTeX、LaTeX、LaTeX),但优点是您可以在文档中的任何位置定义别名。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear, backend=biber]{biblatex}
\usepackage{etoolbox}
\makeatletter
\newcommand*{\jmsc@citekeys}{}
% {<document cite alias>}{<bib entry key>}
\newcommand{\assigncite}[2]{%
\ifinlist{#1}{\jmsc@citekeys}
{\PackageWarning{james-cite}
{Key for '#1' already defined.\MessageBreak
Overwriting urrent value '\csuse{jmsc@citekey@#1}'
with '#2'}}
{\listadd{\jmsc@citekeys}{#1}}%
\csdef{jmsc@citekey@#1}{#2}}
\newcommand*{\jmsc@aux@assigncite}[2]{%
\csgdef{jmsc@aux@citekey@#1}{#2}}
\newcommand*{\jmsc@write@liasestoaux}{%
\forlistloop{\jmsc@write@liastoaux}{\jmsc@citekeys}}
\newcommand*{\jmsc@write@liastoaux}[1]{%
\immediate\write\@mainaux{%
\string\jmsc@aux@assigncite{#1}{\csuse{jmsc@citekey@#1}}}}
\AtEndDocument{%
\jmsc@write@liasestoaux}
% allowing for all arguments of \...cite
% with the #{ "argument"
\newcommand*{\makejmscitecommand}{}
\protected\def\makejmscitecommand#1#2#{%
\def\jmsc@tempcite{#1#2}%
\jmscite@process}
\newcommand{\jmscite@process}[1]{%
\let\jmsc@tempa\@empty
\forcsvlist{\jmscite@preprocess@itm}{#1}%
\expandafter\jmsc@tempcite\expandafter{\jmsc@tempa}}
\def\jmscite@preprocess@itm#1{%
\ifcsundef{jmsc@aux@citekey@#1}
{\G@refundefinedtrue
\PackageWarning{james-cite}
{Citation key '#1' not defined}}
{\ifdefvoid\jmsc@tempa
{\letcs\jmsc@tempa{jmsc@aux@citekey@#1}}
{\eappto\jmsc@tempa{,\csuse{jmsc@aux@citekey@#1}}}}}
\makeatother
% defined the new cite command
\newcommand*{\jmscite}{\makejmscitecommand{\autocite}}
\addbibresource{biblatex-examples.bib}
\begin{document}
Lorem ipsum \jmscite{1}
\assigncite{1}{sigfridsson}
Lorem ipsum \jmscite[45]{1}
\printbibliography
\end{document}
您可以将 new\jmscite
类命令定义为\makejmscitecommand{<cite command>}
。在示例中,我们基于\jmscite
。biblatex
但\autocite
实现并不依赖于biblatex
,并且可以轻松切换到natbib
具有
\newcommand*{\jmscitep}{\makejmscitecommand{\citep}}
\newcommand*{\jmscitet}{\makejmscitecommand{\citet}}
我们只允许使用别名键\jmscite
。也可以允许使用普通输入键,但这样我们就必须放弃对未定义别名的警告。
\def\jmscite@preprocess@itm#1{%
\ifcsundef{jmsc@aux@citekey@#1}
{\ifdefvoid\jmsc@tempa
{\def\jmsc@tempa{#1}}
{\appto\jmsc@tempa{,#1}}}
{\ifdefvoid\jmsc@tempa
{\letcs\jmsc@tempa{jmsc@aux@citekey@#1}}
{\eappto\jmsc@tempa{,\csuse{jmsc@aux@citekey@#1}}}}}
当我在寻找一个很好的参考资料时,ids
我发现有多个键引用相同的参考书目条目, 在哪里沃纳的回答使用大致类似的方法(无需额外的.aux
文件往返)。