修改参考书目条目以添加节省空间的超链接到网站和本地 pdf 文件

修改参考书目条目以添加节省空间的超链接到网站和本地 pdf 文件

我们已经制定了一份研究提案,并计划提交一个闪存驱动器,其中包含提案的 PDF 和我们所有参考论文作为本地副本。我们问自己,是否可以使用超链接将提案中的参考书目条目链接到本地​​ PDF 文件。理想情况下,链接的 PDF 应在新窗口中打开,以保持主文档(提案)打开。此外,我们需要尽可能多地使用空闲空间。因此,需要减少由 DOI 和 URL 引起的较长的参考书目条目。

问题:如何使用节省时间的乳胶宏代码实现这一点?

答案1

我们创建了一个宏来解决所有这些问题,并创建了一个类似“链接:web,本地”的结构,其中 web 是指向 doi 或 url 的超链接(取决于相关 bibtex 条目的可用字段),本地链接指向本地 pdf,使用相对路径。

目前,我们的代码有一个限制:宏搜索 bibkey 而不是文件名可能出现在字段文件中

代码描述:检查每个书目条目并最终进行修改。如果定义了字段 URL,则使用它为“web”创建超链接。如果不存在 URL,则使用 DOI 生成链接。如果不存在 URL 和 DOI,则不要将文本“web”添加到 bib 条目中。检查指定文件夹中是否存在现有的 pdf 文件。如果存在,则将文本“local”添加到 bib 条目并使用相对路径将此文本超链接到 pdf 文件。

当前限制:代码仅检查 pdf,其名称与相关 bibtex 条目中的 bibtex 键相同。将来,还可能对字段 FILE 进行测试。如果存在,则尝试从字符串中提取文件名。

功能:如果提案很大并且使用了多个参考书目(多个 /printbibliography 调用),我们添加了使用子目录的可能性,以便更好地构建 pdf。您可以使用命令 \RelPathSet{folder} 切换用于 pdf 搜索和路径创建的文件夹。重要提示:这不能用于更改每个 \cite 的 pdf 子文件夹。它只能用于更改 /printbibliography 命令的文件夹。只有当 DOI 字段、URL 字段或 pdf 文件可用时,Web 和 pdf 链接才可见。

