elsarticle.cls を使用する場合、各参考文献項目をクリック可能なハイパーリンクにするにはどうすればよいでしょうか?

elsarticle.cls を使用する場合、各参考文献項目をクリック可能なハイパーリンクにするにはどうすればよいでしょうか?

私は、計算物理学ジャーナルElsevier によるものです。最初の投稿では出版社から参考文献のフォーマット要件が明示的に指定されていませんが、そのジャーナルに掲載された記事の最終的な PDF の実際の参考文献スタイルを再現することに興味があります。

要件は、各参考文献項目 (つまり、行エントリ全体) がクリック可能なハイパーリンクになることです (doi使用可能な場合はフィールドを使用し、そうでない場合はファイルurl内の関連キーのフィールドを使用しますbib)。

を使用しているためelsarticle.cls、 を使用できませんbiblatex。したがって、natbib/bibtexに基づくソリューションが必要です。

まず、MWE を見てみましょう。

\documentclass[number]{elsarticle}
\begin{document}

\begin{frontmatter}

    \title{Dummy document \tnoteref{t1,t2}}

    \tnotetext[t1]{Title footnote 1}
    \tnotetext[t2]{Title footnote 2}
    \author[a]{First Author\fnref{fn1}}
    \ead{firstemail_id@insti_1.edu}
    \author[b]{Second Author\fnref{fn2}}
    \ead{secondemail_id@insti_2.edu}
    \address[a]{Address of author with affiliation `a'}
    \address[b]{Address of author with affiliation `b'}
    \fntext[fn1]{This is a footnote.}
    \fntext[fn2]{Another author footnote}

    \begin{abstract}
        Dummy abstract.
    \end{abstract}

    % Research highlights
    \begin{highlights}
    \item Research highlight 1
    \item Research highlight 2
    \end{highlights}

    \begin{keyword}
        Some \sep keywords
    \end{keyword}

\end{frontmatter}

\section{Introduction}{\label{sec:intro}}
Intro

\section{Next}{\label{sec:blah}}
More blah

\nocite{*}   % Temporary placeholder. Comment out after bib file is populated and \cite commands issued
\bibliographystyle{elsarticle-num} 
\bibliography{manuscript_references.bib}

\end{document}

答え1

.bst質問のコメントに書いたように、これが Elsevier ジャーナルへの投稿に最適なアイデアであるとは必ずしも思いませんが、ファイルを少し変更すれば可能です。

これを実現する方法は他にもあると思いますが、私が行った方法は次のとおりです。

elsarticle-num-names.bstすでに、参考文献の一部を URL へのリンクとしてタイプセットする方法があります (フィールド@miscを持つエントリのurlタイトルはすでに URL に直接リンクされています)。そのため、この仕組みを使用して、リンク領域を完全な記事に拡張し、DOI も考慮するように拡張できます。

DOI の拡張は、多かれ少なかれ簡単です。リンク領域を拡張するには、マクロと関数を少し変更する必要がありました。

elsarticle-num-names.bst(v2.1 [2019-04-15]、CTANの現在のバージョン)との差分は次のとおりです。

--- elsarticle-num.bst  2019-04-05 15:29:24.000000000 +0200
+++ link-elsarticle-num.bst 2020-03-26 21:55:15.423852900 +0100
@@ -114,32 +114,51 @@
 }

 FUNCTION {setup.inlinelink}
