Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I am trying to create my CV in Latex, after I got fed up with MS Word. I decided to use this template, just because it looks nice. But now I am struggling to add the list of my publications (stored in a bibtex file).

Ideally I would like the list to correspond to the overall layout of the document, so to be able to generate a list that looks like this:

\section{Publications} 
\cvitem{2012}{Authors 1, title 1,\textit{Journal}, etc} 
\cvitem{2011}{Authors 2, title 2,\textit{Journal}, etc}

If this is not possible, I would at least like to generate the entries using apa style from natbib, but sort them descending wrt the year of publication - because this seems more appropriate for a CV. How can I do it? EDIT: I tried to follow the approach to change one of the bst files, but I did it wrong for inproceedings. An example tex file is:

\documentclass{moderncv}
\moderncvstyle{classic}  
\moderncvcolor{blue}       

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@INPROCEEDINGS{a,
  author = {B},
  title = {C},
  booktitle = {D},
  year = {2004},
  pages = {373-385},
  publisher = {Springer},
}
\end{filecontents}

\firstname{E}
\familyname{Xample}
\begin{document}

\section{Publications}
\nocite{*}
\bibliographystyle{moderncv}
\bibliography{\jobname}
\end{document}

and the bst file I am using is (sorry for the big file):

ENTRY
  { address
    author
    booktitle
    chapter
    edition
    editor
    howpublished
    institution
    journal
    key
    month
    note
    number
    organization
    pages
    publisher
    school
    series
    title
    type
    volume
    year
  }
  {}
  { label }

INTEGERS { output.state before.all mid.sentence after.sentence after.block }

FUNCTION {init.state.consts}
{ #0 'before.all :=
  #1 'mid.sentence :=
  #2 'after.sentence :=
  #3 'after.block :=
}

STRINGS { s t }

FUNCTION {output.nonnull}
{ 's :=
  output.state mid.sentence =
    { ", " * write$ }
    { output.state after.block =
        { add.period$ write$
          newline$
          "\newblock " write$
        }
        { output.state before.all =
            'write$
            { add.period$ " " * write$ }
          if$
        }
      if$
      mid.sentence 'output.state :=
    }
  if$
  s
}

FUNCTION {output}
{ duplicate$ empty$
    'pop$
    'output.nonnull
  if$
}

FUNCTION {output.check}
{ 't :=
  duplicate$ empty$
    { pop$ "empty " t * " in " * cite$ * warning$ }
    'output.nonnull
  if$
}

FUNCTION {output.bibitem}
{ newline$
  "\cvitem{" write$
  year write$
  "}" write$
  newline$
  ""
  before.all 'output.state :=
}

FUNCTION {fin.entry}
{ add.period$
  write$
  newline$
}

