Einfügen eines vertikalen Leerzeichens nach einer bestimmten Referenz (Bibtex)

Einfügen eines vertikalen Leerzeichens nach einer bestimmten Referenz (Bibtex)

Ich möchte mit BibTeX nach einer bestimmten Referenz im Abschnitt „Referenzen“ einen vertikalen Abstand einfügen, idealerweise mit einer Befehlsfolge wie:

\cite{ABC-2001} 
\refvspace{1cm} 
\cite{XYZ-2002}

Die Referenzen werden mit importiert \bibliography{references.bib}. Die Reihenfolge entspricht der Reihenfolge der Zitate. Der Bibliografiestil ist benutzerdefiniert, dient aber \bibliographystyle{unsrt}der Eindeutigkeit.

Wie geht das, ohne die Bib-Datei zu ändern?

Ein möglicher Ausgangspunkt:

\documentclass{article}
\begin{filecontents}{refs.bib}
@misc{P, author = {P}, year = {2001}}
@misc{Q, author = {Q}, year = {2002}}
@misc{A, author = {A}, year = {2001}}
@misc{B, author = {B}, year = {2002}}
\end{filecontents}

\begin{document}
    This is a survey on different topics.

    \section*{Topic 1}

    Text \cite{P}. Text \cite{Q}.

    \section*{Topic 2}

    % TODO: Visually separate the two topics in the bibliography here

    Text \cite{A}. Text \cite{B}.

    \bibliographystyle{unsrt}
    \bibliography{refs}
\end{document}

Antwort1

Lassen Sie uns Ihre Eingabe berücksichtigen:

\cite{ABC-2001} 
\refvspace{1cm} 
\cite{XYZ-2002}

Wir können ein Makro zuweisen \vspace, das in die Zitierung für eingebunden wird XYZ-2002. Das heißt, es wird aufgerufen, \vspace{1cm}sobald es \bibitem{XYZ-2002}in der Bibliographie gefunden wird.

Das folgende Minimalbeispiel erreicht dies:

Bildbeschreibung hier eingeben

\documentclass{article}

\usepackage{filecontents}
\begin{filecontents}{refs.bib}
@misc{P, author = {P}, year = {2001}}
@misc{Q, author = {Q}, year = {2002}}
@misc{A, author = {A}, year = {2001}}
@misc{B, author = {B}, year = {2002}}
\end{filecontents}

\makeatletter
\let\@refvspace\relax
\providecommand{\refvspace}[1]{%
  \gdef\@refvspace{#1}% Store \refvspace
}
\let\old@cite\cite% Store \cite in \old@cite
\renewcommand{\cite}[1]{%
  \ifx\@refvspace\relax
    % No \refvspace was used
  \else
    \begingroup
    % Create vspace macro
    \edef\x{\endgroup
      \noexpand\global\noexpand\@namedef{#1@vspace}{\noexpand\vspace{\@refvspace}}}\x
    \global\let\@refvspace\relax
  \fi
  \old@cite{#1}}% Process regular \cite
\let\old@bibitem\bibitem% Store \bibitem in \old@bibitem
\renewcommand{\bibitem}[1]{%
  \csname #1@vspace\endcsname% Insert \vspace macro
  \old@bibitem{#1}}% Process regular \bibitem
\makeatother

\begin{document}
This is a survey on different topics.

\section*{Topic 1}

Text \cite{P}. \refvspace{\baselineskip}Text \cite{Q}.

\section*{Topic 2}

\refvspace{1cm}

Text \cite{A}. Text \cite{B}.

\bibliographystyle{unsrt}
\bibliography{refs}

\end{document}

Vorbehalte:

  • Das obige Beispiel ist ziemlich trivial und entfernt die optionalen Argumente aus \citeund \bibitem. Dies kann jedoch bei Bedarf wiederhergestellt werden.

  • .bibDer Inhalt wird weder in den noch in den geschrieben .bblund würde daher nur funktionieren, wenn der \bibliographyauftritt.nachalle deine \refvspaceMakros.

verwandte Informationen