![短期刊书目列表:如何改变排序并解决相同的短期刊问题?](https://linux22.com/image/474005/%E7%9F%AD%E6%9C%9F%E5%88%8A%E4%B9%A6%E7%9B%AE%E5%88%97%E8%A1%A8%EF%BC%9A%E5%A6%82%E4%BD%95%E6%94%B9%E5%8F%98%E6%8E%92%E5%BA%8F%E5%B9%B6%E8%A7%A3%E5%86%B3%E7%9B%B8%E5%90%8C%E7%9A%84%E7%9F%AD%E6%9C%9F%E5%88%8A%E9%97%AE%E9%A2%98%EF%BC%9F.png)
我有一份详尽的参考书目,其中包含大量来自期刊的文章。
出于编辑原因,我需要包括期刊名称的缩写并在最终参考书目之后,列出所查阅期刊的索引。当然,理想的命令是,在文件的每个条目中\printbiblist{shortjournal}
插入。shortjournal={}
.bib
以下是我的特别输入:
\usepackage[style=verbose-trad2]{biblatex}
\DeclareBibliographyDriver{shortjournal}{%
\printfield{journaltitle}}
\DeclareBibliographyDriver{shorttitle}{%
\printfield{title}}
\DeclareFieldFormat{journaltitle}{\em\printfield{shortjournal}}
\AtBeginBiblist{shortjournal}{\DeclareFieldFormat{journaltitle}{\em#1}}
但是,我有两个问题需要解决。
首先涉及缩写列表的排序。我希望它是按字母顺序排列的:按缩写的字母顺序排列。请注意,当然,选择缩写的任何编译器都有责任避免重复,以防止缩写本身混淆:这意味着单级排序就足够了。然而,在我看来,默认情况下顺序是引用的顺序。
我尝试修改 refcontext ( \newrefcontext{sorting=sortshortjournals}
) 并创建一个排序模板 ( \DeclareSortingTemplate{sortshortjournals}
),其唯一字段确实是 shortjournal ( {\sort{\field{SHORTJOURNAL}}}
)。但是,我失败了。
第二个问题是,对于我从期刊中引用的每篇文章(无论是卷、期还是年份),列表都会再次引用缩写。相反,我希望每个缩写只有一个项目。在这方面,我甚至无法假设一些尝试。
这是我的例子:ciccio_example_shortjournal_list。
顺便一提:如果我在条目中使用journal={}
而不是 ,这有关系吗journaltitle={}
(但是,我知道 与 的区别issuetitle={}
)?
添加遵从初步反馈。我包含了所有代码,以便在问题中直接重现我的问题。
\documentclass{article}
\usepackage[style=verbose-trad2]{biblatex}
\begin{filecontents}{\jobname.bib}
@XDATA{jtif,
JOURNALTITLE = {Journal of Tremendously Interesting Facts},
SHORTJOURNAL = {JTIF},
}
@XDATA{jtio,
JOURNALTITLE = {Journal of Tremendously Interesting Opinions},
SHORTJOURNAL = {JTIO},
}
@ARTICLE{test1,
AUTHOR = {John Smith},
TITLE = {Nothing to do},
SHORTHAND = {JSNTD},
SHORTTITLE = {NTD},
XDATA = {jtif},
VOLUME = {2},
NUMBER = {1},
YEAR = {1947}
}
@ARTICLE{test2,
AUTHOR = {John Tumble},
TITLE = {I am so happy},
SHORTHAND = {JTISH},
SHORTTITLE = {ISH},
XDATA = {jtif},
VOLUME = {1},
NUMBER = {1},
YEAR = {1946}
}
@ARTICLE{test3,
AUTHOR = {Francis Coppola},
TITLE = {I come from Italy},
SHORTHAND = {FCICFI},
SHORTTITLE = {ICFI},
XDATA = {jtif},
VOLUME = {2},
NUMBER = {3},
YEAR = {1947}
}
@ARTICLE{test5,
AUTHOR = {Francis Coppola},
TITLE = {I hate Milan},
SHORTHAND = {FCIHM},
SHORTTITLE = {IHM},
XDATA = {jtio},
VOLUME = {9},
NUMBER = {1},
YEAR = {1954}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\DeclareBibliographyDriver{shortjournal}{%
\printfield{journaltitle}}
\DeclareBibliographyDriver{shorttitle}{%
\printfield{title}}
\DeclareFieldFormat{journaltitle}{\em\printfield{shortjournal}}
\AtBeginBiblist{shortjournal}{\DeclareFieldFormat{journaltitle}{\em#1}}
\DeclareSortingTemplate{sortshortjournals}{
\sort{\field{SHORTJOURNAL}}
\sort{\field{JOURNALTITLE}}
}
\begin{document}
\nocite{*}
% \printshorthands% With biber, just an alias for \printbiblist{shorthand}
\printbibliography
\vspace{32pt}
\newrefcontext{sorting=sortshortjournals}
\noindent\textbf{Please, I would like each element to be indicated only once and not multiple times, as it is now. Then, I prefere an alphabetical order too.}
\printbiblist[title={Journal Shorthands}]{shortjournal}
% As you can see, the list shows me more time the same item
% I prefere to have only once the same item
% Possible, in alphabetical order
% \printbiblist[title={Title Shorthands}]{shorttitle}
\end{document}
答案1
为了正确排序,您需要定义一个名为的排序模板shortjournal
。为了只打印一次期刊缩写,您可以定义一个 bibcheck,如下所示手册biblatex
(第 3.8.3 条)参考书目列表,第 95-97 页)。
\documentclass{article}
\usepackage[style=verbose-trad2]{biblatex}
\renewbibmacro*{journal}{%
\ifboolexpr{
test {\iffieldundef{journaltitle}}
and
test {\iffieldundef{journalsubtitle}}
}
{}
{\iffieldundef{shortjournal}
{\printtext[journaltitle]{%
\printfield[titlecase]{journaltitle}%
\setunit{\subtitlepunct}%
\printfield[titlecase]{journalsubtitle}}}
{\printfield[journaltitle]{shortjournal}}%
\newunit}%
\iffieldundef{journaltitleaddon}
{}
{\printfield{journaltitleaddon}}}
\DeclareBibliographyDriver{shortjournal}{%
\printfield{journaltitle}}
\defbibcheck{shortjournal}{%
\iffieldundef{shortjournal}
{\skipentry}
{\iffieldundef{journaltitle}
{\skipentry}
{\ifcsdef{sjcheck@\therefsection
-\strfield{shortjournal}=\strfield{journaltitle}}
{\skipentry}
{\savefieldcs{journaltitle}{sjcheck@\therefsection
-\strfield{shortjournal}=\strfield{journaltitle}}}}}}
\DeclareSortingTemplate{shortjournal}{
\sort{\field{SHORTJOURNAL}}
\sort{\field{JOURNALTITLE}}
}
\DeclareBibliographyDriver{shorttitle}{%
\printfield{title}}
\begin{filecontents}{\jobname.bib}
@XDATA{jtif,
JOURNALTITLE = {Journal of Tremendously Interesting Facts},
SHORTJOURNAL = {JTIF},
}
@XDATA{jtio,
JOURNALTITLE = {Journal of Tremendously Interesting Opinions},
SHORTJOURNAL = {JTIO},
}
@ARTICLE{test1,
AUTHOR = {John Smith},
TITLE = {Nothing to do},
SHORTHAND = {JSNTD},
SHORTTITLE = {NTD},
XDATA = {jtif},
VOLUME = {2},
NUMBER = {1},
YEAR = {1947}
}
@ARTICLE{test2,
AUTHOR = {John Tumble},
TITLE = {I am so happy},
SHORTHAND = {JTISH},
SHORTTITLE = {ISH},
XDATA = {jtif},
VOLUME = {1},
NUMBER = {1},
YEAR = {1946}
}
@ARTICLE{test3,
AUTHOR = {Francis Coppola},
TITLE = {I come from Italy},
SHORTHAND = {FCICFI},
SHORTTITLE = {ICFI},
XDATA = {jtif},
VOLUME = {2},
NUMBER = {3},
YEAR = {1947}
}
@ARTICLE{test5,
AUTHOR = {Francis Coppola},
TITLE = {I hate Milan},
SHORTHAND = {FCIHM},
SHORTTITLE = {IHM},
XDATA = {jtio},
VOLUME = {9},
NUMBER = {1},
YEAR = {1954}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\printbiblist[title={Journal Shorthands}]{shortjournal}
% As you can see, the list shows me more time the same item
% I prefere to have only once the same item
% Possible, in alphabetical order
% \printbiblist[title={Title Shorthands}]{shorttitle}
\end{document}