代码:

    \documentclass{article}
    \usepackage[doi=false,isbn=false,url=false, backend=bibtex]{biblatex}
    \usepackage[hidelinks]{hyperref}
    \usepackage{filecontents} % create dummy bib-files

    \begin{filecontents}{general.bib}
        @article{adams,
            author  = {Peter Adams}, 
            title   = {The title of the work},
            journal = {The name of the journal},
            year    = 1993,
            number  = 2,
            pages   = {201-213},
            month   = 7,
            note    = {An optional note}, 
            volume  = 4
        }
        @article{beta,
            author  = {Luke Beta}, 
            title   = {The title of the work},
            journal = {The name of the journal},
            year    = 1993,
            number  = 2,
            pages   = {201-213},
            month   = 7,
            note    = {An optional note}, 
            volume  = 4,
            doi     = 02312312313
        }

        @article{chameli,
            author  = {August Chameli}, 
            title   = {The title of the work},
            journal = {The name of the journal},
            year    = 1993,
            number  = 2,
            pages   = {201-213},
            month   = 7,
            note    = {An optional note}, 
            volume  = 4,
            url     = "www.google.com"
        }

        @article{delta,
            author  = {Mike Delta}, 
            title   = {The title of the work},
            journal = {The name of the journal},
            year    = 1993,
            number  = 2,
            pages   = {201-213},
            month   = 7,
            note    = {An optional note}, 
            volume  = 4,
            doi     = 02312312313,
            url     = "www.google.com"
        }
        @article{elbing,
            author  = {Frank Elbing}, 
            title   = {The title of the work},
            journal = {The name of the journal},
            year    = 1993,
            number  = 2,
            pages   = {201-213},
            month   = 7,
            note    = {An optional note}, 
            volume  = 4
        }       
    \end{filecontents}

    \addbibresource{general.bib}

    % macro for space-saving hyperlinks to website and local file   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \hypersetup{pdfnewwindow=true} % open linked pdfs in a new window, instead of replaceing the main document
    \newcommand{\RelPath}{}
    %\newcommand{\RelPathSet}[1]{\renewcommand{\RelPath}{../path_to_main_pdf_folder/#1/}} % example: pdf folder is "outside"- no sub-directory of latex work folder
    \newcommand{\RelPathSet}[1]{\renewcommand{\RelPath}{path_to_main_pdf_folder/#1/}} % example: pdf folder is a sub-directory of latex work folder
    \RelPathSet{sub_folder} % initial path setup

    \AtEveryBibitem{

        \iffieldundef{url}
        {%field url is not defined, test if field doi is defined
            \iffieldundef{doi}
            {%field doi is also not defined, test if pdf file exists
                \IfFileExists{\RelPath\thefield{entrykey}.pdf}
                {%only file exists, create hyperlink with relative path to pdf file 
                    \csappto{blx@bbx@\thefield{entrytype}}{\addspace{{Link: }\href{run:\RelPath\thefield{entrykey}.pdf}{local}}}
                }
            }
            {%field doi is defined, test for field file
                \IfFileExists{\RelPath\thefield{entrykey}.pdf}
                {%field doi definde and file exists, use the relative file path and generate url from doi
                    \csappto{blx@bbx@\thefield{entrytype}}{\addspace{{Links: }\href{run:\RelPath\thefield{entrykey}.pdf}{local}, \href{http://dx.doi.org/\thefield{doi}}{web}}}
                }
                {%file not available, generate url from doi and link only this at the end of the current entry
                    \csappto{blx@bbx@\thefield{entrytype}}{\addspace{{Link: }\href{http://dx.doi.org/\thefield{doi}}{web}}}
                }
            }
        }
        {%url is definded, test if pdf file exists
            \IfFileExists{\RelPath\thefield{entrykey}.pdf}  
            {%field url defined and file exists
                \csappto{blx@bbx@\thefield{entrytype}}{\addspace{{Links: }\href{run:\RelPath\thefield{entrykey}.pdf}{local}, \href{\thefield{url}}{web}}}
            }
            {%field url defined, file not available
                \csappto{blx@bbx@\thefield{entrytype}}{\addspace{{Link: }\href{\thefield{url}}{web}}}
            }
        }
    }

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    \begin{document}


        Lorem ipsum dolor sit amet, consectetuer adipiscing elit \cite{adams}. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel \cite{beta}, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibu \cite{chameli}. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus \cite{delta}. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet \cite{elbing}.

\RelPathSet{sub_folder} % set name of sub folder, if the pdfs are stored in different folders       
\printbibliography
    \end{document}

输出: 在此处输入图片描述

编辑:

使用 JabRef 进行半自动 bibtex 条目生成、pdf 文件下载和所需重命名以满足发布的 latex 代码的要求的教程:

  • 下载并启动 JabRef
  • 转到选项->首选项->文件并将本地 pdf 文件的文件夹设置为“主文件目录”
  • 转到选项->首选项->导入并根据 latex 代码的要求设置“文件名格式模式”,使用上面的 latex 代码需要在此处输入“\bibtexkey”(不带“”)(如果不为空,则删除现有内容)
  • 打开现有的bibtex文件(.bib)或者创建一个新的,以下描述基于现有的bibtex文件
  • 双击现有条目,选择“常规”选项卡并执行以下操作:
  • 点击“查找 DOI”(如果找不到 DOI,则谷歌搜索相关 DOI 并手动插入;如果不存在 DOI,则手动插入 URL;如果也不存在 URL,则使用“+”按钮并手动添加 PDF 文件)
  • 单击“从 DOI 获取 BibTeX 数据”并决定应在现有条目中替换哪些信息 - 不要替换现有的 bibtex 密钥
  • 点击“获取全文”并将文件保存到显示的文件夹或创建子文件夹,如果找不到 PDF,请尝试使用“从 URL 下载”进行下载

对所有需要的条目重复此过程并将更改保存到 bibtex 文件

相关内容