FUNCTION {new.block}
{ output.state before.all =
    'skip$
    { after.block 'output.state := }
  if$
}

FUNCTION {new.sentence}
{ output.state after.block =
    'skip$
    { output.state before.all =
        'skip$
        { after.sentence 'output.state := }
      if$
    }
  if$
}

FUNCTION {not}
{   { #0 }
    { #1 }
  if$
}

FUNCTION {and}
{   'skip$
    { pop$ #0 }
  if$
}

FUNCTION {or}
{   { pop$ #1 }
    'skip$
  if$
}

FUNCTION {new.block.checka}
{ empty$
    'skip$
    'new.block
  if$
}

FUNCTION {new.block.checkb}
{ empty$
  swap$ empty$
  and
    'skip$
    'new.block
  if$
}

FUNCTION {new.sentence.checka}
{ empty$
    'skip$
    'new.sentence
  if$
}

FUNCTION {new.sentence.checkb}
{ empty$
  swap$ empty$
  and
    'skip$
    'new.sentence
  if$
}

FUNCTION {field.or.null}
{ duplicate$ empty$
    { pop$ "" }
    'skip$
  if$
}

FUNCTION {emphasize}
{ duplicate$ empty$
    { pop$ "" }
    { "{\em " swap$ * "}" * }
  if$
}

INTEGERS { nameptr namesleft numnames }

FUNCTION {format.names}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
      nameptr #1 >
        { namesleft #1 >
            { ", " * t * }
            { numnames #2 >
                { "," * }
                'skip$
              if$
              t "others" =
                { " et~al." * }
                { " and " * t * }
              if$
            }
          if$
        }
        't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

FUNCTION {format.authors}
{ author empty$
    { "" }
    { author format.names }
  if$
}

FUNCTION {format.editors}
{ editor empty$
    { "" }
    { editor format.names
      editor num.names$ #1 >
        { ", editors" * }
        { ", editor" * }
      if$
    }
  if$
}

FUNCTION {format.title}
{ title empty$
    { "" }
    { title "t" change.case$ }
  if$
}

FUNCTION {n.dashify}
{ 't :=
  ""
    { t empty$ not }
    { t #1 #1 substring$ "-" =
        { t #1 #2 substring$ "--" = not
            { "--" *
              t #2 global.max$ substring$ 't :=
            }
            {   { t #1 #1 substring$ "-" = }
                { "-" *
                  t #2 global.max$ substring$ 't :=
                }
              while$
            }
          if$
        }
        { t #1 #1 substring$ *
          t #2 global.max$ substring$ 't :=
        }
      if$
    }
  while$
}

FUNCTION {format.date}
{ year empty$
    { month empty$
        { "" }
        { "there's a month but no year in " cite$ * warning$
          month
        }
      if$
    }
    { month empty$
        'year
        { month " " * year * }
      if$
    }
  if$
}

FUNCTION {format.btitle}
{ title emphasize
}

FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #3 <
    { "~" }
    { " " }
  if$
  swap$ * *
}

FUNCTION {either.or.check}
{ empty$
    'pop$
    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  if$
}

FUNCTION {format.bvolume}
{ volume empty$
    { "" }
    { "volume" volume tie.or.space.connect
      series empty$
        'skip$
        { " of " * series emphasize * }
      if$
      "volume and number" number either.or.check
    }
  if$
}

FUNCTION {format.number.series}
{ volume empty$
    { number empty$
        { series field.or.null }
        { output.state mid.sentence =
            { "number" }
            { "Number" }
          if$
          number tie.or.space.connect
          series empty$
            { "there's a number but no series in " cite$ * warning$ }
            { " in " * series * }
          if$
        }
      if$
    }
    { "" }
  if$
}

FUNCTION {format.edition}
{ edition empty$
    { "" }
    { output.state mid.sentence =
        { edition "l" change.case$ " edition" * }
        { edition "t" change.case$ " edition" * }
      if$
    }
  if$
}

INTEGERS { multiresult }

FUNCTION {multi.page.check}
{ 't :=
  #0 'multiresult :=
    { multiresult not
      t empty$ not
      and
    }
    { t #1 #1 substring$
      duplicate$ "-" =
      swap$ duplicate$ "," =
      swap$ "+" =
      or or
        { #1 'multiresult := }
        { t #2 global.max$ substring$ 't := }
      if$
    }
  while$
  multiresult
}

FUNCTION {format.pages}
{ pages empty$
    { "" }
    { pages multi.page.check
        { "pages" pages n.dashify tie.or.space.connect }
        { "page" pages tie.or.space.connect }
      if$
    }
  if$
}

FUNCTION {format.vol.num.pages}
{ volume field.or.null
  number empty$
    'skip$
    { "(" number * ")" * *
      volume empty$
        { "there's a number but no volume in " cite$ * warning$ }
        'skip$
      if$
    }
  if$
  pages empty$
    'skip$
    { duplicate$ empty$
        { pop$ format.pages }
        { ":" * pages n.dashify * }
      if$
    }
  if$
}

FUNCTION {format.chapter.pages}
{ chapter empty$
    'format.pages
    { type empty$
        { "chapter" }
        { type "l" change.case$ }
      if$
      chapter tie.or.space.connect
      pages empty$
        'skip$
        { ", " * format.pages * }
      if$
    }
  if$
}

FUNCTION {format.in.ed.booktitle}
{ booktitle empty$
    { "" }
    { editor empty$
        { "In " booktitle emphasize * }
        { "In " format.editors * ", " * booktitle emphasize * }
      if$
    }
  if$
}

FUNCTION {empty.misc.check}
{ author empty$ title empty$ howpublished empty$
  month empty$ year empty$ note empty$
  and and and and and
  key empty$ not and
    { "all relevant fields are empty in " cite$ * warning$ }
    'skip$
  if$
}

FUNCTION {format.thesis.type}
{ type empty$
    'skip$
    { pop$
      type "t" change.case$
    }
  if$
}

FUNCTION {format.tr.number}
{ type empty$
    { "Technical Report" }
    'type
  if$
  number empty$
    { "t" change.case$ }
    { number tie.or.space.connect }
  if$
}

FUNCTION {format.article.crossref}
{ key empty$
    { journal empty$
        { "need key or journal for " cite$ * " to crossref " * crossref *
          warning$
          ""
        }
        { "In {\em " journal * "\/}" * }
      if$
    }
    { "In " key * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {format.crossref.editor}
{ editor #1 "{vv~}{ll}" format.name$
  editor num.names$ duplicate$
  #2 >
    { pop$ " et~al." * }
    { #2 <
        'skip$
        { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
            { " et~al." * }
            { " and " * editor #2 "{vv~}{ll}" format.name$ * }
          if$
        }
      if$
    }
  if$
}

FUNCTION {format.book.crossref}
{ volume empty$
    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
      "In "
    }
    { "Volume" volume tie.or.space.connect
      " of " *
    }
  if$
  editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
        { series empty$
            { "need editor, key, or series for " cite$ * " to crossref " *
              crossref * warning$
              "" *
            }
            { "{\em " * series * "\/}" * }
          if$
        }
        { key * }
      if$
    }
    { format.crossref.editor * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {format.incoll.inproc.crossref}
{ editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
        { booktitle empty$
            { "need editor, key, or booktitle for " cite$ * " to crossref " *
              crossref * warning$
              ""
            }
            { "In {\em " booktitle * "\/}" * }
          if$
        }
        { "In " key * }
      if$
    }
    { "In " format.crossref.editor * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {article}
{ output.bibitem
  "{" write$
  format.authors "author" output.check 
  format.title "title" output.check
  journal emphasize "journal" output.check
  format.vol.num.pages output
  fin.entry
  "}" write$
}

FUNCTION {book}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors output.nonnull
      crossref missing$
        { "author and editor" editor either.or.check }
        'skip$
      if$
    }
  if$
  new.block
  format.btitle "title" output.check
  crossref missing$
    { format.bvolume output
      new.block
      format.number.series output
      new.sentence
      publisher "publisher" output.check
      address output
    }
    { new.block
      format.book.crossref output.nonnull
    }
  if$
  format.edition output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {booklet}
{ output.bibitem
  format.authors output
  new.block
  format.title "title" output.check
  howpublished address new.block.checkb
  howpublished output
  address output
  format.date output
  new.block
  note output
  fin.entry
}

FUNCTION {inbook}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors output.nonnull
      crossref missing$
        { "author and editor" editor either.or.check }
        'skip$
      if$
    }
  if$
  new.block
  format.btitle "title" output.check
  crossref missing$
    { format.bvolume output
      format.chapter.pages "chapter and pages" output.check
      new.block
      format.number.series output
      new.sentence
      publisher "publisher" output.check
      address output
    }
    { format.chapter.pages "chapter and pages" output.check
      new.block
      format.book.crossref output.nonnull
    }
  if$
  format.edition output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {incollection}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  crossref missing$
    { format.in.ed.booktitle "booktitle" output.check
      format.bvolume output
      format.number.series output
      format.chapter.pages output
      new.sentence
      publisher "publisher" output.check
      address output
      format.edition output
      format.date "year" output.check
    }
    { format.incoll.inproc.crossref output.nonnull
      format.chapter.pages output
    }
  if$
  new.block
  note output
  fin.entry
}

FUNCTION {inproceedings}
{ output.bibitem
  "{" write$
  format.authors "author" output.check 
  format.title "title" output.check
  format.in.ed.booktitle "booktitle" output.check
  format.bvolume output
  format.number.series output
  format.pages output
    address empty$
      { organization output
        publisher output
      }
      { address output.nonnull
        organization output
        publisher output
      }
    if$
  fin.entry
  "}" write$
}

FUNCTION {conference} { inproceedings }

FUNCTION {manual}
{ output.bibitem
  author empty$
    { organization empty$
        'skip$
        { organization output.nonnull
          address output
        }
      if$
    }
    { format.authors output.nonnull }
  if$
  new.block
  format.btitle "title" output.check
  author empty$
    { organization empty$
        { address new.block.checka
          address output
        }
        'skip$
      if$
    }
    { organization address new.block.checkb
      organization output
      address output
    }
  if$
  format.edition output
  format.date output
  new.block
  note output
  fin.entry
}

FUNCTION {mastersthesis}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  "Master's thesis" format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {misc}
{ output.bibitem
  format.authors output
  title howpublished new.block.checkb
  format.title output
  howpublished new.block.checka
  howpublished output
  format.date output
  new.block
  note output
  fin.entry
  empty.misc.check
}

FUNCTION {phdthesis}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.btitle "title" output.check
  new.block
  "PhD thesis" format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {proceedings}
{ output.bibitem
  editor empty$
    { organization output }
    { format.editors output.nonnull }
  if$
  new.block
  format.btitle "title" output.check
  format.bvolume output
  format.number.series output
  address empty$
    { editor empty$
        { publisher new.sentence.checka }
        { organization publisher new.sentence.checkb
          organization output
        }
      if$
      publisher output
      format.date "year" output.check
    }
    { address output.nonnull
      format.date "year" output.check
      new.sentence
      editor empty$
        'skip$
        { organization output }
      if$
      publisher output
    }
  if$
  new.block
  note output
  fin.entry
}

FUNCTION {techreport}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  format.tr.number output.nonnull
  institution "institution" output.check
  address output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {unpublished}
{ output.bibitem
  "{" write$
  format.authors "author" output.check 
  format.title "title" output.check
  note "note" output.check
  fin.entry
  "}" write$
}

FUNCTION {default.type} { misc }

MACRO {jan} {"January"}

MACRO {feb} {"February"}

MACRO {mar} {"March"}

MACRO {apr} {"April"}

MACRO {may} {"May"}

MACRO {jun} {"June"}

MACRO {jul} {"July"}

MACRO {aug} {"August"}

MACRO {sep} {"September"}

MACRO {oct} {"October"}

MACRO {nov} {"November"}

MACRO {dec} {"December"}

MACRO {acmcs} {"ACM Computing Surveys"}

MACRO {acta} {"Acta Informatica"}

MACRO {cacm} {"Communications of the ACM"}

MACRO {ibmjrd} {"IBM Journal of Research and Development"}

MACRO {ibmsj} {"IBM Systems Journal"}

MACRO {ieeese} {"IEEE Transactions on Software Engineering"}

MACRO {ieeetc} {"IEEE Transactions on Computers"}

MACRO {ieeetcad}
 {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}

MACRO {ipl} {"Information Processing Letters"}

MACRO {jacm} {"Journal of the ACM"}

MACRO {jcss} {"Journal of Computer and System Sciences"}

MACRO {scp} {"Science of Computer Programming"}

MACRO {sicomp} {"SIAM Journal on Computing"}

MACRO {tocs} {"ACM Transactions on Computer Systems"}

MACRO {tods} {"ACM Transactions on Database Systems"}

MACRO {tog} {"ACM Transactions on Graphics"}

MACRO {toms} {"ACM Transactions on Mathematical Software"}

MACRO {toois} {"ACM Transactions on Office Information Systems"}

MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}

MACRO {tcs} {"Theoretical Computer Science"}

READ

FUNCTION {sortify}
{ purify$
  "l" change.case$
}

INTEGERS { len }

FUNCTION {chop.word}
{ 's :=
  'len :=
  s #1 len substring$ =
    { s len #1 + global.max$ substring$ }
    's
  if$
}

FUNCTION {sort.format.names}
{ 's :=
  #1 'nameptr :=
  ""
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { nameptr #1 >
        { "   " * }
        'skip$
      if$
      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
      nameptr numnames = t "others" = and
        { "et al" * }
        { t sortify * }
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

FUNCTION {sort.format.title}
{ 't :=
  "A " #2
    "An " #3
      "The " #4 t chop.word
    chop.word
  chop.word
  sortify
  #1 global.max$ substring$
}

FUNCTION {year.sort}
{ year empty$
    { key empty$
        { "to sort, need year or key in " cite$ * warning$
          ""
        }
        { key sortify }
      if$
    }
    { year sort.format.names }
  if$
}

FUNCTION {author.sort}
{ author empty$
    { key empty$
        { "to sort, need author or key in " cite$ * warning$
          ""
        }
        { key sortify }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {author.editor.sort}
{ author empty$
    { editor empty$
        { key empty$
            { "to sort, need author, editor, or key in " cite$ * warning$
              ""
            }
            { key sortify }
          if$
        }
        { editor sort.format.names }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {author.organization.sort}
{ author empty$
    { organization empty$
        { key empty$
            { "to sort, need author, organization, or key in " cite$ * warning$
              ""
            }
            { key sortify }
          if$
        }
        { "The " #4 organization chop.word sortify }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {editor.organization.sort}
{ editor empty$
    { organization empty$
        { key empty$
            { "to sort, need editor, organization, or key in " cite$ * warning$
              ""
            }
            { key sortify }
          if$
        }
        { "The " #4 organization chop.word sortify }
      if$
    }
    { editor sort.format.names }
  if$
}

FUNCTION {presort}
{ type$ "book" =
  type$ "inbook" =
  or
    'author.editor.sort
    { type$ "proceedings" =
        'editor.organization.sort
        { type$ "manual" =
            'author.organization.sort
            'year.sort
          if$
        }
      if$
    }
  if$
  "    "
  *
  author field.or.null
  sort.format.names
  *
  "    "
  *
  title field.or.null
  sort.format.title
  *
  #1 entry.max$ substring$
  'sort.key$ :=
}

ITERATE {presort}

SORT

STRINGS { longest.label }

INTEGERS { number.label longest.label.width }

FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
  #1 'number.label :=
  #0 'longest.label.width :=
}

FUNCTION {longest.label.pass}
{ number.label int.to.str$ 'label :=
  number.label #1 + 'number.label :=
  label width$ longest.label.width >
    { label 'longest.label :=
      label width$ 'longest.label.width :=
    }
    'skip$
  if$
}

EXECUTE {initialize.longest.label}

ITERATE {longest.label.pass}

FUNCTION {begin.bib}
{ 
}

EXECUTE {begin.bib}

EXECUTE {init.state.consts}

REVERSE {call.type$}

FUNCTION {end.bib}
{ 
}

EXECUTE {end.bib}
share|improve this question
    
I think it would be useful if you could create an MWE. From what you say I assume you use BibTeX, so you need to include your bibliography using \bibliography{cv_bib}. The style could be \bibliographystyle{apalike} and if you want to show all elements in the bibliography without citing them you nee \nocite{*}. Note that the order is alphabetic, so with \bibliographystyle{unsrt} you can sort manually. –  Jörg Dec 7 '12 at 15:50
    
This sounds like a job for biblatex. (Although moderncv does not support it, there's an adaptation called koma-moderncvclassic which allows using biblatex.) This answer looks like a good starting point. –  Christian Clason Dec 7 '12 at 16:01
    
I should add that I am not sure if there is a simple and automatic way to use apalike and sort the bibliography chronologically. However, it could be easily achieved using biber and biblatex. –  Jörg Dec 7 '12 at 16:03
1  
Ah, Christian was quicker. –  Jörg Dec 7 '12 at 16:03
    
I should also add that while it's quite easy to sort by year, things get more complicated if you care about the order of publications of the same year. For that reason, I switched back to manually sorting the bib file and using an unsorted style. (This is less an issue if you do not number the publications, though.) –  Christian Clason Dec 7 '12 at 16:10

3 Answers 3

up vote 8 down vote accepted

Here's a solution using bibtex and standard moderncv. You need to hack a suitable BibTeX style; a good starting point is plainyr, since it already has sorting by year and looks similar the mock-up in your question.

  1. Make a copy of plainyr.bst (use kpsewhere or CTAN to find it) and call it, e.g., plainyrrev.bst.

  2. Edit FUNCTION {output.bibitem} as follows:

    FUNCTION {output.bibitem}
    { newline$
      "\cvitem{" write$
      year write$
      "}" write$
      newline$
      ""
      before.all 'output.state :=
    }
    
  3. Edit FUNCTION {article} as follows:

    FUNCTION {article}
    { output.bibitem
      "{" write$
      format.authors "author" output.check 
      format.title "title" output.check
      journal emphasize "journal" output.check
      format.vol.num.pages output
      fin.entry
      "}" write$
    }
    
  4. Remove everything relating to the bibliography environment from FUNCTION {begin.bib} and FUNCTION {end.bib}:

    FUNCTION {begin.bib}
    {
    }
    

    and

    FUNCTION {end.bib}
    {
      newline$
    }
    
  5. Replace ITERATE {call.type$} by REVERSE {call.type$}.

  6. Optional: If you want each year to appear only for the first paper of that year, add

    STRINGS {oldyear}
    
    FUNCTION {year.or.none}
    { 's :=
        oldyear empty$
         { s 'oldyear := s }
         { s oldyear =
             { "" }
             { s 'oldyear := s }
           if$
         }
        if$
    }
    

    before FUNCTION {output.bibitem} and there change the line

    year write$
    

    to

    year year.or.none write$
    

    (shamelessly adapted from this answer).

Then,

\documentclass{moderncv}
\moderncvstyle{classic}  
\moderncvcolor{blue}       

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{A01,
  author = {Author, A.},
  journal = {Good Journal},
  year = {2001},
  title = {Alpha},
}
@article{B02,
  author = {Buthor, B.},
  journal = {Very Good Journal},
  year = {2008},
  title = {Bravo},
}
@article{C03,
  author = {Cuthor, C.},
  journal = {Also Good Journal},
  year = {2004},
  title = {Charlie},
}
@article{D04,
  author = {Duthor, D.},
  year = {2004},
  journal = {Best Journal},
  title = {Delta},
}
\end{filecontents}

\firstname{E}
\familyname{Xample}
\begin{document}

\section{Publications}
\nocite{*}
\bibliographystyle{plainyrrev}
\bibliography{\jobname}

\end{document}

does the trick:

publications

If you have books, proceedings, unpublished, etc., you need to adapt the corresponding entries as well, of course.

share|improve this answer
    
Thanks for your answer! I am trying to implement is now, but I am getting the error: (./Grzegorz Andruszkiewicz CV.bbl) Runaway argument? {Grzegorz Andruszkiewicz, Krzysztof Ciebiera, Marcin Gozdalik, Cezary\ETC. ! File ended while scanning use of \\cvitem. &lt;inserted text&gt; \par l.138 \bibliography{../bib/andruszkiewicz}. How do I debug this? –  Grzenio Dec 11 '12 at 17:57
    
@Grzenio -- Can you add a minimal working example to your question? (Strip out everything but the publications section from your CV, and post the BibTeX entry that gives you trouble.) Then I'll take a look at it. –  Christian Clason Dec 11 '12 at 18:45
    
Hi, it would be easier if I could debug it myself. Otherwise I will bother you with each and every detail all the time :) –  Grzenio Dec 11 '12 at 21:22
    
Looks like my function for INPROCEEDINGS doesn't end the curly braces (this is the oldest entry). The function is as follows: FUNCTION {inproceedings} { output.bibitem "{" write$ format.authors "author" output.check format.title "title" output.check format.in.ed.booktitle "booktitle" output.check format.bvolume output format.number.series output format.pages output address empty$ { organization output publisher output } { address output.nonnull organization output publisher output } if$ fin.entry "}" write$ } –  Grzenio Dec 11 '12 at 21:24
1  
@Grzenio -- Found the problem: Apparently end.bib does need a final newline$. I've edited the answer accordingly. Sorry! –  Christian Clason Dec 12 '12 at 21:42

This is a partial (and not completely working answer) using koma-moderncvclassic, biblatex and biber.

Sorting descending by year is easy (sorting=ydnt), but it get's difficult because we have to wrap the year and the rest of the bibliography into \cvlist{<year>}{<everything else>}.

What I tried to do is: First, remove the brackets and delimiter from the year; Second, remove the year from the author bibmacro; Third go directly into the Bibliography Driver for article, change the order and wrap everything into \cvlist.

As lockstep discusses, changing the driver directly can be a bad idea (but here I don't see another way). The answer is incomplete in the sense that in only works for articles here, and that there is a ghost-line between entries that I can't get rid of.

Edit: I just saw in your comments that the template of your choice is not in KOMA-CV. Would you consider switching your template? Fixing my answer to make it properly working is probably easier than doing the same in BibTeX.

\documentclass{scrartcl}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage[%
 backend=biber,% or bibtex8
 style=authoryear,%
 sorting=ydnt,% sorted by year, descending
]{biblatex}

\usepackage{xpatch}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@article{A01,
  author = {Author, A.},
  journal = {Good Journal},
  year = {2001},
  title = {Alpha},
}
@article{B02,
  author = {Buthor, B.},
  journal = {Very Good Journal},
  year = {2008},
  title = {Bravo},
}
@article{C03,
  author = {Cuthor, C.},
  journal = {Bad Journal},
  year = {2003},
  title = {Charlie},
}
@article{D04,
  author = {Duthor, D.},
  year = {2004},
  journal = {Mediocre Journal},
  title = {Delta},
}
\end{filecontents}

\addbibresource{\jobname.bib}


\newcommand*{\firstname}{Minna}
\newcommand*{\familyname}{von Barnhelm}

\usepackage[myblue]{koma-moderncvclassic} % color theme as option; default = myblue; other predefined colors that may be used: red, green, blue, cyan, magenta, yellow, black, white, darkgray, gray, lightgray

%remove brackets from year
\xpatchbibmacro{date+extrayear}{%
  \printtext[parens]}{\printtext}{}{}

% remove year from the author bibmacro
\xpatchbibmacro{author}{%
 \usebibmacro{date+extrayear}}
 {}{}{}

%change order and wrap into \cvline
\DeclareBibliographyDriver{article}{%
\cvline{\usebibmacro{date+extrayear}}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/translator+others}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{bytranslator+others}%
  \newunit\newblock
  \printfield{version}%
  \newunit\newblock
  \usebibmacro{in:}%
  \usebibmacro{journal+issuetitle}%
  \newunit
  \usebibmacro{byeditor+others}%
  \newunit
  \usebibmacro{note+pages}%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{issn}}
    {}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \usebibmacro{related}%
  \usebibmacro{finentry}}%
  }


\defbibheading{bibliography}[Publications]{\section{#1}}

\begin{document}
\nocite{*}
\printbibliography

\end{document}

enter image description here

share|improve this answer
    
After trying it, it seems that this solution works out of the box even for moderncv. Maybe there are some hidden issues I'm missing, of course. –  T. Verron Mar 14 '13 at 15:32

As mentioned by Jörg, biblatex (with any backend) already supports this sorting scheme via the load-time option setting sorting=ydnt. For the bibliography layout, you can add year item labels and incorporate moderncv's thebibliography layout parameters via \defbibenvironment.

\documentclass{moderncv}
\moderncvstyle{classic}
\moderncvcolor{blue}
\usepackage[style=authoryear,sorting=ydnt,dashed=false]{biblatex}

\renewbibmacro*{date}{}
\renewbibmacro*{date+extrayear}{}
\renewbibmacro*{issue+date}{}
\newcommand*{\bibyear}{}

\defbibenvironment{bibliography}
  {\list
     {\iffieldequals{year}{\bibyear}
        {}
        {\printfield{year}%
         \savefield{year}{\bibyear}}}
     {\setlength{\topsep}{0pt}% layout parameters based on moderncvstyleclassic.sty
      \setlength{\labelwidth}{\hintscolumnwidth}%
      \setlength{\labelsep}{\separatorcolumnwidth}%
      \setlength{\itemsep}{\bibitemsep}%
      \leftmargin\labelwidth%
      \advance\leftmargin\labelsep}%
      \sloppy\clubpenalty4000\widowpenalty4000}
  {\endlist}
  {\item}

\firstname{John}
\familyname{Doe}
\addbibresource{biblatex-examples.bib}

\begin{document}
\makecvtitle
\nocite{companion,bertram,cicero,augustine}
\printbibliography[title={Publications}]
\end{document}

enter image description here

In theory this same approach should work for the koma-moderncvclassic package, but it is actually not fully compatible with biblatex; its custom \maketitle command has some odd side-effects on \printbibliography.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.