-{ makeinlinelink
-    { hrefform #1 = % hypertex
-        { "\special {html:<a href=" quote$ * url * quote$ * "> }{" * 'openinlinelink :=
+{
+  doi empty$
+    {
+      url empty$
+        { "" }
+        { url }
+      if$
+    }
+    { doiurl doi * }
+  if$
+  duplicate$ empty$
+    'pop$
+    { 
+      hrefform #1 = % hypertex
+        { "\special {html:<a href=" quote$ * swap$ * quote$ * "> }" * 'openinlinelink :=
           "\special {html:</a>}" 'closeinlinelink :=
           }
         { hrefform #2 = % hyperref
-            { "\href{" url * "}{" * 'openinlinelink :=
+            { "\href{" swap$ * "}{" * 'openinlinelink :=
               "}" 'closeinlinelink :=
               }
-            'skip$
+            'pop$
           if$ % hrefform #2 =
         }
       if$ % hrefform #1 =
       #0 'makeinlinelink :=
     }
-    'skip$
- if$ % makeinlinelink
+  if$
 }
-FUNCTION {add.inlinelink}
+FUNCTION {add.openinlinelink}
 { openinlinelink empty$
     'skip$
-    { openinlinelink swap$ * closeinlinelink *
+    { openinlinelink write$
       "" 'openinlinelink :=
       }
   if$
 }
+FUNCTION {add.closeinlinelink}
+{ closeinlinelink empty$
+    'skip$
+    { closeinlinelink write$
+      "" 'closeinlinelink :=
+      }
+  if$
+}
 FUNCTION {output.nonnull}
 { % Save the thing we've been asked to output
   's :=
@@ -157,7 +176,6 @@
       % Write out what's currently at the top of the stack, using the
       % original output.nonnull function.
       s
-      add.inlinelink
       output.nonnull.original % invoke the original output.nonnull
     }
     { % Still in brackets.  Add open-bracket or (continuation) comma, add the
@@ -203,12 +221,6 @@
   if$
 }

-FUNCTION {fin.entry.original}
-{ add.period$
-  write$
-  newline$
-}
-
 FUNCTION {new.block}
 { output.state before.all =
     'skip$
@@ -472,7 +484,7 @@
 FUNCTION {write.url}
 { url empty$
     { skip$ }
-    { "\newline\urlprefix\url{" url * "}" * write$ newline$ }
+    { "\newline\urlprefix\nolinkurl{" url * "}" * write$ newline$ }
   if$
 }

@@ -1032,13 +1044,11 @@
 }
 FUNCTION {make.href.hypertex}
 {
-  "\special {html:<a href=" quote$ *
-  swap$ * quote$ * "> }" * swap$ *
-  "\special {html:</a>}" *
+  pop$
 }
 FUNCTION {make.href.hyperref}
 {
-  "\href {" swap$ * "} {\path{" * swap$ * "}}" *
+  pop$ "\path{" swap$ * "}" *
 }
 FUNCTION {make.href}
 { hrefform #2 =
@@ -1054,12 +1064,7 @@
 FUNCTION {format.url}
 { inlinelinks #1 = url empty$ or
    { "" }
-   { hrefform #1 =
-       { % special case -- add HyperTeX specials
-         urlintro "\url{" url * "}" * url make.href.hypertex * }
-       { urlintro "\url{" * url * "}" * }
-     if$
-   }
+   {  urlintro "\nolinkurl{" * url * "}" * }
   if$
 }

@@ -1104,14 +1109,13 @@
 FUNCTION {output.bibitem}
 { outside.brackets 'bracket.state :=
   output.bibitem.original
-  inlinelinks url empty$ not and
-    { #1 'makeinlinelink := }
-    { #0 'makeinlinelink := }
-  if$
+  setup.inlinelink
+  add.openinlinelink
 }

 FUNCTION {fin.entry}
-{ output.web.refs  % urlbst
+{ 
+  output.web.refs  % urlbst
   makeinlinelink       % ooops, it appears we didn't have a title for inlinelink
     { setup.inlinelink % add some artificial link text here, as a fallback
       "[link]" output.nonnull }
@@ -1121,7 +1125,14 @@
     { "]" * }
     'skip$
   if$
-  fin.entry.original
+  add.period$
+  write$
+  type$ "webpage" =
+    'skip$
+    'write.url
+  if$
+  add.closeinlinelink
+  newline$
 }

 FUNCTION {webpage}
@@ -1139,7 +1150,6 @@
     }
   if$
   new.block
-  title empty$ 'skip$ 'setup.inlinelink if$
   format.title "title" output.check
   inbrackets "online" output
   new.block
@@ -1159,7 +1169,6 @@
 FUNCTION {article}
 { output.bibitem
   format.authors "author" output.check
-  title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
   format.title "title" output.check
   crossref missing$
     { journal
@@ -1179,7 +1188,6 @@
     'skip$ 
   if$
   fin.entry
-  write.url
 }

 FUNCTION {book}
@@ -1194,7 +1202,6 @@
       if$
     }
   if$
-  title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
   format.btitle "title" output.check
   crossref missing$
     { format.edition output
@@ -1208,20 +1215,17 @@
   if$
   format.note output
   fin.entry
-  write.url
 }

 FUNCTION {booklet}
 { output.bibitem
   format.authors output
-  title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
   format.title "title" output.check
   howpublished output
   address output
   format.note output
   format.date "year" output.check
   fin.entry
-  write.url
 }

 FUNCTION {inbook}
@@ -1236,7 +1240,6 @@
       if$
     }
   if$
-  title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
   format.btitle "title" output.check
   crossref missing$
     {
@@ -1254,13 +1257,11 @@
   format.pages "pages" output.check
   format.note output
   fin.entry
-  write.url
 }

 FUNCTION {incollection}
 { output.bibitem
   format.authors "author" output.check
-  title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
   format.title "title" output.check
   crossref missing$
     { format.in.ed.booktitle "booktitle" output.check
@@ -1277,13 +1278,11 @@
   format.pages "pages" output.check
   format.note output
   fin.entry
-  write.url
 }

 FUNCTION {inproceedings}
 { output.bibitem
   format.authors "author" output.check
-  title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
   format.title "title" output.check
   crossref missing$
     { format.in.ed.booktitle "booktitle" output.check
@@ -1303,7 +1302,6 @@
   format.pages "pages" output.check
   format.note output
   fin.entry
-  write.url
 }

 FUNCTION {conference} { inproceedings }
@@ -1320,7 +1318,6 @@
     }
     { format.authors output.nonnull }
   if$
-  title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
   format.btitle "title" output.check
   author empty$
     { organization empty$
@@ -1339,13 +1336,11 @@
   format.note output
   format.date "year" output.check
   fin.entry
-  write.url
 }

 FUNCTION {mastersthesis}
 { output.bibitem
   format.authors "author" output.check
-  title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
   format.title "title" output.check
   bbl.mthesis format.thesis.type output.nonnull
   school "school" output.check
@@ -1353,26 +1348,22 @@
   format.note output
   format.date "year" output.check
   fin.entry
-  write.url
 }

 FUNCTION {misc}
 { output.bibitem
   format.authors output
-  title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
   format.title output
   howpublished output
   format.note output
   format.date "year" output.check
   fin.entry
-  write.url
   empty.misc.check
 }

 FUNCTION {phdthesis}
 { output.bibitem
   format.authors "author" output.check
-  title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
   format.title "title" output.check
   bbl.phdthesis format.thesis.type output.nonnull
   school "school" output.check
@@ -1380,7 +1371,6 @@
   format.note output
   format.date "year" output.check
   fin.entry
-  write.url
 }

 FUNCTION {proceedings}
@@ -1389,7 +1379,6 @@
     { organization output }
     { format.editors output.nonnull }
   if$
-  title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
   format.btitle "title" output.check
   format.bvolume output
   format.number.series output
@@ -1413,13 +1402,11 @@
   if$
   format.note output
   fin.entry
-  write.url
 }

 FUNCTION {techreport}
 { output.bibitem
   format.authors "author" output.check
-  title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
   format.title "title" output.check
   format.tr.number output.nonnull
   institution "institution" output.check
@@ -1427,18 +1414,15 @@
   format.note output
   format.date "year" output.check
   fin.entry
-  write.url
 }

 FUNCTION {unpublished}
 { output.bibitem
   format.authors "author" output.check
-  title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
   format.title "title" output.check
   format.note "note" output.check
   format.date "year" output.check
   fin.entry
-  write.url
 }

 FUNCTION {default.type} { misc }
@@ -1487,6 +1471,8 @@
   write$ newline$
   "  \def\href#1#2{#2} \def\path#1{#1}\fi"
   write$ newline$
+  "\providecommand*{\nolinkurl}{\url}"
+  write$ newline$
 }

 EXECUTE {begin.bib}

変更されたファイルはlink-elsarticle-num.bst以下からダウンロードできます。https://gist.github.com/moewew/1519006f9de5500db470bcc4701edeb5(そのページにはオリジナルとの差分も掲載されています)。

それではlink-elsarticle-num.bst次のMWE

\documentclass[number]{elsarticle}
\usepackage[T1]{fontenc}
\usepackage[colorlinks]{hyperref}

\begin{filecontents}{\jobname.bib}
@article{sigfridsson,
  author       = {Sigfridsson, Emma and Ryde, Ulf},
  title        = {Comparison of Methods for Deriving Atomic Charges from the
                  Electrostatic Potential and Moments},
  journal      = {Journal of Computational Chemistry},
  year         = 1998,
  volume       = 19,
  number       = 4,
  pages        = {377-395},
  doi          = {10.1002/(SICI)1096-987X(199803)19:4<377::AID-JCC1>3.0.CO;2-P},
}
@misc{elk,
  author  = {Anne Elk},
  title   = {A Theory on {Brontosauruses}},
  year    = {1971},
  url     = {https://example.edu/~elk/bronto.pdf},
}
@book{nussbaum,
  author       = {Nussbaum, Martha},
  title        = {{Aristotle's} {`De Motu Animalium'}},
  year         = 1978,
  publisher    = {Princeton University Press},
  address      = {Princeton},
}
\end{filecontents}

\begin{document}
\nocite{*}
\bibliographystyle{link-elsarticle-num}
\bibliography{\jobname}
\end{document}

生産する

完全にリンクされた書誌エントリ


URLとDOIの明示的な出力を抑制したい場合は、

  output.web.refs  % urlbst

そしてその

  type$ "webpage" =
    'skip$
    'write.url
  if$

ブロックを FUNCTION {fin.entry}link-elsarticle-num.bstのように記述します

FUNCTION {fin.entry}
{ 
  makeinlinelink       % ooops, it appears we didn't have a title for inlinelink
    { setup.inlinelink % add some artificial link text here, as a fallback
      "[link]" output.nonnull }
    'skip$
  if$
  bracket.state close.brackets = % urlbst
    { "]" * }
    'skip$
  if$
  add.period$
  write$
  add.closeinlinelink
  newline$
}

答え2

elsarticle引用された参考文献をクラス(暗黙的に ref manager を使用する)を使用してクリック可能なリンクに変換するにはbibtex、 を使用できます\usepackage{hyperref}。出力の 2 ページ目は次のようになります。

ここに画像の説明を入力してください

入力Texファイルは

\documentclass[number]{elsarticle}
\usepackage[hidelinks, colorlinks=true]{hyperref} %% ADDS LINKS TO REFERENCES, YOU CAN IGNORE THE OPTIONS [hidelinks, colorlinks=true] IF YOU LIKE.

\begin{document}

\begin{frontmatter}

\title{Dummy document \tnoteref{t1,t2}}

\tnotetext[t1]{Title footnote 1}
\tnotetext[t2]{Title footnote 2}
\author[a]{First Author\fnref{fn1}}
\ead{firstemail_id@insti_1.edu}
\author[b]{Second Author\fnref{fn2}}
\ead{secondemail_id@insti_2.edu}
\address[a]{Address of author with affiliation `a'}
\address[b]{Address of author with affiliation `b'}
\fntext[fn1]{This is a footnote.}
\fntext[fn2]{Another author footnote}

\begin{abstract}
    Dummy abstract.
\end{abstract}

% Research highlights
\begin{highlights}
    \item Research highlight 1
    \item Research highlight 2
\end{highlights}

\begin{keyword}
    Some \sep keywords
\end{keyword}

\end{frontmatter}

\section{Introduction}{\label{sec:intro}}
Intro

\section{Next}{\label{sec:blah}}
More blah in example of citation here \cite{Tenis_2000}. Another example of citation \cite{kilde}. Here is a third citation for a real article with doi and url \cite{Aalbersberg_2014}.

\nocite{*}   % Temporary placeholder. Comment out after bib file is populated and \cite commands issued
\bibliographystyle{elsarticle-num}
\bibliography{reference} %%% DON’T ADD EXTENSION OF FILE

\end{document}

ここで使用する参照ファイルは reference.bib

@Book{kilde,
  author    = {John Doe},
  publisher = {John Wiley},
  title     = {Differential equations : an introduction to modern methods and applications},
  year      = {2020},
  address   = {New Jersey},
  isbn      = {9780471651413},
  keywords  = {Differential equations},
  language  = {In English},
}

@Article{Tenis_2000,
  author  = {Michael Tenis},
  journal = {Jounal of Energy},
  title   = {New article about something},
  year    = {2000},
  month   = aug,
  number  = {7},
  pages   = {66--88},
  volume  = {2},
}

@Article{Aalbersberg_2014,
  author    = {IJsbrand Jan Aalbersberg and Sophia Atzeni and Hylke Koers and Beate Specker and Elena Zudilova-Seinstra},
  journal   = {{LIBER} Quarterly},
  title     = {Bringing Digital Science Deep Inside the Scientific Article: the Elsevier Article of the Future Project},
  year      = {2014},
  month     = {apr},
  number    = {4},
  pages     = {274},
  volume    = {23},
  doi       = {10.18352/lq.8446},
  publisher = {Uopen Journals},
  url       = {https://doi.org/10.18352/lq.8446},
}

\usepackage{hyperref}は、リンクの色を変更したり、下線やボックスを配置するなど、リンクを微調整するための多くのオプションとともに使用できます。マニュアルこれは、参考文献セクションの引用文献にリンクするためのものです。

参考文献セクションの参照をその出版ウェブサイトにリンクするには、ファイル内のurlまたはdoi、あるいはその両方のフィールドを使用する必要がありますreference.bib。ウェブサイトクロスレフやをActions>Cite含むすべての ref 情報をそこから直接ファイルにコピーできるため、非常に役立ちます。urldoireference.bib

コマンドを使用する際には、\bibliographybibファイルの名前を続けて指定する必要があることに注意してください。それなしこのような拡張子です\bibliography{reference}

関連情報