用格式化的文献参考替换 Latex 文件中的引用键

用格式化的文献参考替换 Latex 文件中的引用键

我有一个 Latex 文件,其中的引文键被翻译成 pdf 中的格式化文献参考(我使用 biblatex)。假设我想在 latex 文件中拥有格式化的脚注,就像我在 pdf 文本中看到的那样,无论出于什么原因。

我只能想到手动解决方案,我可以手动复制 pdf 文件中的每个参考文献,用复制的参考文献替换 latex 文件中的引用键,并适当地编辑参考文献(例如,在书名中包含 \textit{} 等)

有没有什么聪明且更快的方法来做到这一点?

编辑:我使用了一个 bib 文件,其中包含与文献参考相关的信息

编辑2:澄清一下:假设我使用这里的最小示例和 bib 文件(最基本的 biblatex 示例

\documentclass[a4paper,11pt]{article}
\usepackage[style=numeric,backend=biber]{biblatex}
\addbibresource{\jobname.bib}
\begin{document}
As first example citation here is \cite{Chomsky1957}. 
Here is another example citation \cite{Labov1972}
\printbibliography
\end{document}

这是 Bib 文件

\begin{filecontents}{\jobname.bib}
@book{Labov1972,
    Address = {Philadelphia},
    Author = {William Labov},
    Publisher = {University of Pennsylvania Press},
    Title = {Sociolinguistic Patterns},
    Year = {1972}}

@book{Chomsky1957,
    Address = {The Hague},
    Author = {Noam Chomsky},
    Publisher = {Mouton},
    Title = {Syntactic Structures},
    Year = {1957}}
\end{filecontents}

当我编译 PDF 时,我将收到格式化的引文

在此处输入图片描述

是否有任何聪明的方法可以在 Latex 文件中将引文键“\cite{Chomsky1957}”替换为可以在 PDF 中找到的格式化参考文献(Chomsky, Noam, 1957,句法结构. 海牙穆顿。)

目的是得到一个已经包含格式化参考资料的乳胶文件

答案1

我没有biblatex解决方案,因为引用创建参考文献的文本文件我们看到

由于参考书目文本是通过 \printbibliography 打印的,因此没有简单的方法可以获取它

因此,此解决方案重点关注bibtex上述链接中的部分,使用plain-plain.bst来自https://gist.github.com/moewew/50795d6f171269e949d71d8c4149468e

myfile.tex(你的 mwe 略有修改)

我正在使用你的文件的以下修改版本,它确实不是使用biblatex

% arara: pdflatex
% arara: bibtex
% arara: pdflatex
% arara: pdflatex
\documentclass[a4paper,11pt]{article}


\begin{document}
As first example citation here is \cite{Chomsky1957}. 
Here is another example citation \cite{Labov1972}

\bibliographystyle{plain-plain}
\bibliography{\jobname.bib}

\end{document}

plain-plain.bst(略有修改的版本)

我正在使用plain-plain.bst(上面的链接)并进行了以下修改:

...
FUNCTION {output.bibitem}
{ newline$
  ""
  newline$
  "bib-key-begin---" write$
  cite$ write$
  "---bib-key-end" write$
  newline$
  before.all 'output.state :=
}
...

我把这个文件放进去~/texmf/bibtex/bst/plain-plain.bst并运行texhash ~/texmf

这意味着我运行 mwe,然后我收到

myfile.bbl

bib-key-begin---Chomsky1957---bib-key-end
Noam Chomsky. Syntactic Structures. Mouton, The Hague, 1957.


bib-key-begin---Labov1972---bib-key-end
William Labov. Sociolinguistic Patterns. University of Pennsylvania Press,
  Philadelphia, 1972.

这是书目的纯文本版本。从这里,我们需要将其读入文件并用适当的值.tex替换。\cite{<key>}

您可以为此使用任何类型的文本处理;我将使用latexindent.pl(免责声明,我是作者)和以下文件:

latexindent.yaml


replacements:
  -
    when: after
    substitution: |-
        s^\A(.*)\Z^
           my $body = $1;
           # read in .bbl file
           my $bblFile = ${$self}{fileName};
           $bblFile =~ s/\.tex/.bbl/s;
           my $bblBody = q();
           my $openFilePossible = 1;
           open( BBLFILE, $bblFile ) or ( $openFilePossible = 0 );
           if ( $openFilePossible == 1 ) {
              $bblBody = $bblBody.$_  while (<BBLFILE>);
              close(BBLFILE);
           }
           # split the bbl file at bib-key-begin
           my @bibentries = split(/bib-key-begin---/,$bblBody);
           # loop through the bibliography items
           my $index = 0;
           foreach (@bibentries){
                next if ($_ !~ m/---bib-key-end/s);
                $_ =~ s/(.*?)---bib-key-end//s;
                my $bibKey = $1;
                my $bibValue = $_;
                $bibValue =~ s/\R//sg;
                # make the substitution in the .tex file
                #   \cite{<key>} with <value>
                $body =~ s/\\cite\{$bibKey\}/$bibValue/sg;
           }; 
           $body;^sgxe

现在运行

latexindent.pl -rr -l myfile.tex

最终输出为

myfile.tex(最终输出)

% arara: pdflatex
% arara: bibtex
% arara: pdflatex
% arara: pdflatex
\documentclass[a4paper,11pt]{article}


\begin{document}
As first example citation here is Noam Chomsky. Syntactic Structures. Mouton, The Hague, 1957.. 
Here is another example citation William Labov. Sociolinguistic Patterns. University of Pennsylvania Press,  Philadelphia, 1972.

\bibliographystyle{plain-plain}
\bibliography{\jobname.bib}

\end{document}

最后评论

如果您需要myfile.bbl包含粗体/斜体,那么您必须调整plain-plain.bst

相关内容