PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Definieren von neuen Befehlen (Unterscheidung der Klammern)



e4d
29-09-2008, 15:18
Vorausgehend ist die folgende Frage: Formatierung des Quellnachweises (http://www.mrunix.de/forums/showthread.php?t=60514)

Das Ziel ist die kursive Schreibweise für Quellenangaben, z.B. Hanswurst (2003). Da mit bei der direkten Frage bisher keiner helfen konnte, versuche ich nun über Tricks an das Ergebnis herankommen.

Eine Idee ist mit Hilfe eines neuen Befehles:


\newcommand{\sccite}[1]{\textsc{\cite{#1}}}

Das Problem hierbei: es wird nur die geschweifte Klammer weitergegeben, nicht die eckige Klammer (die bei cite bspw. die Seitenangabe übergibt). Wie müßte man das machen? Ziel wäre also, daß ich am Ende nur noch \sccite[S.~88]{Wurst03} schreiben müßte...

mechanicus
29-09-2008, 16:11
Hallo,


\documentclass[11pt,a4paper]{scrartcl}

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

\usepackage[round]{natbib}
%%%%
\usepackage{filecontents}
\begin{filecontents}{Buch.bib}
@article{EULER,
author = {Euler, Leonhard},
year = {1750},
title = {SEIN WERK},
pages = {71--102},
volume = {98},
number = {5},
journal = {Journal},
}
\end{filecontents}
%%%%
\newcommand{\sccite}[2]{\textit{\citet[#1]{#2}}}
\begin{document}
Zitat \sccite{S. 21}{EULER} und \sccite{}{EULER}

\bibliographystyle{dinat}
\bibliography{buch}
\end{document}

voss
29-09-2008, 17:11
Das Ziel ist die kursive Schreibweise für Quellenangaben, z.B. Hanswurst (2003). Da mit bei der direkten Frage bisher keiner helfen konnte, versuche ich nun über Tricks an das Ergebnis herankommen.

Eine Idee ist mit Hilfe eines neuen Befehles:


\newcommand{\sccite}[1]{\textsc{\cite{#1}}}

Das Problem hierbei: es wird nur die geschweifte Klammer weitergegeben, nicht die eckige Klammer (die bei cite bspw. die Seitenangabe übergibt). Wie müßte man das machen? Ziel wäre also, daß ich am Ende nur noch \sccite[S.~88]{Wurst03} schreiben müßte...


\documentclass[11pt,a4paper]{scrartcl}

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

\usepackage[round]{natbib}
\newcommand\sccite[2][\empty]{{%
\itshape%
\ifx#1\empty\citet{#2}\else\citet[#1]{#2}\fi}}

\usepackage{filecontents}
\begin{filecontents}{Buch.bib}
@article{EULER,
author = {Euler, Leonhard},
year = {1750},
title = {SEIN WERK},
pages = {71--102},
volume = {98},
number = {5},
journal = {Journal},
}
\end{filecontents}

\begin{document}
Zitat \sccite[S. 21]{EULER} und \sccite{EULER}

\bibliographystyle{dinat}
\bibliography{Buch}

\end{document}


Herbert

sommerfee
29-09-2008, 20:20
Wenn es nur darum geht, die optionalen Argumente aufzusammeln und weiterzureichen (also nicht selber auszuwerten), kann man auch einen internen Befehl des caption-Paketes dafür mißbrauchen, sofern man das caption-Paket sowieso lädt:



\documentclass[11pt,a4paper]{scrartcl}

\usepackage[ansinew]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{caption}

\usepackage[round]{natbib}

\makeatletter
\newcommand\sccite{\caption@withoptargs\@sccite}
\newcommand\@sccite[2]{{\itshape\citet#1{#2}}}
\makeatother

\usepackage{filecontents}
\begin{filecontents}{Buch.bib}
@article{EULER,
author = {Euler, Leonhard},
year = {1750},
title = {SEIN WERK},
pages = {71--102},
volume = {98},
number = {5},
journal = {Journal},
}
\end{filecontents}

\begin{document}
Zitat \sccite[S. 21]{EULER} und \sccite{EULER}

\bibliographystyle{dinat}
\bibliography{Buch}

\end{document}


\caption@withoptargs sammelt ggf. ein * und beliebig viele optionale Argumente auf und übergibt sie an den angegebenen Befehl als Argument #1.

So wird z.B. bei \sccite[S. 21]{EULER} dann \@sccite mit den Argumenten #1 = "[S. 21]" und #2 = "EULER" aufgerufen, bei \sccite{EULER} wird dementsprechend \@sccite mit #1 = "" und #2 = "EULER" aufgerufen.

Gruß,
Axel