A biblatex
solution, for when there are multiple or archival items.

Treating the season as part of the publication (meta)data.
Localisation can also come into play. (Note that not all babel
/polyglossia
languages define season
-related strings (yet).)
MWE
\begin{filecontents*}[overwrite]{\jobname.bib}
@misc{notesset1,
title = {Lecture Notes Set 1},
date = {2020-23},
}
% season (21=spring, 22=summer, 23=autumn, 24=winter)
@misc{notesset2,
title = {Lecture Notes Set 2},
date = {2021-21},
}
@misc{notesset3,
title = {Lecture Notes Set 3},
date = {2021-22},
}
@misc{notesset4,
title = {Lektur 1},
date = {2021-22},
langid = {ngerman},
% language={langgerman},
}
@misc{notesset5,
title = {Διάλεξη 1},
date = {2021-22},
langid = {greek},
language={langgreek},
}
@misc{notesset5a,
title = {Conferenza 1},
date = {2021-22},
langid = {italian},
language={langitalian},
}
\end{filecontents*}
\documentclass[12pt]{article}
\usepackage[english]{babel}
\usepackage{csquotes}
\usepackage[svgnames]{xcolor}
\usepackage{fontspec}
\babelprovide[import, onchar=ids fonts]{greek}
\babelfont[greek]{rm}
[Color=DarkGreen ,
]{Noto Serif}
\usepackage[style=authoryear,
dateabbrev=false,% full name of season
language=autocite,%pick up the langid language, for citations
autolang=other,%wrap with otherlanguage environment and translate date-related names according to the langid
]{biblatex}
\addbibresource{\jobname.bib}
\DeclareListFormat{language}{\ifbibstring{#1}{\bibstring{#1}\addcolon}{#1}}
\DeclareCiteCommand{\citeseasonall}
{}
{\textmd{\printlist{language}}
\printfield{title}\addcomma\addspace\printdate}
{}
{}
\DeclareCiteCommand{\citeseasontitle}
{}
{\printfield{title}
}
{}
{}
\DeclareCiteCommand{\citeseason}
{}
{\printdate}
{}
{}
\DefineBibliographyStrings{greek}{%
spring = {άνοιξη},
summer = {καλοκαίρι},
autumn = {φθινόπωρο},
winter = {χειμώνας},
langgreek = {Ελληνικά},
}
\DefineBibliographyStrings{italian}{%
spring = {primavera},
summer = {estate},
autumn = {autunno},
winter = {inverno},
langitalian = {italiano},
}
%-----------------------------
\title{\citeseasontitle{notesset1}}
\author{}
\date{\citeseason{notesset1}}
%------------------
\begin{document}
\maketitle
\section*{Overview}
\begin{itemize}
\item \textbf{\citeseasonall{notesset1}} covers introductory material.
\item \textbf{\citeseasonall{notesset2}} advances to the next topic.
\item \textbf{\citeseasonall{notesset3}} covers the extended course.
\item German: \textbf{\citeseasonall{notesset4}} is the xyz version.
\item Greek: \textbf{\citeseasonall{notesset5}} is the abc version.
\item Italian: \textbf{\citeseasonall{notesset5a}} is the abc version.
\end{itemize}
\end{document}
Automating
A more generalised solution, using a custom code number.
Biber
can do the four seasons using the date
field when the month is set to certain values:
my %
seasons = ( 21 => 'spring',
22 => 'summer',
23 => 'autumn',
24 => 'winter' );
...\texlive\2020
\texmf-dist
\source
\bibtex
\biber
\biblatex-biber.tar
\biblatex-biber
\biblatex-biber-2.15
\lib
\Biber
\Date
format.pm
Extending that idea, but using instead a custom field (term
) processed via macros at Biblatex
/Latex
-level, University Terms and Court Terms can be done:

Illustrating the use of the xsv
field type and associated \forcsvfield
command, allowing customised sequencing of fields on a per-bibentry basis (and the expl3 split function); and formatting hooks within the citation command, allowing the changing of the citation format mid-document; and bibstrings for localisation. Plus an example of using a field as an input argument to arbitrary code using \usefield
(here, an image name).
An exercise in what could be done.
Use-case: sets or compendia, or other bulk volumes?
Terms can always be keyed in manually if there are only a few, or the issue
field of @article
could be used.
MWE
\begin{filecontents*}[overwrite]{\jobname.bib}
@misc{notesset1,
title = {Lecture Notes Set 1},
date = {2020-23},
}
% season (21=spring, 22=summer, 23=autumn, 24=winter)
@misc{notesset2,
title = {Lecture Notes Set 2},
date = {2021-21},
}
@misc{notesset3,
title = {Lecture Notes Set 3},
date = {2021-22},
}
@misc{notesset4,
title = {Lektur 1},
date = {2021-22},
langid = {ngerman},
% language={langgerman},
}
@misc{notesset5,
title = {Διάλεξη 1},
date = {2021-22},
langid = {greek},
language={langgreek},
}
@misc{notesset5a,
title = {Conferenza 1},
date = {2021-22},
langid = {italian},
language={langitalian},
}
@misc{testutag,
title = {Test Titleuta Greek 31},
term = {2021-31},
langid = {greek},
% language={langgreek},
}
@misc{testutha,
title = {Test Titleut hilary},
term = {2021-hilaryterm},
}
@misc{testuta,
title = {Test Titleuta 31},
term = {2021-31},
author = {A Author},
authorposition = {Adjunct Professor of Theoretics},
university = {University of U},
college = {College of C},
school = {School of S},
faculty = {Faculty of F},
department = {Department of D},
location = {Mars and The Moon and Mimas},
image={example-image-a},
sequence = {department,faculty,university,location,image},
sequenceta = {title,term,author,authorposition},
}
@misc{testutb,
title = {Test Titleutb 32},
term = {2021-32},
author = {zz},
authorposition = {zz},
university = {University of V},
college = {College of D},
school = {School of T},
faculty = {Faculty of G},
department = {Department of E},
sequence = {department,college,university},
}
@misc{testutc,
title = {Test Titleutc 33},
term = {2021-33},
courtlist = {Civil List},
courtdivision = {Commercial Division},
courtcourt = {Court of Appeal},
% courtbench = {},
courtname = {Supreme Court of XYZ},
sequence = {courtlist,courtdivision,courtname},
}
@misc{testutd,
title = {Test Titleutd 34},
term = {2021-34},
% courtlist = {},
% courtdivision = {},
% courtcourt = {},
courtbench = {Full Court},
courtname = {Supreme Court of XYZ},
sequence = {courtbench,courtname},
}
@misc{testute,
title = {Test Titleute 35},
term = {2021-35},
}
@misc{testutf,
title = {Test Titleutf 36},
term = {2021-36},
}
@misc{testutg,
title = {Test Titleutg 37},
term = {2021-37},
}
@misc{testta,
title = {Test Titleta 41},
term = {2021-41},
}
@misc{testtb,
title = {Test Titletb 42},
term = {2021-42},
}
@misc{testtc,
title = {Test Titletc 43},
term = {2021-43},
}
@misc{testsa,
title = {Test Titlesema 51},
term = {2021-51},
}
@misc{testsb,
title = {Test Titlesemb 52},
term = {2021-52},
}
@misc{tests1,
title = {Test Titlesem1 53},
term = {2021-53},
}
@misc{tests2,
title = {Test Titlesem2 54},
term = {2021-54},
}
@misc{testsp,
title = {Test Titlesp 61},
term = {2021-61},
}
@misc{testsu,
title = {Test Titlesu 62},
term = {2021/2022-62},
}
@misc{testau,
title = {Test Titleau 63},
term = {2022-63},
}
@misc{testwi,
title = {Test Titlewi 64},
term = {2022-64},
}
\end{filecontents*}
\begin{filecontents*}[overwrite]{term.dbx}
\DeclareDatamodelFields[type=field, datatype=literal]{term,
authorposition,
university,
college,
school,
faculty,
department,
courtlist,
courtdivision,
courtcourt,
courtname,
courtbench,
image,
}
\DeclareDatamodelFields[type=field, format=xsv, datatype=literal]{sequence,
sequenceta,
}
%\DeclareDatamodelFields[type=list, datatype=literal]{location,
%}
\DeclareDatamodelEntryfields{term,
authorposition,
university,
college,
school,
faculty,
department,
sequence,
courtlist,
courtdivision,
courtcourt,
courtname,
courtbench,
sequenceta,
% location,
image,
}
\end{filecontents*}
\documentclass[12pt]{article}
\usepackage[english]{babel}
\usepackage{csquotes}
\usepackage[svgnames]{xcolor}
\usepackage{fontspec}
\babelprovide[import, onchar=ids fonts]{greek}
\babelfont[greek]{rm}
[Color=DarkGreen ,
]{Noto Serif}
\usepackage{xparse}
\usepackage{graphicx}
\ExplSyntaxOn
%term
\DeclareDocumentCommand { \fcompareb } { m }
{
\tl_set:Nn \l_my_tl { #1 }
\seq_set_split:NnV \l_tmpa_seq { - } \l_my_tl
\seq_get_right:NN \l_tmpa_seq \l_myright_tlv
\int_compare:nNnT { \l_myright_tlv } = { 31 } { \bibstring{hilaryterm} }
\int_compare:nNnT { \l_myright_tlv } = { 32 } { \bibstring{epiphanyterm} }
\int_compare:nNnT { \l_myright_tlv } = { 33 } { \bibstring{lentterm} }
\int_compare:nNnT { \l_myright_tlv } = { 34 } { \bibstring{candlemasterm} }
\int_compare:nNnT { \l_myright_tlv } = { 35 } { \bibstring{easterterm} }
\int_compare:nNnT { \l_myright_tlv } = { 36 } { \bibstring{trinityterm} }
\int_compare:nNnT { \l_myright_tlv } = { 37 } { \bibstring{michaelmasterm} }
\int_compare:nNnT { \l_myright_tlv } = { 41 } { \bibstring{firstterm} }
\int_compare:nNnT { \l_myright_tlv } = { 42 } { \bibstring{secondterm} }
\int_compare:nNnT { \l_myright_tlv } = { 43 } { \bibstring{thirdterm} }
\int_compare:nNnT { \l_myright_tlv } = { 51 } { \bibstring{firstsemester} }
\int_compare:nNnT { \l_myright_tlv } = { 52 } { \bibstring{secondsemester} }
\int_compare:nNnT { \l_myright_tlv } = { 53 } { \bibstring{semesterone} }
\int_compare:nNnT { \l_myright_tlv } = { 54 } { \bibstring{semestertwo} }
\int_compare:nNnT { \l_myright_tlv } = { 61 } { \bibstring{springterm} }
\int_compare:nNnT { \l_myright_tlv } = { 62 } { \bibstring{summerterm} }
\int_compare:nNnT { \l_myright_tlv } = { 63 } { \bibstring{autumnterm} }
\int_compare:nNnT { \l_myright_tlv } = { 64 } { \bibstring{winterterm} }
}
%year
\DeclareDocumentCommand { \fcomparec } { m }
{
\tl_set:Nn \l_my_tl { #1 }
\seq_set_split:NnV \l_tmpa_seq { - } \l_my_tl
\seq_get_left:NN \l_tmpa_seq \l_myleft_tlv
\tl_use:N \l_myleft_tlv
}
\ExplSyntaxOff
\usepackage[style=authoryear,
dateabbrev=false,% full name of season
language=autocite,%pick up the langid language, for citations
autolang=other,%wrap with otherlanguage environment and translate date-related names according to the langid
datamodel=term,
]{biblatex}
\NewBibliographyString{hilaryterm,
epiphanyterm,
lentterm,
candlemasterm,
easterterm,
trinityterm,
michaelmasterm,
firstterm,
secondterm,
thirdterm,
firstsemester,
secondsemester,
semesterone,
semestertwo,
springterm,
summerterm,
autumnterm,
winterterm,
}
\DefineBibliographyStrings{english}{%
% 30
hilaryterm = {Hilary Term},% jan-mar/apr
epiphanyterm = {Epiphany Term},
lentterm = {Lent Term},%feb-apr
candlemasterm = {Candlemas Term},
easterterm = {Easter Term},%apr-may
trinityterm = {Trinity Term},% apr-jun/jun-jul
michaelmasterm = {Michaelmas Term},% oct-dec
% 40
firstterm = {First Term},
secondterm = {Second Term},
thirdterm = {Third Term},
% 50
firstsemester = {First Semester},
secondsemester = {Second Semester},
semesterone = {Semester One},
semestertwo = {Semester Two},
% 60
springterm = {Spring Term},
summerterm = {Summer Term},
autumnterm = {Autumn Term},
winterterm = {Winter Term},
}
\addbibresource{\jobname.bib}
\newcommand\insertpic[1]{\includegraphics[width=1cm]{#1}}
%==============================
\newcommand\seqsep{\addcomma\addspace}
\newcommand\myseq[1]{\seqsep%
\ifstrequal{#1}{location}{\printlist{location}}{%
\ifstrequal{#1}{author}{\printnames[authorrev]{#1}}{%
\ifstrequal{#1}{image}{\usefield{\insertpic}{image}}{%\usefield{\includegraphics[scale=0.1]}{image}
\ifstrequal{#1}{term}{\printterm}{\printfield{#1}}%
}}}%
}
\DeclareFieldFormat{sequence}{
\forcsvfield{\myseq}{sequence}
}
%
\newcounter{seqtacounter}
\newcommand\seqtazero{\setcounter{seqtacounter}{0}}
\newcommand\seqtastep{\stepcounter{seqtacounter}}
%title author
\newcommand\seqsepta{\addcomma\addspace}
\newcommand\myseqta[1]{%
\seqtastep%
\ifnum\value{seqtacounter}=1\relax\else\seqsepta\fi%
\ifstrequal{#1}{location}{\printlist{location}}{}%
\ifstrequal{#1}{author}{\printnames[authorrev]{#1}}{}%
\ifstrequal{#1}{term}{\printterm}{\printfield{#1}}%
}
\DeclareFieldFormat{sequenceta}{
\seqtazero
\forcsvfield{\myseqta}{sequenceta}
}
%
\DeclareListFormat{language}{\ifbibstring{#1}{\bibstring{#1}\addcolon}{#1}}
\DeclareCiteCommand{\citeseasonall}
{}
{\textmd{\printlist{language}}
\printfield{title}\addcomma\addspace
\printdate}
{}
{}
\newcommand\uuformat[1]{#1}
\newcommand\cuformat[1]{#1}
\newcommand\suformat[1]{#1}
\newcommand\fuformat[1]{#1}
\newcommand\duformat[1]{#1}
\newcommand\postuuformat{}
\newcommand\postcuformat{}
\newcommand\postsuformat{}
\newcommand\postfuformat{}
\newcommand\postduformat{}
% courtlist,
% courtdivision,
% courtcourt,
% courtname,
% courtbench,
\newcommand\lcformat[1]{#1}
\newcommand\dcformat[1]{#1}
\newcommand\ccformat[1]{#1}
\newcommand\ncformat[1]{#1}
\newcommand\bcformat[1]{#1}
\newcommand\postlcformat[1]{#1}
\newcommand\postdcformat[1]{#1}
\newcommand\postccformat[1]{#1}
\newcommand\postncformat[1]{#1}
\newcommand\postbcformat[1]{#1}
\DeclareFieldFormat{plain}{#1}
\DeclareFieldFormat{plainb}{\fcompareb{#1}}
\DeclareFieldFormat{plainc}{\fcomparec{#1}}
\DeclareFieldFormat{authorposition}{#1}
\DeclareFieldFormat{university}{\uuformat{#1}\postuuformat}
\DeclareFieldFormat{college}{\cuformat{#1}\postcuformat}
\DeclareFieldFormat{school}{\suformat{#1}\postsuformat}
\DeclareFieldFormat{faculty}{\fuformat{#1}\postfuformat}
\DeclareFieldFormat{department}{\duformat{#1}\postduformat}
%
% courtlist,
% courtdivision,
% courtcourt,
% courtname,
% courtbench,
\DeclareFieldFormat{courtlist}{\lcformat{#1}\postlcformat}
\DeclareFieldFormat{courtdivision}{\dcformat{#1}\postdcformat}
\DeclareFieldFormat{courtcourt}{\ccformat{#1}\postccformat}
\DeclareFieldFormat{courtname}{\ncformat{#1}\postncformat}
\DeclareFieldFormat{courtbench}{\bcformat{#1}\postbcformat}
\newcommand\printterm{\seqsepta\printfield[plainb]{term}
\addcomma\addspace\printfield[plainc]{term}}
\DeclareNameFormat{authorrev}{%
\ifthenelse{\value{listcount}=1}
{\ifdefvoid{\namepartgiven}{}{%
\namepartgiven\space}\namepartfamily}%
{\ifdefvoid{\namepartgiven}{}{\namepartgiven\space
}%
\namepartfamily}%
\ifthenelse{\value{listcount}<\value{liststop}}
{\addcomma\space}
{}}
\DeclareCiteCommand{\citeseasonallx}
{}
{\textmd{\printlist{language}}%
\iffieldundef{sequenceta}{%true
\printfield{title}%
\iffieldundef{term}{}{%
\printterm}}{%false
\printfield{sequenceta}%
}%
\iffieldundef{sequence}{}{\printfield{sequence}}
}
{}
{}
\DeclareCiteCommand{\citeseasontitle}
{}
{\printfield{title}
}
{}
{}
\DeclareCiteCommand{\citeseason}
{}
{\printdate}
{}
{}
\DeclareCiteCommand{\citeseasonterm}
{}
{\printfield[plainb]{term}}
{}
{}
\DeclareCiteCommand{\citeseasontermyear}
{}
{\printfield[plainc]{term}}
{}
{}
\DefineBibliographyStrings{greek}{%
spring = {άνοιξη},
summer = {καλοκαίρι},
autumn = {φθινόπωρο},
winter = {χειμώνας},
langgreek = {Ελληνικά},
hilaryterm = {Ελληνικά Greek Hilary},
}
\DefineBibliographyStrings{italian}{%
spring = {primavera},
summer = {estate},
autumn = {autunno},
winter = {inverno},
langitalian = {italiano},
}
%-----------------------------
\title{\citeseasontitle{notesset1}}
\author{}
\date{\citeseason{notesset1}}
%------------------
\begin{document}
\maketitle
\section*{Overview}
\begin{itemize}
\item \textbf{\citeseasonall{notesset1}} covers introductory material.
\item \textbf{\citeseasonall{notesset2}} advances to the next topic.
\item \textbf{\citeseasonall{notesset3}} covers the extended course.
\item German: \textbf{\citeseasonall{notesset4}} is the xyz version.
\item Greek: \textbf{\citeseasonall{notesset5}} is the abc version.
\item Italian: \textbf{\citeseasonall{notesset5a}} is the abc version.
\end{itemize}
\section*{Season Extended}
\subsection*{University Terms and Court Terms}
%\citeseasonallx{testutha}\par
\citeseasonallx{testuta}. \citeseasonterm{testuta} of \citeseasontermyear{testuta} will see a new\ldots\par
%
\renewcommand\seqsep{\ \\ \makebox[2em]{\ }}
\renewcommand\uuformat[1]{\textsc{#1}}
\renewcommand\postuuformat{$\leftarrow$\par}
\noindent\citeseasonallx{testutb} xxx\par
\citeseasonallx{testutc}\par
\citeseasonallx{testutd}\par
\citeseasonallx{testute}\par
\citeseasonallx{testutf}\par\
\citeseasonallx{testutg}\par
\subsection*{Semesters}
\ \par
\citeseasonallx{testsa}\par
\citeseasonallx{testsb}\par
\citeseasonallx{tests1}\par
\citeseasonallx{tests2}\par
\subsection*{School Terms}
\ \par
\citeseasonallx{testta}, the \citeseasonterm{testta} of \citeseasontermyear{testta}\par
\citeseasonallx{testtb}\par
\citeseasonallx{testtc}\par
\ \par
\citeseasonallx{testsp}\par
\citeseasonallx{testsu}\par
\citeseasonallx{testau}\par
\citeseasonallx{testwi}\par
\section*{Languages}
\citeseasonallx{testutag}\par
%biber
%
%format.pm
%
%\begin{verbatim}
% my %
% seasons = ( 21 => 'spring',
% 22 => 'summer',
% 23 => 'autumn',
% 24 => 'winter' );
%
%...\texlive\2020
%\texmf-dist
%\source
%\bibtex
%\biber
%\biblatex-biber.tar
%\biblatex-biber
%\biblatex-biber-2.15
%\lib
%\Biber
%\Date
%\end{verbatim}
\renewcommand\seqsepta{\par}
\renewcommand\seqsep{\par}
\renewcommand\uuformat[1]{$\rightarrow$\begin{tabular}{|l|}\hline\textsc{#1}\\ \hline \end{tabular}}
\renewcommand\postuuformat{}
\citeseasonallx{testuta}\par\bigskip
\renewcommand\seqsepta{\addcomma\addspace}
\renewcommand\seqsep{\addcomma\addspace}
\renewcommand\uuformat[1]{#1}
\citeseasonallx{testutb}
\end{document}
Compile with lualatex in a recent TexLive because babel
uses lua code for language/script processing.
year
is a count register, butseason
is a range of counter values actually\newcommand\term{Spring 2015}
is simple and easily changed for next term. Sometimes over-automation creates more work than it alleviates.