From 2fed13faea42a7ff6db918d6d5203da55a69bf92 Mon Sep 17 00:00:00 2001 From: David Runge Date: Thu, 29 Dec 2016 15:07:39 +0100 Subject: Adding first version of expose and thesis, including help. --- expose/bib/ssr-networking.bib | 98 ++ expose/expose.pdf | Bin 0 -> 161854 bytes expose/expose.tex | 265 ++++ expose/images/ssr-networking.pdf | Bin 0 -> 7212 bytes expose/images/ssr-networking.svg | 530 +++++++ expose/input/abstract.tex | 3 + expose/input/introduction.tex | 2 + help/Anforderungen_an_Abschlussarbeiten.pdf | Bin 0 -> 15933 bytes ...ndungsbeispiele_Literaturverweisungssysteme.pdf | Bin 0 -> 169614 bytes help/Bewertungsraster.pdf | Bin 0 -> 84368 bytes help/Bibliography.bib | 181 +++ help/Expose_Anleitung.pdf | Bin 0 -> 94828 bytes ... Zitieren und Verweisen Anwendungsbeispiele.pdf | Bin 0 -> 169614 bytes help/FG AK Zitieren und Verweisen Systeme.pdf | Bin 0 -> 193445 bytes help/FG_AK_Deutsch_AutorJahr.bst | 1638 +++++++++++++++++++ help/FG_AK_Deutsch_AutorJahr.pdf | Bin 0 -> 90992 bytes help/FG_AK_Deutsch_Nummer.bst | 1637 +++++++++++++++++++ help/FG_AK_Deutsch_Nummer.pdf | Bin 0 -> 90980 bytes help/FG_AK_English_AuthorYear.bst | 1658 ++++++++++++++++++++ help/FG_AK_English_AuthorYear.pdf | Bin 0 -> 92181 bytes help/FG_AK_English_Number.bst | 1657 +++++++++++++++++++ help/FG_AK_English_Number.pdf | Bin 0 -> 92156 bytes help/Literatur.tex | 127 ++ help/LiteraturreferenzenAKStyle.pdf | Bin 0 -> 216044 bytes help/Rg_8A6825GW9TG.pdf | Bin 0 -> 117235 bytes thesis/thesis.pdf | Bin 0 -> 150608 bytes thesis/thesis.tex | 265 ++++ 27 files changed, 8061 insertions(+) create mode 100644 expose/bib/ssr-networking.bib create mode 100644 expose/expose.pdf create mode 100644 expose/expose.tex create mode 100644 expose/images/ssr-networking.pdf create mode 100644 expose/images/ssr-networking.svg create mode 100644 expose/input/abstract.tex create mode 100644 expose/input/introduction.tex create mode 100644 help/Anforderungen_an_Abschlussarbeiten.pdf create mode 100644 help/Anwendungsbeispiele_Literaturverweisungssysteme.pdf create mode 100644 help/Bewertungsraster.pdf create mode 100755 help/Bibliography.bib create mode 100644 help/Expose_Anleitung.pdf create mode 100755 help/FG AK Zitieren und Verweisen Anwendungsbeispiele.pdf create mode 100755 help/FG AK Zitieren und Verweisen Systeme.pdf create mode 100644 help/FG_AK_Deutsch_AutorJahr.bst create mode 100644 help/FG_AK_Deutsch_AutorJahr.pdf create mode 100644 help/FG_AK_Deutsch_Nummer.bst create mode 100644 help/FG_AK_Deutsch_Nummer.pdf create mode 100644 help/FG_AK_English_AuthorYear.bst create mode 100644 help/FG_AK_English_AuthorYear.pdf create mode 100644 help/FG_AK_English_Number.bst create mode 100644 help/FG_AK_English_Number.pdf create mode 100755 help/Literatur.tex create mode 100644 help/LiteraturreferenzenAKStyle.pdf create mode 100644 help/Rg_8A6825GW9TG.pdf create mode 100644 thesis/thesis.pdf create mode 100644 thesis/thesis.tex diff --git a/expose/bib/ssr-networking.bib b/expose/bib/ssr-networking.bib new file mode 100644 index 0000000..0ebf2b4 --- /dev/null +++ b/expose/bib/ssr-networking.bib @@ -0,0 +1,98 @@ +@phdthesis{ baalman2007, + title = "On wave field synthesis and electro-acoustic music", + author = "Marije A.J. Baalman", + year = "2007", + month = "Dec", + publisher = "Technische Universität Berlin", + volume = "1"} + +@inproceedings{ baalmanetal2007, + title = "Renewed architecture of the sWONDER software for Wave Field Synthesis on large scale systems", + author = "Marije A.J. Baalman and Torben Hohn and Simon Schampijer and Thilo Koch", + year = "2007", + month = "May", + school = "Technische Universität Berlin", + publisher = "Linux Audio Conference", + volume = "1"} + +@mastersthesis{ goltz2010, + title = "Planung und Konfiguration eines Labors zur Wellenfeldsynthese", + author = "Florian Goltz", + year = "2010", + month = "Aug", + publisher = "Technische Universität Berlin", + volume = "1"} + +@conference{ ahrensetal2008, + title = "Analysis and Improvement of Pre-equalization in 2.5-Dimensional Wave Field Synthesis", + author = "Sascha Spors, Jens Ahrens", + year = "2010", + month = "May", + publisher = "Audio Engineering Society Inc.", + volume = "1"} + +@conference{ ahrensetal2008, + title = "The Theory of Wave Field Synthesis Revisited", + author = "Sascha Spors, Rudolf Rabenstein, Jens Ahrens", + year = "2008", + month = "May", + publisher = "Audio Engineering Society Inc.", + volume = "1"} + +@phdthesis{ melchior2011, + title = "Investigations on spatial sound design based on measured room impulse responses", + author = "Frank Melchior", + note = "Spatial Sound Design", + year = "2011", + month = "Jun", + publisher = "Technische Universiteit Delft", + volume = "1"} + +@misc{ website:jackaudio2016, + title = "JACK Audio Connection Kit", + author = "Paul Davis", + year = "2016", + month = "May", + url = "http://jackaudio.org/"} + +@misc{ website:swonder2016, + title = "sWONDER", + author = "Marije Baalman", + year = "2016", + month = "May", + url = "https://sourceforge.net/projects/swonder/"} + +@misc{ website:wfscollider2016, + title = "WFSCollider on Github", + author = "Game Of Life Foundation", + year = "2016", + month = "May", + url = "https://github.com/GameOfLife/WFSCollider"} + +@misc{ website:gameoflife2016, + title = "Game Of Life Foundation", + author = "Game Of Life Foundation", + year = "2016", + month = "May", + url = "http://gameoflife.nl/en"} + +@misc{ website:ssr2016, + title = "SoundScape Renderer", + author = "Quality and Usability Lab/TU Berlin and Institut für Nachrichtentechnik/Universität Rostock", + year = "2016", + month = "May", + url = "http://spatialaudio.net/ssr/"} + +@misc{ website:supercollider2016, + title = "SuperCollider", + author = "James McCartney", + year = "2016", + month = "May", + url = "http://supercollider.github.io/"} + +@misc{ website:puredata2016, + title = "PureData", + author = "Miller Puckette", + year = "2016", + month = "May", + url = "http://puredata.info"} diff --git a/expose/expose.pdf b/expose/expose.pdf new file mode 100644 index 0000000..f014812 Binary files /dev/null and b/expose/expose.pdf differ diff --git a/expose/expose.tex b/expose/expose.tex new file mode 100644 index 0000000..b785684 --- /dev/null +++ b/expose/expose.tex @@ -0,0 +1,265 @@ +\documentclass[12pt,a4paper,oneside,titlepage]{article} +\usepackage[english]{babel} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{textcomp} % Sonderzeichen, z.B. € +%\usepackage{citep} +\usepackage{listings} +\lstdefinelanguage{Ini}{basicstyle=\ttfamily\tiny, + columns=fullflexible, + tag=[s]{[]}, + tagstyle=\color{blue}\bfseries, + usekeywordsintag=true +}[html] +\lstdefinelanguage{bash}{basicstyle=\ttfamily\tiny} +\usepackage{ulem} +\usepackage{lmodern} +\usepackage{multirow} +\usepackage{url} +\usepackage{graphicx} % for PDF scaling +\usepackage{pdfpages} +\usepackage{float} +\floatstyle{boxed} +\restylefloat{figure} +\usepackage{color} +\usepackage{bbding} +\usepackage{hyperref} +\usepackage[font=scriptsize]{caption} +\usepackage[numbers]{natbib} +\graphicspath{{images//}} + +\begin{document} + \title{Exposé: SoundScape Renderer Networking} + \author{David Runge\\ + Audiokommunikation und -technologie\\ + Fachgebiet Audiokommunikation\\ + Technische Universität Berlin\\ + \href{dave@sleepmap.de}{dave@sleepmap.de} + } + \date{\today} + \maketitle + \begin{abstract} + Wave Field Synthesis (WFS) as a technological concept has been around for + many years now and all over the world several institutions run small and + some even large scale setups ranging from single speaker lines to those + facilitating a couple of hundred loudspeakers respectively.\\ + The still evolving implementations are driven by several rendering + engines, of which two free and open-source ones, namely sWONDER and + SoundScape Renderer, have (partially) been developed at TU Berlin.\\ + The latter due to its current design is not yet able to render for large + scale setups, ie.\ those using several computers to render audio on a + loudspeaker setup, due to the high amount of channels.\\ + Its solid codebase however, which additionally offers a framework for many + more renderers, and the ongoing development, deems further work on this + application a good future investment.\\ + The proposed work seeks to extend the SoundScape Renderer functionality to + turn it into a networking application for large scale WFS setups. +\end{abstract} + \section{Introduction} + Wave Field Synthesis (WFS) describes a spatial technique for rendering audio. As + such it aims at synthesizing a sound field of desired acoustic preference + in a given listening area, assuming a planar reproduction to be most + suitable for most applications.\\ + WFS is typically implemented using a curved or linear loudspeaker array + surrounding the listening area.\\ + Several free and open-source renderer applications exist for WFS + environments, with varying stages of feature richness.\\ + The proposed work will focus on one of them and its extension towards WFS + on large scale systems. + + \section{Free and open-source wave field synthesis renderers} + To date there exist three (known of) free and open-source Wave Field + Synthesis renderers, which are all \href{http://jackaudio.org/}{JACK Audio + Connection Kit (JACK)} \citep{website:jackaudio2016} clients: + \begin{itemize} + \item \href{https://sourceforge.net/projects/swonder/}{sWONDER} \citep{website:swonder2016}, + developed by Technische Universität Berlin, Germany + \item \href{https://github.com/GameOfLife/WFSCollider}{WFSCollider} \citep{website:wfscollider2016}, + developed by \href{http://gameoflife.nl/en}{Game Of Life Foundation} \citep{website:gameoflife2016}, + The Hague, Netherlands + \item \href{http://spatialaudio.net/ssr/}{SoundScape Renderer (SSR)} \citep{website:ssr2016}, + developed by Quality \& Usability Lab, Deutsche Telekom Laboratories + and TU Berlin and Institut für Nachrichtentechnik, Universität Rostock + \end{itemize} + Currently only WFSCollider and the SSR are actively maintained and + developed, thussWONDER, although used in some setups, loses significance. + Generally it can be said, that different concepts apply to the three + renderers, which are about to be explained briefly in the following + sections. + + \subsection{WONDER} + sWONDER \citep{baalman2007} consists of a set of C++ applications that provide binaural and + WFS rendering. In 2007 it was specifically redesigned + \citep{baalmanetal2007} to cope with large scale WFS setups in which + several (computer) nodes, providing several speakers each, drive a system + together.\\ + In these setups each node receives all available audio streams (which + represent one virtual audio source respectively) redundantly and a master + application signals which node is responsible for rendering what source + on which speaker.\\ + It uses Open Sound Control (OSC) for messaging between its parts and for + setting its controls. Apart from that, it can be controlled through a + Graphical User Interface (GUI), that was specifically designed for it. + Unfortunately sWONDER has not been actively maintained for several years, + has a complex setup chain and many bugs, that are not likely to get fixed + any time soon. + + \subsection{WFSCollider} + WFSCollider was built on top of + \href{https://supercollider.github.io}{SuperCollider} 3.5 + \citep{website:supercollider2016} and is also capable of driving large + scale systems. It uses a different approach in + doing so, though: Whereas withsWONDER all audio streams are distributed + to each node, WFSCollider usually uses the audio files to be played on + all machines simultaneously and synchronizes between them.\\ + It has a feature-rich GUI in the ``many window'' style, making available + time lines and movement of sources through facilitating what the sclang + (SuperCollider programming language) has to offer.\\ + As WFSCollider basically is SuperCollider plus extra features, it is also + an OSC enabled application and can thus also be used for mere + multi-channel playback of audio.\\ + Although it has many useful features, it requires MacOSX (Linux version + still untested) to run, is built upon a quite old version of + \href{https://supercollider.github.io}{SuperCollider} and is likely never + to be merged into it, due to many core changes to it. + + \subsection{SoundScape Renderer} + SoundScape Renderer (SSR), also a C++ application, running on Linux and + MacOSX, is a multi-purpose spatial audio renderer, as it is not only + capable of Binaural Synthesis and WFS, but also Higher-Order Ambisonics + and Vector Base Amplitude Panning.\\ + It can be used with a GUI or headless (without one), depicting the + virtual sources, their volumes and positions, alongside which speakers + are currently used for rendering a selected source. + SSR uses TCP/IP sockets for communication and thus is not directly OSC + enabled. This functionality can be achieved using the capapilities of + other applications such as \href{http://puredata.info}{PureData} + \citep{website:puredata2016} in combination with it though.\\ + Unlike the two renderers above, the SSR is not able to run large-scale + WFS setups, as it lacks the features to communicate between instances of + itself on several computers, while these instances serve a subset of the + available loudspeakers. + + \section{Extending Sound Scape Renderer functionality} + The SSR, due to its diverse set of rendering engines, which are made + available through an extensible framework, and its clean codebase, is a + good candidate for future large scale WFS setups. These type of features + are not yet implemented though and will need testing.\\ + Therefore I propose the implementation and testing of said feature, making + the SSR capable of rendering on large scale WFS setups with many nodes, + controlled by a master instance.\\ + The sought implementation is inspired by the architecture of sWONDER, but + instead of creating many single purpose applications, the master/node + feature will be made available through flags to the ssr executable, when + starting it. This behavior is already actively harnessed eg.\ for selecting + one of the several rendering engines. + \begin{figure}[!htb] + \centering + \includegraphics[scale=0.9, trim = 31mm 190mm 24mm 8mm, clip]{ssr-networking.pdf} + \caption{A diagram displaying the SSR master/node setup with TCP/IP + socket connections over network (green lines), audio channels (red dashed + lines) and OSC connection (blue dashed line). Machines are indicated as red + dashed rectangles and connections to audio hardware as outputs of SSR + nodes as black lines below them.} + \label{fig:ssr-networking} + \end{figure} + While the SSR already has an internal logic to know which loudspeaker will + be used for what virtual audio source, this will have to be extended to be + able to know which renderer node has to render what source on which + loudspeaker (see Figure~\ref{fig:ssr-networking}). + To achieve the above features, the SSR's messaging (and thus also settings) + capabilities have to be extended alongside its internal logic concerning + the selection of output channels (and the master to node notification + thereof). To introduce as little redundant code as possible, most likely a + ``the client knows all'' setup is desirable, in which each node knows about + the whole setup, but is also set to only serve its own subset of + loudspeakers in it. This will make sure that the rendering engine remains + functional also in a small scale WFS setup.\\ + The lack of a direct OSC functionality, as provided by the two other + renderers, will not be problematic, as master and nodes can communicate + through their builtin TCP/IP sockets directly and the master can, if + needed, be controlled via OSC. + + \section{Prelimenaries} + In preparation to the exposé I tried to implement a side-by-side + installation, using Arch Linux on a medium scale setup, facilitating the + WFS system of the Electronic Studio at TU Berlin. Unfortunately the + proprietary Dante driver, that is used in that system is very complex to be + built, as well as underdeveloped and thus keeps the system from being + easily updated, which is needed for testing purposes (finding a suitable + real-time, low-latency Linux kernel), trying out new software features, + building new software and keeping a system safe. The driver will most + likely require changes to the hardware due to implemention of hardware + branding by the vendor and dire testing before usage.\\ + Although eventually using a proper WFS setup for testing will be necessary, + it is luckily not needed for implementing the features, as they can already be + worked out using two machines running Linux, JACK and the development version + of SSR.\\ + The hardware of the large scale setup at TU Berlin in H0104 is currently + about to be updated and therefore a valuable candidate for testing of the + sought SSR features. + + \section{Schedule} + I propose a six month schedule for the implementation and testing of the + changes to the source code and writing of an accompanying thesis. The + following rough schedule should serve as a guideline for the realization of + the work:\\ + \begin{tabular}{|l|l|l|l|} + \hline + \multicolumn{4}{|c|}{\textbf{Schedule}}\\ + \hline + \textbf{Week} & \textbf{Implementation} & \textbf{Tests} & \textbf{Thesis} \\ + \hline + 1 & Reading into codebase & & \\ + \hline + 2 & Reading into codebase & & \\ + \hline + 3 & Reading into codebase & & \\ + \hline + 4 & Reading into codebase & & \\ + \hline + 5 & Assessing changes & & Documentation \\ + \hline + 6 & Assessing changes & & Documentation \\ + \hline + 7 & Implementing changes & & \\ + \hline + 8 & Implementing changes & & \\ + \hline + 9 & Implementing changes & & \\ + \hline + 10 & Implementing changes & & \\ + \hline + 11 & Implementing changes & & \\ + \hline + 12 & Implementing changes & & \\ + \hline + 13 & Implementing changes & & Preparation\\ + \hline + 14 & Implementing changes & & Preparation\\ + \hline + 15 & & Small scale setup & Writing\\ + \hline + 16 & & Large scale setup & Writing\\ + \hline + 17 & & Large scale setup & Writing\\ + \hline + 18 & & Large scale setup & Writing\\ + \hline + 19 & Large scale setup (scripts) & & Writing\\ + \hline + 20 & Large scale setup (scripts) & & Writing\\ + \hline + 21 & Large scale setup (scripts) & & Writing\\ + \hline + 22 & & & Writing\\ + \hline + 23 & & & Writing\\ + \hline + 24 & & & Writing\\ + \hline + \end{tabular} + \pagebreak + \bibliographystyle{plainnat} + \bibliography{bib/ssr-networking} +\end{document} diff --git a/expose/images/ssr-networking.pdf b/expose/images/ssr-networking.pdf new file mode 100644 index 0000000..0efe0b4 Binary files /dev/null and b/expose/images/ssr-networking.pdf differ diff --git a/expose/images/ssr-networking.svg b/expose/images/ssr-networking.svg new file mode 100644 index 0000000..5ad38b3 --- /dev/null +++ b/expose/images/ssr-networking.svg @@ -0,0 +1,530 @@ + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SSR Node + + + + SSR Node + + + + SSR Node + + + + SSR Node + + + + + + SSR Master + + + + + ControlMachine + + + + diff --git a/expose/input/abstract.tex b/expose/input/abstract.tex new file mode 100644 index 0000000..46bfd8f --- /dev/null +++ b/expose/input/abstract.tex @@ -0,0 +1,3 @@ +\begin{abstract} +Lorem ipsum blah +\end{abstract} diff --git a/expose/input/introduction.tex b/expose/input/introduction.tex new file mode 100644 index 0000000..f96114a --- /dev/null +++ b/expose/input/introduction.tex @@ -0,0 +1,2 @@ +\section{Introduction} + diff --git a/help/Anforderungen_an_Abschlussarbeiten.pdf b/help/Anforderungen_an_Abschlussarbeiten.pdf new file mode 100644 index 0000000..1d8a8b7 Binary files /dev/null and b/help/Anforderungen_an_Abschlussarbeiten.pdf differ diff --git a/help/Anwendungsbeispiele_Literaturverweisungssysteme.pdf b/help/Anwendungsbeispiele_Literaturverweisungssysteme.pdf new file mode 100644 index 0000000..c132891 Binary files /dev/null and b/help/Anwendungsbeispiele_Literaturverweisungssysteme.pdf differ diff --git a/help/Bewertungsraster.pdf b/help/Bewertungsraster.pdf new file mode 100644 index 0000000..5eed478 Binary files /dev/null and b/help/Bewertungsraster.pdf differ diff --git a/help/Bibliography.bib b/help/Bibliography.bib new file mode 100755 index 0000000..6f024db --- /dev/null +++ b/help/Bibliography.bib @@ -0,0 +1,181 @@ +%% This BibTeX bibliography file was created using BibDesk. +%% http://bibdesk.sourceforge.net/ + + +%% Created for panik at 2011-10-28 11:46:25 +0200 + + +%% Saved with string encoding Unicode (UTF-8) + + +@comment{jabref-meta: selector_publisher:} +@comment{jabref-meta: selector_author:} +@comment{jabref-meta: selector_journal:} +@comment{jabref-meta: selector_keywords:} + + + +@article{Blauert1978, + Author = {Blauert, Jens and Mellert, V. and Platte, H. J. and Laws, P. and Hudde, H. and Scherer, P. and Poulsen, T. and Gottlob, D. and Plenge, G.}, + Date-Added = {2011-10-28 11:45:58 +0200}, + Date-Modified = {2011-10-28 11:45:58 +0200}, + Journal = {Rundfunktech. Mitteilungen}, + Keywords = {Ma, _read, Binauraltechnik}, + Number = {4}, + Pages = {195-218}, + Title = {Wissenschaftliche Grundlagen der kopfbezogenen Stereofonie. Bericht {\"u}ber das Vorkolloquium zur DAGA '78 in Bochum, 13. M{\"a}rz 1978}, + Volume = {22}, + Year = {1978}} + +@article{Berg2006, + Author = {Berg, Jan and Rumsey, Francis}, + Date-Added = {2011-10-25 14:47:12 +0200}, + Date-Modified = {2011-10-25 14:47:32 +0200}, + Journal = {J. Audio Eng. Soc.}, + Month = {May}, + Number = {5}, + Pages = {365-379}, + Title = {Identification of Quality Attributes of Spatial Audio by Repertory Grid Technique}, + Volume = {54}, + Year = {2006}} + +@book{DIN33402-2E, + Address = {Berlin}, + Author = {DIN}, + Date-Added = {2011-10-24 20:43:58 +0200}, + Date-Modified = {2011-10-24 20:48:32 +0200}, + Month = {Dezember}, + Publisher = {Beuth}, + Read = {0}, + Title = {DIN 33402-2: K{\"o}rperma{\ss}e des Menschen - Teil 2: Werte}, + Year = {2005}} + +@book{ITU_R1116-1, + Address = {Geneva}, + Annote = {Annotations made in pdf document}, + Author = {ITU}, + Date-Added = {2011-10-24 13:38:37 +0200}, + Date-Modified = {2011-10-25 10:02:25 +0200}, + Publisher = {International Telecommunication Union}, + Read = {0}, + Title = {Rec. ITU-R BS.1116-1: Methods for the subjective assement of small impairments in audio systems including multichannel sound systems}, + Year = {1997}} + +@article{Brodsky2011, + Author = {Brodsky, Warren}, + Date-Added = {2011-10-24 13:25:43 +0200}, + Date-Modified = {2011-10-24 13:35:43 +0200}, + Journal = {Psychology of Music\emph{, prepublished in January 2011. DOI: 10.1177/0305735610387778}}, + Title = {Developing a functional method to apply music in branding: Design language-generated music}, + Year = {2011}} + +@book{Bortz2005, + Address = {Heidelberg}, + Author = {Bortz, J{\"u}rgen}, + Date-Added = {2011-10-24 13:18:34 +0200}, + Date-Modified = {2011-10-24 13:23:03 +0200}, + Edition = {{6. vollst{\"a}ndig {\"u}berarbeitete und aktualisierte Auflage}}, + Publisher = {Springer}, + Title = {Statistik f{\"u}r Human- und Sozialwissenschaftler}, + Year = {2005}} + +@article{Moller1996, + Abstract = { +}, + Author = {M{\o}ller, Henrik and S{\o}rensen, Michael Friis and Jensen, Clemens Boje and Hammersh{\o}i, Dorte}, + Date-Added = {2011-10-24 13:07:57 +0200}, + Date-Modified = {2011-10-24 13:22:56 +0200}, + Journal = {J. Audio Eng. Soc.}, + Month = {June}, + Number = {6}, + Pages = {451-469}, + Read = {0}, + Title = {Binaural technique: Do we need individual recordings?}, + Volume = {44}, + Year = {1996}} + +@electronic{Ledergerber2002, + Author = {Stefan Ledergerber}, + Date-Added = {2011-10-14 12:37:10 +0200}, + Date-Modified = {2011-10-17 15:52:22 +0200}, + Howpublished = {Online}, + Title = {Application: How to surround}, + Url = {http://www.vista7.com/e/surround/index.aspx}, + Urldate = {01.01.1991}, + Year = {2002}} + +@incollection{Ahnert2008, + Address = {Berlin, Heidelberg, New York}, + Author = {Wolfgang Ahnert AND Hanns-Peter Tennhardt}, + Booktitle = {Handbuch der Audiotechnik}, + Chapter = {5}, + Date-Modified = {2011-10-24 13:15:55 +0200}, + Editor = {Stefan Weinzierl}, + Pages = {178-233}, + Publisher = {Springer}, + Title = {Raumakustik}, + Year = {2008}} + +@article{Barron1971, + Author = {Michael Barron}, + Date-Modified = {2011-10-25 10:03:38 +0200}, + Journal = {J. Sound Vibrat.}, + Number = {4}, + Owner = {SCF}, + Pages = {475-494}, + Timestamp = {2008.08.22}, + Title = {The subjective effects of first reflections in concert halls - the need for lateral reflections}, + Volume = {15}, + Year = {1971}} + +@inproceedings{Berg2000, + Address = {Paris, France}, + Author = {Jan Berg AND Francis Rumsey}, + Booktitle = {Proceedings of Audio Eng. Soc. 108th Convention}, + Date-Modified = {2011-10-14 15:58:10 +0200}, + Number = {5139 (L-8)}, + Owner = {SCF}, + Timestamp = {2008.08.21}, + Title = {In search of the spatial dimensions of reproduced sound: Verbal Protocol Analysis and Cluster Analysis of scaled verbal descriptors}, + Year = {2000}} + +@book{Blauert2008, + Address = {Berlin, Heidelberg, New York}, + Author = {Jens Blauert AND Ning Xiang}, + Date-Modified = {2011-10-24 13:16:13 +0200}, + Owner = {SCF}, + Publisher = {Springer}, + Timestamp = {2008.08.21}, + Title = {Acoustics for Engineers: Troy Lectures}, + Year = {2008}} + +@mastersthesis{Lindau2006, + Address = {Berlin}, + Author = {Alexander Lindau}, + Date-Modified = {2011-10-14 16:18:25 +0200}, + Owner = {Alex}, + School = {Technische Universit{\"a}t, Fakult{\"a}t 1, Fachgebiet Kommunikationswissenschaft}, + Timestamp = {2011.07.22}, + Title = {Ein Instrument zur softwaregest{\"u}tzten Messung binauraler Raumimpulsantworten in mehreren Freiheitsgraden}, + Year = {2006}} + +@article{Reichhardt1955, + Author = {Wolfgang Reichhardt AND E. Kohlsdorf AND H. Mutscher}, + Date-Modified = {2011-10-14 15:53:44 +0200}, + Journal = {Hochfrequenztechnik und Elektroakustik}, + Month = {July}, + Number = {1}, + Owner = {SCF}, + Pages = {18-25}, + Timestamp = {2008.08.21}, + Title = {Die optimale Nachhallzeit f{\"u}r Studior{\"a}ume}, + Volume = {64}, + Year = {1955}} + +@techreport{Somerville1963, + Author = {T. Somerville AND C. L. S. Gilford}, + Date-Modified = {2011-10-14 16:18:09 +0200}, + Institution = {BBC}, + Number = {52}, + Title = {Tonal Quality in Concert Halls}, + Year = {1963}} diff --git a/help/Expose_Anleitung.pdf b/help/Expose_Anleitung.pdf new file mode 100644 index 0000000..eb41aab Binary files /dev/null and b/help/Expose_Anleitung.pdf differ diff --git a/help/FG AK Zitieren und Verweisen Anwendungsbeispiele.pdf b/help/FG AK Zitieren und Verweisen Anwendungsbeispiele.pdf new file mode 100755 index 0000000..c132891 Binary files /dev/null and b/help/FG AK Zitieren und Verweisen Anwendungsbeispiele.pdf differ diff --git a/help/FG AK Zitieren und Verweisen Systeme.pdf b/help/FG AK Zitieren und Verweisen Systeme.pdf new file mode 100755 index 0000000..8b26955 Binary files /dev/null and b/help/FG AK Zitieren und Verweisen Systeme.pdf differ diff --git a/help/FG_AK_Deutsch_AutorJahr.bst b/help/FG_AK_Deutsch_AutorJahr.bst new file mode 100644 index 0000000..e073e4b --- /dev/null +++ b/help/FG_AK_Deutsch_AutorJahr.bst @@ -0,0 +1,1638 @@ +%% +%% +%% This file has been edited by hand, to find edited part search for editedByHand {fbrinkmann} +%% +%% +%% This is file `FG_AK_template.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% merlin.mbs (with options: `ay,nat,nm-revv1,jnrlst,jnrlab,aunm-semi,nmlm,x5,m1,mcite,mct-1,mct-x2,keyxyr,dt-beg,yr-par,yrp-col,note-yr,tit-qq,atit-u,trtit-b,volp-blk,jwdpg,pp-last,num-xser,add-pub,pre-edn,doi,edparxc,bkedcap,in-col,injnl,pp,ed,abr,xedn,and-xcom,url,url-blk,nfss,') +%% ---------------------------------------- +%% *** FG_AK template, can be modified to change between harvard, chicago and number style *** +%% +%% Copyright 1994-2007 Patrick W Daly + % =============================================================== + % IMPORTANT NOTICE: + % This bibliographic style (bst) file has been generated from one or + % more master bibliographic style (mbs) files, listed above. + % + % This generated file can be redistributed and/or modified under the terms + % of the LaTeX Project Public License Distributed from CTAN + % archives in directory macros/latex/base/lppl.txt; either + % version 1 of the License, or any later version. + % =============================================================== + % Name and version information of the main mbs file: + % \ProvidesFile{merlin.mbs}[2007/04/24 4.20 (PWD, AO, DPC)] + % For use with BibTeX version 0.99a or later + %------------------------------------------------------------------- + % This bibliography style file is intended for texts in ENGLISH + % This is an author-year citation style bibliography. As such, it is + % non-standard LaTeX, and requires a special package file to function properly. + % Such a package is natbib.sty by Patrick W. Daly + % The form of the \bibitem entries is + % \bibitem[Jones et al.(1990)]{key}... + % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... + % The essential feature is that the label (the part in brackets) consists + % of the author names, as they should appear in the citation, with the year + % in parentheses following. There must be no space before the opening + % parenthesis! + % With natbib v5.3, a full list of authors may also follow the year. + % In natbib.sty, it is possible to define the type of enclosures that is + % really wanted (brackets or parentheses), but in either case, there must + % be parentheses in the label. + % The \cite command functions as follows: + % \citet{key} ==>> Jones et al. (1990) + % \citet*{key} ==>> Jones, Baker, and Smith (1990) + % \citep{key} ==>> (Jones et al., 1990) + % \citep*{key} ==>> (Jones, Baker, and Smith, 1990) + % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2) + % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990) + % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32) + % \citeauthor{key} ==>> Jones et al. + % \citeauthor*{key} ==>> Jones, Baker, and Smith + % \citeyear{key} ==>> 1990 + %--------------------------------------------------------------------- + +ENTRY + { address + author + booktitle + chapter + doi + edition + editor + eid + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + url + urldate %editedByHand + volume + year + } + {} + { label extra.label sort.label short.list } +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 {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 {add.blank} +{ " " * before.all 'output.state := +} + +FUNCTION {date.block} +{ + ":" * + add.blank +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} +FUNCTION {non.stop} +{ duplicate$ + "}" * add.period$ + #-1 #1 substring$ "." = +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "\emph{" swap$ * "}" * } + if$ +} +FUNCTION {tie.or.space.prefix} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ +} + +FUNCTION {capitalize} +{ "u" change.case$ "t" change.case$ } + +FUNCTION {space.word} +{ " " swap$ * " " * } + % Here are the language-specific definitions for explicit words. + % Each function has a name bbl.xxx where xxx is the English word. + % The language selected here is ENGLISH + % editedByHand +FUNCTION {bbl.and} +{ "und"} + +FUNCTION {bbl.etal} +{ "et~al." } + +FUNCTION {bbl.editors} +{ "Hrgs." } + +FUNCTION {bbl.editor} +{ "Hrg." } + +FUNCTION {bbl.edby} +{ "Hrg. von" } + +FUNCTION {bbl.edition} +{ "Auflage" } + +FUNCTION {bbl.volume} +{ "vol." } + +FUNCTION {bbl.of} +{ "von" } + +FUNCTION {bbl.number} +{ "Nr." } + +FUNCTION {bbl.nr} +{ "Nr." } + +FUNCTION {bbl.in} +{ "in" } + +FUNCTION {bbl.pages} +{ "S." } + +FUNCTION {bbl.page} +{ "S." } + +FUNCTION {bbl.chapter} +{ "Kap." } + +FUNCTION {bbl.techrep} +{ "Tech. Rep." } + +FUNCTION {bbl.mthesis} +{ "Masterarbeit" } + +FUNCTION {bbl.phdthesis} +{ "Ph.D. thesis" } + +MACRO {jan} {"Jan."} + +MACRO {feb} {"Feb."} + +MACRO {mar} {"Mar."} + +MACRO {apr} {"Apr."} + +MACRO {may} {"Mai"} + +MACRO {jun} {"Jun."} + +MACRO {jul} {"Jul."} + +MACRO {aug} {"Aug."} + +MACRO {sep} {"Sep."} + +MACRO {oct} {"Okt."} + +MACRO {nov} {"Nov."} + +MACRO {dec} {"Dez."} +% end of editedByHand + +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"} +FUNCTION {bibinfo.check} +{ swap$ + duplicate$ missing$ + { + pop$ pop$ + "" + } + { duplicate$ empty$ + { + swap$ pop$ + } + { swap$ + pop$ + } + if$ + } + if$ +} +FUNCTION {bibinfo.warn} +{ swap$ + duplicate$ missing$ + { + swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ + "" + } + { duplicate$ empty$ + { + swap$ "empty " swap$ * " in " * cite$ * warning$ + } + { swap$ + pop$ + } + if$ + } + if$ +} +FUNCTION {format.url} +{ url empty$ + { "" } + { "\urlprefix\url{" url * "}" * } + if$ +} + +% editedByHand +FUNCTION {format.urldate} +{ urldate empty$ + { "" } + { "\urldateprefix\urldate{" urldate * "}" * } + if$ +} +% end of edited part + +INTEGERS { nameptr namesleft numnames } + + +STRINGS { bibinfo} + +FUNCTION {format.names} +{ 'bibinfo := + duplicate$ empty$ 'skip$ { + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + duplicate$ #1 > + { "{ff~}{vv~}{ll}{, jj}" } + { "{vv~}{ll}{, ff}{, jj}" } + if$ + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + nameptr #1 + #1 + = + numnames #5 + > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + namesleft #1 > + { "; " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { + bbl.and + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } if$ +} +FUNCTION {format.names.ed} +{ + 'bibinfo := + duplicate$ empty$ 'skip$ { + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{ff~}{vv~}{ll}{, jj}" + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { "; " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + + " " * bbl.etal * + } + { + bbl.and + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } if$ +} +FUNCTION {format.key} +{ empty$ + { key field.or.null } + { "" } + if$ +} + +FUNCTION {format.authors} +{ author "author" format.names +} +FUNCTION {get.bbl.editor} +{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } + +FUNCTION {format.editors} +{ editor "editor" format.names duplicate$ empty$ 'skip$ + { + " " * + get.bbl.editor + capitalize + "(" swap$ * ")" * + * + } + if$ +} +FUNCTION {format.doi} +{ doi "doi" bibinfo.check + duplicate$ empty$ 'skip$ + { + new.block + "\doi{" swap$ * "}" * + } + if$ +} +FUNCTION {format.note} +{ + note empty$ + { "" } + { note #1 #1 substring$ + duplicate$ "{" = + 'skip$ + { output.state mid.sentence = + { "l" } + { "u" } + if$ + change.case$ + } + if$ + note #2 global.max$ substring$ * "note" bibinfo.check + } + if$ +} + +FUNCTION {format.title} +{ title + "title" bibinfo.check + duplicate$ empty$ 'skip$ + { + "\enquote{" swap$ * + add.period$ "}" * + } + if$ +} +FUNCTION {format.full.names} +{'s := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}{, jj}" format.name$ + 't := + nameptr #1 > + { + nameptr #1 + #1 + = + numnames #5 + > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + namesleft #1 > + { ", " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { + bbl.and + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {author.editor.key.full} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.full.names } + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {author.key.full} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {editor.key.full} +{ editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.full.names } + if$ +} + +FUNCTION {make.full.names} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.full + { type$ "proceedings" = + 'editor.key.full + 'author.key.full + if$ + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem[{" write$ + label write$ + ")" make.full.names duplicate$ short.list = + { pop$ } + { * } + if$ + "}]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +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 {word.in} +{ bbl.in capitalize + ":" * + " " * } + +FUNCTION {format.date} +{ year "year" bibinfo.check duplicate$ empty$ + { + "empty year in " cite$ * "; set to ????" * warning$ + pop$ "????" + } + 'skip$ + if$ + extra.label * + before.all 'output.state := + " (" swap$ * ")" * +} +FUNCTION {format.btitle} +{ title "title" bibinfo.check + duplicate$ empty$ 'skip$ + { + emphasize + } + if$ +} +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { bbl.volume volume tie.or.space.prefix + "volume" bibinfo.check * * + series "series" bibinfo.check + duplicate$ empty$ 'pop$ + { swap$ bbl.of space.word * swap$ + emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { series empty$ + { number "number" bibinfo.check } + { output.state mid.sentence = + { bbl.number } + { bbl.number capitalize } + if$ + number tie.or.space.prefix "number" bibinfo.check * * + bbl.in space.word * + series "series" bibinfo.check * + } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition duplicate$ empty$ 'skip$ + { + output.state mid.sentence = + { "l" } + { "t" } + if$ change.case$ + "edition" bibinfo.check +% " " * bbl.edition * % editedByHand + } + 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 duplicate$ empty$ 'skip$ + { duplicate$ multi.page.check + { + bbl.pages swap$ + n.dashify + } + { + bbl.page swap$ + } + if$ + tie.or.space.prefix + "pages" bibinfo.check + * * + } + if$ +} +FUNCTION {format.journal.pages} +{ pages duplicate$ empty$ 'pop$ + { swap$ duplicate$ empty$ + { pop$ pop$ format.pages } + { + " " * + swap$ + n.dashify + pages multi.page.check + 'bbl.pages + 'bbl.page + if$ + swap$ tie.or.space.prefix + "pages" bibinfo.check + * * + * + } + if$ + } + if$ +} +FUNCTION {format.journal.eid} +{ eid "eid" bibinfo.check + duplicate$ empty$ 'pop$ + { swap$ duplicate$ empty$ 'skip$ + { + " " * + } + if$ + swap$ * + } + if$ +} +FUNCTION {format.vol.num.pages} +{ volume field.or.null + duplicate$ empty$ 'skip$ + { + "volume" bibinfo.check + } + if$ + number "number" bibinfo.check duplicate$ empty$ 'skip$ + { + swap$ duplicate$ empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + swap$ + "(" swap$ * ")" * + } + if$ * +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + { "" } + { type empty$ + { bbl.chapter } + { type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + } + if$ +} + +FUNCTION {format.booktitle} +{ + booktitle "booktitle" bibinfo.check + emphasize +} +FUNCTION {format.in.ed.booktitle} +{ format.booktitle duplicate$ empty$ 'skip$ + { + editor "editor" format.names.ed duplicate$ empty$ 'pop$ + { + " " * + get.bbl.editor + capitalize + "(" swap$ * ") " * + * swap$ + * } + if$ + word.in swap$ * + } + if$ +} +FUNCTION {format.thesis.type} +{ type duplicate$ empty$ + 'pop$ + { swap$ pop$ + "t" change.case$ "type" bibinfo.check + } + if$ +} +FUNCTION {format.tr.number} +{ number "number" bibinfo.check + type duplicate$ empty$ + { pop$ bbl.techrep } + 'skip$ + if$ + "type" bibinfo.check + swap$ duplicate$ empty$ + { pop$ "t" change.case$ } + { tie.or.space.prefix * * } + if$ +} +FUNCTION {format.article.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} +FUNCTION {format.book.crossref} +{ volume duplicate$ empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + pop$ word.in + } + { bbl.volume + capitalize + swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word * + } + if$ + " \cite{" * crossref * "}" * +} +FUNCTION {format.incoll.inproc.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} +FUNCTION {format.org.or.pub} +{ 't := + "" + address empty$ t empty$ and + 'skip$ + { + address "address" bibinfo.check * + t empty$ + 'skip$ + { address empty$ + 'skip$ + { ": " * } + if$ + t * + } + if$ + } + if$ +} +FUNCTION {format.publisher.address} +{ publisher "publisher" bibinfo.warn format.org.or.pub +} + +FUNCTION {format.organization.address} +{ organization "organization" bibinfo.check format.org.or.pub +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.block + crossref missing$ + { + journal + "journal" bibinfo.check + emphasize + word.in swap$ * + "journal" output.check + format.vol.num.pages output + } + { format.article.crossref output.nonnull + } + if$ + eid empty$ + { format.journal.pages } + { format.journal.eid } + if$ + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + add.blank + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.date "year" output.check + date.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + new.block + format.number.series output + format.edition output + new.sentence + format.publisher.address output + } + { + new.block + format.book.crossref output.nonnull + } + if$ + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {booklet} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.block + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.date "year" output.check + date.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 + format.edition output + new.sentence + format.publisher.address output + } + { + format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + } + if$ + format.pages "pages" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.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.edition output + format.chapter.pages output + new.sentence + format.publisher.address output + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + format.pages "pages" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + new.sentence + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + } + if$ + format.pages "pages" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {conference} { inproceedings } +FUNCTION {manual} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check + organization address new.block.checkb + organization "organization" bibinfo.check output + address "address" bibinfo.check output + format.edition output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.btitle + "title" output.check + new.block + bbl.mthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title output + new.block + howpublished "howpublished" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +% editedByHand +FUNCTION {electronic} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check % title is italic and without quotes + new.block + howpublished "howpublished" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.urldate output + new.block + format.note output + fin.entry +} +% end of editedByHand +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.btitle + "title" output.check + new.block + bbl.phdthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + format.editors output + editor format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check + format.bvolume output + format.number.series output + new.sentence + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.btitle + "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + format.doi output + new.block + format.url output + new.block + format.note "note" output.check + fin.entry +} + +FUNCTION {default.type} { misc } +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 {format.lab.names} +{'s := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}{, jj}" format.name$ + 't := + nameptr #1 > + { + nameptr #2 = + numnames #2 > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + namesleft #1 > + { ", " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { + bbl.and + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.label} +{ editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.short.authors} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.label + 'author.key.label + if$ + } + if$ + 'short.list := +} + +FUNCTION {calc.label} +{ calc.short.authors + short.list + "(" + * + year duplicate$ empty$ + short.list key field.or.null = or + { pop$ "" } + 'skip$ + if$ + * + 'label := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" + format.name$ 't := + nameptr #1 > + { + nameptr #1 + #1 + = + numnames #5 + > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + " " * + namesleft #1 = t "others" = and + { "zzzzz" * } + { t sortify * } + if$ + } + { 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 {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 {editor.sort} +{ editor empty$ + { key empty$ + { "to sort, need editor or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ +} +FUNCTION {presort} +{ calc.label + label sortify + " " + * + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.sort + 'author.sort + if$ + } + if$ + #1 entry.max$ substring$ + 'sort.label := + sort.label + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} +SORT +STRINGS { last.label next.extra } +INTEGERS { last.extra.num number.label } +FUNCTION {initialize.extra.label.stuff} +{ #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'last.extra.num := + #0 'number.label := +} +FUNCTION {forward.pass} +{ last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ + number.label #1 + 'number.label := +} +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + extra.label 'next.extra := + extra.label + duplicate$ empty$ + 'skip$ + { "{\natexlab{" swap$ * "}}" * } + if$ + 'extra.label := + label extra.label * 'label := +} +EXECUTE {initialize.extra.label.stuff} +ITERATE {forward.pass} +REVERSE {reverse.pass} +FUNCTION {bib.sort.order} +{ sort.label + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} +ITERATE {bib.sort.order} +SORT +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" number.label int.to.str$ * "}" * + write$ newline$ + "\newcommand{\enquote}[1]{\glqq#1''}" % editedByHand + write$ newline$ + "\providecommand{\natexlab}[1]{#1}" + write$ newline$ + "\providecommand{\url}[1]{\texttt{#1}}" + write$ newline$ + "\providecommand{\urlprefix}{URL }" + write$ newline$ + %editedByHand + "\providecommand{\urldate}[1]{#1}" + write$ newline$ + "\providecommand{\urldateprefix}{Zugriff }" + write$ newline$ + %end of editedByHand + "\expandafter\ifx\csname urlstyle\endcsname\relax" + write$ newline$ + " \providecommand{\doi}[1]{doi:\discretionary{}{}{}#1}\else" + write$ newline$ + " \providecommand{\doi}{doi:\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi" + write$ newline$ +} +EXECUTE {begin.bib} +EXECUTE {init.state.consts} +ITERATE {call.type$} +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} +EXECUTE {end.bib} +%% End of customized bst file +%% +%% End of file `FG_AK_template.bst'. diff --git a/help/FG_AK_Deutsch_AutorJahr.pdf b/help/FG_AK_Deutsch_AutorJahr.pdf new file mode 100644 index 0000000..7dc29ad Binary files /dev/null and b/help/FG_AK_Deutsch_AutorJahr.pdf differ diff --git a/help/FG_AK_Deutsch_Nummer.bst b/help/FG_AK_Deutsch_Nummer.bst new file mode 100644 index 0000000..bcc6af0 --- /dev/null +++ b/help/FG_AK_Deutsch_Nummer.bst @@ -0,0 +1,1637 @@ +%% +%% +%% This file has been edited by hand, to find edited part search for editedByHand {fbrinkmann} +%% +%% +%% This is file `FG_AK_template.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% merlin.mbs (with options: `ay,nat,seq-no,nm-revv1,jnrlst,jnrlab,aunm-semi,nmlm,x5,m1,mcite,mct-1,mct-x2,keyxyr,dt-beg,yr-par,yrp-col,note-yr,tit-qq,atit-u,trtit-b,volp-blk,jwdpg,pp-last,num-xser,add-pub,pre-edn,doi,edparxc,bkedcap,in-col,injnl,pp,ed,abr,xedn,and-xcom,url,url-blk,nfss,') +%% ---------------------------------------- +%% *** FG_AK template, can be modified to change between harvard, chicago and number style *** +%% +%% Copyright 1994-2007 Patrick W Daly + % =============================================================== + % IMPORTANT NOTICE: + % This bibliographic style (bst) file has been generated from one or + % more master bibliographic style (mbs) files, listed above. + % + % This generated file can be redistributed and/or modified under the terms + % of the LaTeX Project Public License Distributed from CTAN + % archives in directory macros/latex/base/lppl.txt; either + % version 1 of the License, or any later version. + % =============================================================== + % Name and version information of the main mbs file: + % \ProvidesFile{merlin.mbs}[2007/04/24 4.20 (PWD, AO, DPC)] + % For use with BibTeX version 0.99a or later + %------------------------------------------------------------------- + % This bibliography style file is intended for texts in ENGLISH + % This is an author-year citation style bibliography. As such, it is + % non-standard LaTeX, and requires a special package file to function properly. + % Such a package is natbib.sty by Patrick W. Daly + % The form of the \bibitem entries is + % \bibitem[Jones et al.(1990)]{key}... + % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... + % The essential feature is that the label (the part in brackets) consists + % of the author names, as they should appear in the citation, with the year + % in parentheses following. There must be no space before the opening + % parenthesis! + % With natbib v5.3, a full list of authors may also follow the year. + % In natbib.sty, it is possible to define the type of enclosures that is + % really wanted (brackets or parentheses), but in either case, there must + % be parentheses in the label. + % The \cite command functions as follows: + % \citet{key} ==>> Jones et al. (1990) + % \citet*{key} ==>> Jones, Baker, and Smith (1990) + % \citep{key} ==>> (Jones et al., 1990) + % \citep*{key} ==>> (Jones, Baker, and Smith, 1990) + % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2) + % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990) + % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32) + % \citeauthor{key} ==>> Jones et al. + % \citeauthor*{key} ==>> Jones, Baker, and Smith + % \citeyear{key} ==>> 1990 + %--------------------------------------------------------------------- + +ENTRY + { address + author + booktitle + chapter + doi + edition + editor + eid + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + url + urldate %editedByHand + volume + year + } + {} + { label extra.label sort.label short.list } +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 {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 {add.blank} +{ " " * before.all 'output.state := +} + +FUNCTION {date.block} +{ + ":" * + add.blank +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} +FUNCTION {non.stop} +{ duplicate$ + "}" * add.period$ + #-1 #1 substring$ "." = +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "\emph{" swap$ * "}" * } + if$ +} +FUNCTION {tie.or.space.prefix} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ +} + +FUNCTION {capitalize} +{ "u" change.case$ "t" change.case$ } + +FUNCTION {space.word} +{ " " swap$ * " " * } + % Here are the language-specific definitions for explicit words. + % Each function has a name bbl.xxx where xxx is the English word. + % The language selected here is ENGLISH + % editedByHand +FUNCTION {bbl.and} +{ "und"} + +FUNCTION {bbl.etal} +{ "et~al." } + +FUNCTION {bbl.editors} +{ "Hrgs." } + +FUNCTION {bbl.editor} +{ "Hrg." } + +FUNCTION {bbl.edby} +{ "Hrg. von" } + +FUNCTION {bbl.edition} +{ "Auflage" } + +FUNCTION {bbl.volume} +{ "vol." } + +FUNCTION {bbl.of} +{ "von" } + +FUNCTION {bbl.number} +{ "Nr." } + +FUNCTION {bbl.nr} +{ "Nr." } + +FUNCTION {bbl.in} +{ "in" } + +FUNCTION {bbl.pages} +{ "S." } + +FUNCTION {bbl.page} +{ "S." } + +FUNCTION {bbl.chapter} +{ "Kap." } + +FUNCTION {bbl.techrep} +{ "Tech. Rep." } + +FUNCTION {bbl.mthesis} +{ "Masterarbeit" } + +FUNCTION {bbl.phdthesis} +{ "Ph.D. thesis" } + +MACRO {jan} {"Jan."} + +MACRO {feb} {"Feb."} + +MACRO {mar} {"Mar."} + +MACRO {apr} {"Apr."} + +MACRO {may} {"Mai"} + +MACRO {jun} {"Jun."} + +MACRO {jul} {"Jul."} + +MACRO {aug} {"Aug."} + +MACRO {sep} {"Sep."} + +MACRO {oct} {"Okt."} + +MACRO {nov} {"Nov."} + +MACRO {dec} {"Dez."} +% end of editedByHand + +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"} +FUNCTION {bibinfo.check} +{ swap$ + duplicate$ missing$ + { + pop$ pop$ + "" + } + { duplicate$ empty$ + { + swap$ pop$ + } + { swap$ + pop$ + } + if$ + } + if$ +} +FUNCTION {bibinfo.warn} +{ swap$ + duplicate$ missing$ + { + swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ + "" + } + { duplicate$ empty$ + { + swap$ "empty " swap$ * " in " * cite$ * warning$ + } + { swap$ + pop$ + } + if$ + } + if$ +} +FUNCTION {format.url} +{ url empty$ + { "" } + { "\urlprefix\url{" url * "}" * } + if$ +} + +% editedByHand +FUNCTION {format.urldate} +{ urldate empty$ + { "" } + { "\urldateprefix\urldate{" urldate * "}" * } + if$ +} +% end of edited part + +INTEGERS { nameptr namesleft numnames } + + +STRINGS { bibinfo} + +FUNCTION {format.names} +{ 'bibinfo := + duplicate$ empty$ 'skip$ { + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + duplicate$ #1 > + { "{ff~}{vv~}{ll}{, jj}" } + { "{vv~}{ll}{, ff}{, jj}" } + if$ + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + nameptr #1 + #1 + = + numnames #5 + > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + namesleft #1 > + { "; " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { + bbl.and + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } if$ +} +FUNCTION {format.names.ed} +{ + 'bibinfo := + duplicate$ empty$ 'skip$ { + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{ff~}{vv~}{ll}{, jj}" + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { "; " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + + " " * bbl.etal * + } + { + bbl.and + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } if$ +} +FUNCTION {format.key} +{ empty$ + { key field.or.null } + { "" } + if$ +} + +FUNCTION {format.authors} +{ author "author" format.names +} +FUNCTION {get.bbl.editor} +{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } + +FUNCTION {format.editors} +{ editor "editor" format.names duplicate$ empty$ 'skip$ + { + " " * + get.bbl.editor + capitalize + "(" swap$ * ")" * + * + } + if$ +} +FUNCTION {format.doi} +{ doi "doi" bibinfo.check + duplicate$ empty$ 'skip$ + { + new.block + "\doi{" swap$ * "}" * + } + if$ +} +FUNCTION {format.note} +{ + note empty$ + { "" } + { note #1 #1 substring$ + duplicate$ "{" = + 'skip$ + { output.state mid.sentence = + { "l" } + { "u" } + if$ + change.case$ + } + if$ + note #2 global.max$ substring$ * "note" bibinfo.check + } + if$ +} + +FUNCTION {format.title} +{ title + "title" bibinfo.check + duplicate$ empty$ 'skip$ + { + "\enquote{" swap$ * + add.period$ "}" * + } + if$ +} +FUNCTION {format.full.names} +{'s := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}{, jj}" format.name$ + 't := + nameptr #1 > + { + nameptr #1 + #1 + = + numnames #5 + > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + namesleft #1 > + { ", " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { + bbl.and + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {author.editor.key.full} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.full.names } + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {author.key.full} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {editor.key.full} +{ editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.full.names } + if$ +} + +FUNCTION {make.full.names} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.full + { type$ "proceedings" = + 'editor.key.full + 'author.key.full + if$ + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem[{" write$ + label write$ + ")" make.full.names duplicate$ short.list = + { pop$ } + { * } + if$ + "}]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +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 {word.in} +{ bbl.in capitalize + ":" * + " " * } + +FUNCTION {format.date} +{ year "year" bibinfo.check duplicate$ empty$ + { + "empty year in " cite$ * "; set to ????" * warning$ + pop$ "????" + } + 'skip$ + if$ + extra.label * + before.all 'output.state := + " (" swap$ * ")" * +} +FUNCTION {format.btitle} +{ title "title" bibinfo.check + duplicate$ empty$ 'skip$ + { + emphasize + } + if$ +} +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { bbl.volume volume tie.or.space.prefix + "volume" bibinfo.check * * + series "series" bibinfo.check + duplicate$ empty$ 'pop$ + { swap$ bbl.of space.word * swap$ + emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { series empty$ + { number "number" bibinfo.check } + { output.state mid.sentence = + { bbl.number } + { bbl.number capitalize } + if$ + number tie.or.space.prefix "number" bibinfo.check * * + bbl.in space.word * + series "series" bibinfo.check * + } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition duplicate$ empty$ 'skip$ + { + output.state mid.sentence = + { "l" } + { "t" } + if$ change.case$ + "edition" bibinfo.check +% " " * bbl.edition * % editedByHand + } + 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 duplicate$ empty$ 'skip$ + { duplicate$ multi.page.check + { + bbl.pages swap$ + n.dashify + } + { + bbl.page swap$ + } + if$ + tie.or.space.prefix + "pages" bibinfo.check + * * + } + if$ +} +FUNCTION {format.journal.pages} +{ pages duplicate$ empty$ 'pop$ + { swap$ duplicate$ empty$ + { pop$ pop$ format.pages } + { + " " * + swap$ + n.dashify + pages multi.page.check + 'bbl.pages + 'bbl.page + if$ + swap$ tie.or.space.prefix + "pages" bibinfo.check + * * + * + } + if$ + } + if$ +} +FUNCTION {format.journal.eid} +{ eid "eid" bibinfo.check + duplicate$ empty$ 'pop$ + { swap$ duplicate$ empty$ 'skip$ + { + " " * + } + if$ + swap$ * + } + if$ +} +FUNCTION {format.vol.num.pages} +{ volume field.or.null + duplicate$ empty$ 'skip$ + { + "volume" bibinfo.check + } + if$ + number "number" bibinfo.check duplicate$ empty$ 'skip$ + { + swap$ duplicate$ empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + swap$ + "(" swap$ * ")" * + } + if$ * +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + { "" } + { type empty$ + { bbl.chapter } + { type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + } + if$ +} + +FUNCTION {format.booktitle} +{ + booktitle "booktitle" bibinfo.check + emphasize +} +FUNCTION {format.in.ed.booktitle} +{ format.booktitle duplicate$ empty$ 'skip$ + { + editor "editor" format.names.ed duplicate$ empty$ 'pop$ + { + " " * + get.bbl.editor + capitalize + "(" swap$ * ") " * + * swap$ + * } + if$ + word.in swap$ * + } + if$ +} +FUNCTION {format.thesis.type} +{ type duplicate$ empty$ + 'pop$ + { swap$ pop$ + "t" change.case$ "type" bibinfo.check + } + if$ +} +FUNCTION {format.tr.number} +{ number "number" bibinfo.check + type duplicate$ empty$ + { pop$ bbl.techrep } + 'skip$ + if$ + "type" bibinfo.check + swap$ duplicate$ empty$ + { pop$ "t" change.case$ } + { tie.or.space.prefix * * } + if$ +} +FUNCTION {format.article.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} +FUNCTION {format.book.crossref} +{ volume duplicate$ empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + pop$ word.in + } + { bbl.volume + capitalize + swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word * + } + if$ + " \cite{" * crossref * "}" * +} +FUNCTION {format.incoll.inproc.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} +FUNCTION {format.org.or.pub} +{ 't := + "" + address empty$ t empty$ and + 'skip$ + { + address "address" bibinfo.check * + t empty$ + 'skip$ + { address empty$ + 'skip$ + { ": " * } + if$ + t * + } + if$ + } + if$ +} +FUNCTION {format.publisher.address} +{ publisher "publisher" bibinfo.warn format.org.or.pub +} + +FUNCTION {format.organization.address} +{ organization "organization" bibinfo.check format.org.or.pub +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.block + crossref missing$ + { + journal + "journal" bibinfo.check + emphasize + word.in swap$ * + "journal" output.check + format.vol.num.pages output + } + { format.article.crossref output.nonnull + } + if$ + eid empty$ + { format.journal.pages } + { format.journal.eid } + if$ + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + add.blank + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.date "year" output.check + date.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + new.block + format.number.series output + format.edition output + new.sentence + format.publisher.address output + } + { + new.block + format.book.crossref output.nonnull + } + if$ + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {booklet} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.block + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.date "year" output.check + date.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 + format.edition output + new.sentence + format.publisher.address output + } + { + format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + } + if$ + format.pages "pages" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.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.edition output + format.chapter.pages output + new.sentence + format.publisher.address output + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + format.pages "pages" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + new.sentence + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + } + if$ + format.pages "pages" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {conference} { inproceedings } +FUNCTION {manual} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check + organization address new.block.checkb + organization "organization" bibinfo.check output + address "address" bibinfo.check output + format.edition output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.btitle + "title" output.check + new.block + bbl.mthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title output + new.block + howpublished "howpublished" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +% editedByHand +FUNCTION {electronic} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check % title is italic and without quotes + new.block + howpublished "howpublished" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.urldate output + new.block + format.note output + fin.entry +} +% end of editedByHand +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.btitle + "title" output.check + new.block + bbl.phdthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + format.editors output + editor format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check + format.bvolume output + format.number.series output + new.sentence + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.btitle + "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + format.doi output + new.block + format.url output + new.block + format.note "note" output.check + fin.entry +} + +FUNCTION {default.type} { misc } +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 {format.lab.names} +{'s := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}{, jj}" format.name$ + 't := + nameptr #1 > + { + nameptr #2 = + numnames #2 > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + namesleft #1 > + { ", " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { + bbl.and + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.label} +{ editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.short.authors} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.label + 'author.key.label + if$ + } + if$ + 'short.list := +} + +FUNCTION {calc.label} +{ calc.short.authors + short.list + "(" + * + year duplicate$ empty$ + short.list key field.or.null = or + { pop$ "" } + 'skip$ + if$ + * + 'label := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" + format.name$ 't := + nameptr #1 > + { + nameptr #1 + #1 + = + numnames #5 + > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + " " * + namesleft #1 = t "others" = and + { "zzzzz" * } + { t sortify * } + if$ + } + { 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 {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 {editor.sort} +{ editor empty$ + { key empty$ + { "to sort, need editor or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ +} +INTEGERS { seq.num } +FUNCTION {init.seq} +{ #0 'seq.num :=} +EXECUTE {init.seq} +FUNCTION {int.to.fix} +{ "000000000" swap$ int.to.str$ * + #-1 #10 substring$ +} +FUNCTION {presort} +{ calc.label + label sortify + " " + * + seq.num #1 + 'seq.num := + seq.num int.to.fix + 'sort.label := + sort.label + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} +SORT +STRINGS { last.label next.extra } +INTEGERS { last.extra.num number.label } +FUNCTION {initialize.extra.label.stuff} +{ #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'last.extra.num := + #0 'number.label := +} +FUNCTION {forward.pass} +{ last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ + number.label #1 + 'number.label := +} +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + extra.label 'next.extra := + extra.label + duplicate$ empty$ + 'skip$ + { "{\natexlab{" swap$ * "}}" * } + if$ + 'extra.label := + label extra.label * 'label := +} +EXECUTE {initialize.extra.label.stuff} +ITERATE {forward.pass} +REVERSE {reverse.pass} +FUNCTION {bib.sort.order} +{ sort.label + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} +ITERATE {bib.sort.order} +SORT +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" number.label int.to.str$ * "}" * + write$ newline$ + "\newcommand{\enquote}[1]{\glqq#1''}" % editedByHand + write$ newline$ + "\providecommand{\natexlab}[1]{#1}" + write$ newline$ + "\providecommand{\url}[1]{\texttt{#1}}" + write$ newline$ + "\providecommand{\urlprefix}{URL }" + write$ newline$ + %editedByHand + "\providecommand{\urldate}[1]{#1}" + write$ newline$ + "\providecommand{\urldateprefix}{Zugriff }" + write$ newline$ + %end of editedByHand + "\expandafter\ifx\csname urlstyle\endcsname\relax" + write$ newline$ + " \providecommand{\doi}[1]{doi:\discretionary{}{}{}#1}\else" + write$ newline$ + " \providecommand{\doi}{doi:\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi" + write$ newline$ +} +EXECUTE {begin.bib} +EXECUTE {init.state.consts} +ITERATE {call.type$} +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} +EXECUTE {end.bib} +%% End of customized bst file +%% +%% End of file `FG_AK_template.bst'. diff --git a/help/FG_AK_Deutsch_Nummer.pdf b/help/FG_AK_Deutsch_Nummer.pdf new file mode 100644 index 0000000..b02aacb Binary files /dev/null and b/help/FG_AK_Deutsch_Nummer.pdf differ diff --git a/help/FG_AK_English_AuthorYear.bst b/help/FG_AK_English_AuthorYear.bst new file mode 100644 index 0000000..3a273d8 --- /dev/null +++ b/help/FG_AK_English_AuthorYear.bst @@ -0,0 +1,1658 @@ +%% +%% +%% This file has been edited by hand, to find edited part search for editedByHand {fbrinkmann} +%% +%% +%% This is file `FG_AK_template.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% merlin.mbs (with options: `ay,nat,nm-revv1,jnrlst,jnrlab,aunm-semi,nmlm,x5,m1,mcite,mct-1,mct-x2,keyxyr,dt-beg,yr-par,yrp-col,note-yr,tit-qq,atit-u,trtit-b,vol-bf,volp-com,jwdpg,pp-last,num-xser,add-pub,pre-edn,doi,edparxc,bkedcap,in-col,injnl,pp,ed,abr,xedn,url,url-blk,nfss,') +%% ---------------------------------------- +%% *** FG_AK template, can be modified to change between harvard, chicago and number style *** +%% +%% Copyright 1994-2007 Patrick W Daly + % =============================================================== + % IMPORTANT NOTICE: + % This bibliographic style (bst) file has been generated from one or + % more master bibliographic style (mbs) files, listed above. + % + % This generated file can be redistributed and/or modified under the terms + % of the LaTeX Project Public License Distributed from CTAN + % archives in directory macros/latex/base/lppl.txt; either + % version 1 of the License, or any later version. + % =============================================================== + % Name and version information of the main mbs file: + % \ProvidesFile{merlin.mbs}[2007/04/24 4.20 (PWD, AO, DPC)] + % For use with BibTeX version 0.99a or later + %------------------------------------------------------------------- + % This bibliography style file is intended for texts in ENGLISH + % This is an author-year citation style bibliography. As such, it is + % non-standard LaTeX, and requires a special package file to function properly. + % Such a package is natbib.sty by Patrick W. Daly + % The form of the \bibitem entries is + % \bibitem[Jones et al.(1990)]{key}... + % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... + % The essential feature is that the label (the part in brackets) consists + % of the author names, as they should appear in the citation, with the year + % in parentheses following. There must be no space before the opening + % parenthesis! + % With natbib v5.3, a full list of authors may also follow the year. + % In natbib.sty, it is possible to define the type of enclosures that is + % really wanted (brackets or parentheses), but in either case, there must + % be parentheses in the label. + % The \cite command functions as follows: + % \citet{key} ==>> Jones et al. (1990) + % \citet*{key} ==>> Jones, Baker, and Smith (1990) + % \citep{key} ==>> (Jones et al., 1990) + % \citep*{key} ==>> (Jones, Baker, and Smith, 1990) + % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2) + % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990) + % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32) + % \citeauthor{key} ==>> Jones et al. + % \citeauthor*{key} ==>> Jones, Baker, and Smith + % \citeyear{key} ==>> 1990 + %--------------------------------------------------------------------- + +ENTRY + { address + author + booktitle + chapter + doi + edition + editor + eid + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + url + urldate %editedByHand + volume + year + } + {} + { label extra.label sort.label short.list } +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 {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 {add.blank} +{ " " * before.all 'output.state := +} + +FUNCTION {date.block} +{ + ":" * + add.blank +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} +FUNCTION {non.stop} +{ duplicate$ + "}" * add.period$ + #-1 #1 substring$ "." = +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "\emph{" swap$ * "}" * } + if$ +} +FUNCTION {bolden} +{ duplicate$ empty$ + { pop$ "" } + { "\textbf{" swap$ * "}" * } + if$ +} +FUNCTION {tie.or.space.prefix} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ +} + +FUNCTION {capitalize} +{ "u" change.case$ "t" change.case$ } + +FUNCTION {space.word} +{ " " swap$ * " " * } + % Here are the language-specific definitions for explicit words. + % Each function has a name bbl.xxx where xxx is the English word. + % The language selected here is ENGLISH +FUNCTION {bbl.and} +{ "and"} + +FUNCTION {bbl.etal} +{ "et~al." } + +FUNCTION {bbl.editors} +{ "eds." } + +FUNCTION {bbl.editor} +{ "ed." } + +FUNCTION {bbl.edby} +{ "edited by" } + +FUNCTION {bbl.edition} +{ "edn." } + +FUNCTION {bbl.volume} +{ "vol." } + +FUNCTION {bbl.of} +{ "of" } + +FUNCTION {bbl.number} +{ "no." } + +FUNCTION {bbl.nr} +{ "no." } + +FUNCTION {bbl.in} +{ "in" } + +FUNCTION {bbl.pages} +{ "pp." } + +FUNCTION {bbl.page} +{ "p." } + +FUNCTION {bbl.chapter} +{ "chap." } + +FUNCTION {bbl.techrep} +{ "Tech. Rep." } + +FUNCTION {bbl.mthesis} +{ "Master's thesis" } + +FUNCTION {bbl.phdthesis} +{ "Ph.D. thesis" } + +MACRO {jan} {"Jan."} + +MACRO {feb} {"Feb."} + +MACRO {mar} {"Mar."} + +MACRO {apr} {"Apr."} + +MACRO {may} {"May"} + +MACRO {jun} {"Jun."} + +MACRO {jul} {"Jul."} + +MACRO {aug} {"Aug."} + +MACRO {sep} {"Sep."} + +MACRO {oct} {"Oct."} + +MACRO {nov} {"Nov."} + +MACRO {dec} {"Dec."} + +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"} +FUNCTION {bibinfo.check} +{ swap$ + duplicate$ missing$ + { + pop$ pop$ + "" + } + { duplicate$ empty$ + { + swap$ pop$ + } + { swap$ + pop$ + } + if$ + } + if$ +} +FUNCTION {bibinfo.warn} +{ swap$ + duplicate$ missing$ + { + swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ + "" + } + { duplicate$ empty$ + { + swap$ "empty " swap$ * " in " * cite$ * warning$ + } + { swap$ + pop$ + } + if$ + } + if$ +} +FUNCTION {format.url} +{ url empty$ + { "" } + { "\urlprefix\url{" url * "}" * } + if$ +} +% editedByHand +FUNCTION {format.urldate} +{ urldate empty$ + { "" } + { "\urldateprefix\urldate{" urldate * "}" * } + if$ +} +% end of edited part + +INTEGERS { nameptr namesleft numnames } + + +STRINGS { bibinfo} + +FUNCTION {format.names} +{ 'bibinfo := + duplicate$ empty$ 'skip$ { + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + duplicate$ #1 > + { "{ff~}{vv~}{ll}{, jj}" } + { "{vv~}{ll}{, ff}{, jj}" } + if$ + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + nameptr #1 + #1 + = + numnames #5 + > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + namesleft #1 > + { "; " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + numnames #2 > + { ";" * } + 'skip$ + if$ + t "others" = + { + " " * bbl.etal * + } + { + bbl.and + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } if$ +} +FUNCTION {format.names.ed} +{ + 'bibinfo := + duplicate$ empty$ 'skip$ { + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{ff~}{vv~}{ll}{, jj}" + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { "; " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + numnames #2 > + { ";" * } + 'skip$ + if$ + t "others" = + { + + " " * bbl.etal * + } + { + bbl.and + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } if$ +} +FUNCTION {format.key} +{ empty$ + { key field.or.null } + { "" } + if$ +} + +FUNCTION {format.authors} +{ author "author" format.names +} +FUNCTION {get.bbl.editor} +{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } + +FUNCTION {format.editors} +{ editor "editor" format.names duplicate$ empty$ 'skip$ + { + " " * + get.bbl.editor + capitalize + "(" swap$ * ")" * + * + } + if$ +} +FUNCTION {format.doi} +{ doi "doi" bibinfo.check + duplicate$ empty$ 'skip$ + { + new.block + "\doi{" swap$ * "}" * + } + if$ +} +FUNCTION {format.note} +{ + note empty$ + { "" } + { note #1 #1 substring$ + duplicate$ "{" = + 'skip$ + { output.state mid.sentence = + { "l" } + { "u" } + if$ + change.case$ + } + if$ + note #2 global.max$ substring$ * "note" bibinfo.check + } + if$ +} + +FUNCTION {format.title} +{ title + "title" bibinfo.check + duplicate$ empty$ 'skip$ + { + "\enquote{" swap$ * + add.period$ "}" * + } + if$ +} +FUNCTION {format.full.names} +{'s := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}{, jj}" format.name$ + 't := + nameptr #1 > + { + nameptr #1 + #1 + = + numnames #5 + > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + namesleft #1 > + { ", " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { + numnames #2 > + { "," * } + 'skip$ + if$ + bbl.and + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {author.editor.key.full} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.full.names } + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {author.key.full} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {editor.key.full} +{ editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.full.names } + if$ +} + +FUNCTION {make.full.names} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.full + { type$ "proceedings" = + 'editor.key.full + 'author.key.full + if$ + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem[{" write$ + label write$ + ")" make.full.names duplicate$ short.list = + { pop$ } + { * } + if$ + "}]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +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 {word.in} +{ bbl.in capitalize + ":" * + " " * } + +FUNCTION {format.date} +{ year "year" bibinfo.check duplicate$ empty$ + { + "empty year in " cite$ * "; set to ????" * warning$ + pop$ "????" + } + 'skip$ + if$ + extra.label * + before.all 'output.state := + " (" swap$ * ")" * +} +FUNCTION {format.btitle} +{ title "title" bibinfo.check + duplicate$ empty$ 'skip$ + { + emphasize + } + if$ +} +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { bbl.volume volume tie.or.space.prefix + "volume" bibinfo.check * * + series "series" bibinfo.check + duplicate$ empty$ 'pop$ + { swap$ bbl.of space.word * swap$ + emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { series empty$ + { number "number" bibinfo.check } + { output.state mid.sentence = + { bbl.number } + { bbl.number capitalize } + if$ + number tie.or.space.prefix "number" bibinfo.check * * + bbl.in space.word * + series "series" bibinfo.check * + } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition duplicate$ empty$ 'skip$ + { + output.state mid.sentence = + { "l" } + { "t" } + if$ change.case$ + "edition" bibinfo.check +% " " * bbl.edition * % editedByHand + } + 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 duplicate$ empty$ 'skip$ + { duplicate$ multi.page.check + { + bbl.pages swap$ + n.dashify + } + { + bbl.page swap$ + } + if$ + tie.or.space.prefix + "pages" bibinfo.check + * * + } + if$ +} +FUNCTION {format.journal.pages} +{ pages duplicate$ empty$ 'pop$ + { swap$ duplicate$ empty$ + { pop$ pop$ format.pages } + { + ", " * + swap$ + n.dashify + pages multi.page.check + 'bbl.pages + 'bbl.page + if$ + swap$ tie.or.space.prefix + "pages" bibinfo.check + * * + * + } + if$ + } + if$ +} +FUNCTION {format.journal.eid} +{ eid "eid" bibinfo.check + duplicate$ empty$ 'pop$ + { swap$ duplicate$ empty$ 'skip$ + { + ", " * + } + if$ + swap$ * + } + if$ +} +FUNCTION {format.vol.num.pages} +{ volume field.or.null + duplicate$ empty$ 'skip$ + { + "volume" bibinfo.check + } + if$ + bolden + number "number" bibinfo.check duplicate$ empty$ 'skip$ + { + swap$ duplicate$ empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + swap$ + "(" swap$ * ")" * + } + if$ * +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + { "" } + { type empty$ + { bbl.chapter } + { type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + } + if$ +} + +FUNCTION {format.booktitle} +{ + booktitle "booktitle" bibinfo.check + emphasize +} +FUNCTION {format.in.ed.booktitle} +{ format.booktitle duplicate$ empty$ 'skip$ + { + editor "editor" format.names.ed duplicate$ empty$ 'pop$ + { + " " * + get.bbl.editor + capitalize + "(" swap$ * ") " * + * swap$ + * } + if$ + word.in swap$ * + } + if$ +} +FUNCTION {format.thesis.type} +{ type duplicate$ empty$ + 'pop$ + { swap$ pop$ + "t" change.case$ "type" bibinfo.check + } + if$ +} +FUNCTION {format.tr.number} +{ number "number" bibinfo.check + type duplicate$ empty$ + { pop$ bbl.techrep } + 'skip$ + if$ + "type" bibinfo.check + swap$ duplicate$ empty$ + { pop$ "t" change.case$ } + { tie.or.space.prefix * * } + if$ +} +FUNCTION {format.article.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} +FUNCTION {format.book.crossref} +{ volume duplicate$ empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + pop$ word.in + } + { bbl.volume + capitalize + swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word * + } + if$ + " \cite{" * crossref * "}" * +} +FUNCTION {format.incoll.inproc.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} +FUNCTION {format.org.or.pub} +{ 't := + "" + address empty$ t empty$ and + 'skip$ + { + address "address" bibinfo.check * + t empty$ + 'skip$ + { address empty$ + 'skip$ + { ": " * } + if$ + t * + } + if$ + } + if$ +} +FUNCTION {format.publisher.address} +{ publisher "publisher" bibinfo.warn format.org.or.pub +} + +FUNCTION {format.organization.address} +{ organization "organization" bibinfo.check format.org.or.pub +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.block + crossref missing$ + { + journal + "journal" bibinfo.check + emphasize + word.in swap$ * + "journal" output.check + format.vol.num.pages output + } + { format.article.crossref output.nonnull + } + if$ + eid empty$ + { format.journal.pages } + { format.journal.eid } + if$ + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + add.blank + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.date "year" output.check + date.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + new.block + format.number.series output + format.edition output + new.sentence + format.publisher.address output + } + { + new.block + format.book.crossref output.nonnull + } + if$ + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {booklet} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.block + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.date "year" output.check + date.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 + format.edition output + new.sentence + format.publisher.address output + } + { + format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + } + if$ + format.pages "pages" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.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.edition output + format.chapter.pages output + new.sentence + format.publisher.address output + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + format.pages "pages" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + new.sentence + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + } + if$ + format.pages "pages" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {conference} { inproceedings } +FUNCTION {manual} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check + organization address new.block.checkb + organization "organization" bibinfo.check output + address "address" bibinfo.check output + format.edition output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.btitle + "title" output.check + new.block + bbl.mthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title output + new.block + howpublished "howpublished" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +% editedByHand +FUNCTION {electronic} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check % title is italic and without quotes + new.block + howpublished "howpublished" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.urldate output + new.block + format.note output + fin.entry +} +% end of editedByHand +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.btitle + "title" output.check + new.block + bbl.phdthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + format.editors output + editor format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check + format.bvolume output + format.number.series output + new.sentence + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.btitle + "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + format.doi output + new.block + format.url output + new.block + format.note "note" output.check + fin.entry +} + +FUNCTION {default.type} { misc } +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 {format.lab.names} +{'s := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}{, jj}" format.name$ + 't := + nameptr #1 > + { + nameptr #2 = + numnames #2 > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + namesleft #1 > + { ", " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { + numnames #2 > + { "," * } + 'skip$ + if$ + bbl.and + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.label} +{ editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.short.authors} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.label + 'author.key.label + if$ + } + if$ + 'short.list := +} + +FUNCTION {calc.label} +{ calc.short.authors + short.list + "(" + * + year duplicate$ empty$ + short.list key field.or.null = or + { pop$ "" } + 'skip$ + if$ + * + 'label := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" + format.name$ 't := + nameptr #1 > + { + nameptr #1 + #1 + = + numnames #5 + > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + " " * + namesleft #1 = t "others" = and + { "zzzzz" * } + { t sortify * } + if$ + } + { 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 {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 {editor.sort} +{ editor empty$ + { key empty$ + { "to sort, need editor or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ +} +FUNCTION {presort} +{ calc.label + label sortify + " " + * + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.sort + 'author.sort + if$ + } + if$ + #1 entry.max$ substring$ + 'sort.label := + sort.label + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} +SORT +STRINGS { last.label next.extra } +INTEGERS { last.extra.num number.label } +FUNCTION {initialize.extra.label.stuff} +{ #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'last.extra.num := + #0 'number.label := +} +FUNCTION {forward.pass} +{ last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ + number.label #1 + 'number.label := +} +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + extra.label 'next.extra := + extra.label + duplicate$ empty$ + 'skip$ + { "{\natexlab{" swap$ * "}}" * } + if$ + 'extra.label := + label extra.label * 'label := +} +EXECUTE {initialize.extra.label.stuff} +ITERATE {forward.pass} +REVERSE {reverse.pass} +FUNCTION {bib.sort.order} +{ sort.label + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} +ITERATE {bib.sort.order} +SORT +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" number.label int.to.str$ * "}" * + write$ newline$ + "\newcommand{\enquote}[1]{``#1''}" + write$ newline$ + "\providecommand{\natexlab}[1]{#1}" + write$ newline$ + "\providecommand{\url}[1]{\texttt{#1}}" + write$ newline$ + "\providecommand{\urlprefix}{URL }" + write$ newline$ + %editedByHand + "\providecommand{\urldate}[1]{#1}" + write$ newline$ + "\providecommand{\urldateprefix}{Access }" + write$ newline$ + %end of editedByHand + "\expandafter\ifx\csname urlstyle\endcsname\relax" + write$ newline$ + " \providecommand{\doi}[1]{doi:\discretionary{}{}{}#1}\else" + write$ newline$ + " \providecommand{\doi}{doi:\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi" + write$ newline$ +} +EXECUTE {begin.bib} +EXECUTE {init.state.consts} +ITERATE {call.type$} +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} +EXECUTE {end.bib} +%% End of customized bst file +%% +%% End of file `FG_AK_template.bst'. diff --git a/help/FG_AK_English_AuthorYear.pdf b/help/FG_AK_English_AuthorYear.pdf new file mode 100644 index 0000000..72cda51 Binary files /dev/null and b/help/FG_AK_English_AuthorYear.pdf differ diff --git a/help/FG_AK_English_Number.bst b/help/FG_AK_English_Number.bst new file mode 100644 index 0000000..b813c01 --- /dev/null +++ b/help/FG_AK_English_Number.bst @@ -0,0 +1,1657 @@ +%% +%% +%% This file has been edited by hand, to find edited part search for editedByHand {fbrinkmann} +%% +%% +%% This is file `FG_AK_template.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% merlin.mbs (with options: `ay,nat,seq-no,nm-revv1,jnrlst,jnrlab,aunm-semi,nmlm,x5,m1,mcite,mct-1,mct-x2,keyxyr,dt-beg,yr-par,yrp-col,note-yr,tit-qq,atit-u,trtit-b,vol-bf,volp-com,jwdpg,pp-last,num-xser,add-pub,pre-edn,doi,edparxc,bkedcap,in-col,injnl,pp,ed,abr,xedn,url,url-blk,nfss,') +%% ---------------------------------------- +%% *** FG_AK template, can be modified to change between harvard, chicago and number style *** +%% +%% Copyright 1994-2007 Patrick W Daly + % =============================================================== + % IMPORTANT NOTICE: + % This bibliographic style (bst) file has been generated from one or + % more master bibliographic style (mbs) files, listed above. + % + % This generated file can be redistributed and/or modified under the terms + % of the LaTeX Project Public License Distributed from CTAN + % archives in directory macros/latex/base/lppl.txt; either + % version 1 of the License, or any later version. + % =============================================================== + % Name and version information of the main mbs file: + % \ProvidesFile{merlin.mbs}[2007/04/24 4.20 (PWD, AO, DPC)] + % For use with BibTeX version 0.99a or later + %------------------------------------------------------------------- + % This bibliography style file is intended for texts in ENGLISH + % This is an author-year citation style bibliography. As such, it is + % non-standard LaTeX, and requires a special package file to function properly. + % Such a package is natbib.sty by Patrick W. Daly + % The form of the \bibitem entries is + % \bibitem[Jones et al.(1990)]{key}... + % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... + % The essential feature is that the label (the part in brackets) consists + % of the author names, as they should appear in the citation, with the year + % in parentheses following. There must be no space before the opening + % parenthesis! + % With natbib v5.3, a full list of authors may also follow the year. + % In natbib.sty, it is possible to define the type of enclosures that is + % really wanted (brackets or parentheses), but in either case, there must + % be parentheses in the label. + % The \cite command functions as follows: + % \citet{key} ==>> Jones et al. (1990) + % \citet*{key} ==>> Jones, Baker, and Smith (1990) + % \citep{key} ==>> (Jones et al., 1990) + % \citep*{key} ==>> (Jones, Baker, and Smith, 1990) + % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2) + % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990) + % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32) + % \citeauthor{key} ==>> Jones et al. + % \citeauthor*{key} ==>> Jones, Baker, and Smith + % \citeyear{key} ==>> 1990 + %--------------------------------------------------------------------- + +ENTRY + { address + author + booktitle + chapter + doi + edition + editor + eid + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + url + urldate %editedByHand + volume + year + } + {} + { label extra.label sort.label short.list } +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 {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 {add.blank} +{ " " * before.all 'output.state := +} + +FUNCTION {date.block} +{ + ":" * + add.blank +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} +FUNCTION {non.stop} +{ duplicate$ + "}" * add.period$ + #-1 #1 substring$ "." = +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "\emph{" swap$ * "}" * } + if$ +} +FUNCTION {bolden} +{ duplicate$ empty$ + { pop$ "" } + { "\textbf{" swap$ * "}" * } + if$ +} +FUNCTION {tie.or.space.prefix} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ +} + +FUNCTION {capitalize} +{ "u" change.case$ "t" change.case$ } + +FUNCTION {space.word} +{ " " swap$ * " " * } + % Here are the language-specific definitions for explicit words. + % Each function has a name bbl.xxx where xxx is the English word. + % The language selected here is ENGLISH +FUNCTION {bbl.and} +{ "and"} + +FUNCTION {bbl.etal} +{ "et~al." } + +FUNCTION {bbl.editors} +{ "eds." } + +FUNCTION {bbl.editor} +{ "ed." } + +FUNCTION {bbl.edby} +{ "edited by" } + +FUNCTION {bbl.edition} +{ "edn." } + +FUNCTION {bbl.volume} +{ "vol." } + +FUNCTION {bbl.of} +{ "of" } + +FUNCTION {bbl.number} +{ "no." } + +FUNCTION {bbl.nr} +{ "no." } + +FUNCTION {bbl.in} +{ "in" } + +FUNCTION {bbl.pages} +{ "pp." } + +FUNCTION {bbl.page} +{ "p." } + +FUNCTION {bbl.chapter} +{ "chap." } + +FUNCTION {bbl.techrep} +{ "Tech. Rep." } + +FUNCTION {bbl.mthesis} +{ "Master's thesis" } + +FUNCTION {bbl.phdthesis} +{ "Ph.D. thesis" } + +MACRO {jan} {"Jan."} + +MACRO {feb} {"Feb."} + +MACRO {mar} {"Mar."} + +MACRO {apr} {"Apr."} + +MACRO {may} {"May"} + +MACRO {jun} {"Jun."} + +MACRO {jul} {"Jul."} + +MACRO {aug} {"Aug."} + +MACRO {sep} {"Sep."} + +MACRO {oct} {"Oct."} + +MACRO {nov} {"Nov."} + +MACRO {dec} {"Dec."} + +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"} +FUNCTION {bibinfo.check} +{ swap$ + duplicate$ missing$ + { + pop$ pop$ + "" + } + { duplicate$ empty$ + { + swap$ pop$ + } + { swap$ + pop$ + } + if$ + } + if$ +} +FUNCTION {bibinfo.warn} +{ swap$ + duplicate$ missing$ + { + swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ + "" + } + { duplicate$ empty$ + { + swap$ "empty " swap$ * " in " * cite$ * warning$ + } + { swap$ + pop$ + } + if$ + } + if$ +} +FUNCTION {format.url} +{ url empty$ + { "" } + { "\urlprefix\url{" url * "}" * } + if$ +} +% editedByHand +FUNCTION {format.urldate} +{ urldate empty$ + { "" } + { "\urldateprefix\urldate{" urldate * "}" * } + if$ +} +% end of edited part + +INTEGERS { nameptr namesleft numnames } + + +STRINGS { bibinfo} + +FUNCTION {format.names} +{ 'bibinfo := + duplicate$ empty$ 'skip$ { + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + duplicate$ #1 > + { "{ff~}{vv~}{ll}{, jj}" } + { "{vv~}{ll}{, ff}{, jj}" } + if$ + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + nameptr #1 + #1 + = + numnames #5 + > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + namesleft #1 > + { "; " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + numnames #2 > + { ";" * } + 'skip$ + if$ + t "others" = + { + " " * bbl.etal * + } + { + bbl.and + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } if$ +} +FUNCTION {format.names.ed} +{ + 'bibinfo := + duplicate$ empty$ 'skip$ { + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{ff~}{vv~}{ll}{, jj}" + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { "; " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + numnames #2 > + { ";" * } + 'skip$ + if$ + t "others" = + { + + " " * bbl.etal * + } + { + bbl.and + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } if$ +} +FUNCTION {format.key} +{ empty$ + { key field.or.null } + { "" } + if$ +} + +FUNCTION {format.authors} +{ author "author" format.names +} +FUNCTION {get.bbl.editor} +{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } + +FUNCTION {format.editors} +{ editor "editor" format.names duplicate$ empty$ 'skip$ + { + " " * + get.bbl.editor + capitalize + "(" swap$ * ")" * + * + } + if$ +} +FUNCTION {format.doi} +{ doi "doi" bibinfo.check + duplicate$ empty$ 'skip$ + { + new.block + "\doi{" swap$ * "}" * + } + if$ +} +FUNCTION {format.note} +{ + note empty$ + { "" } + { note #1 #1 substring$ + duplicate$ "{" = + 'skip$ + { output.state mid.sentence = + { "l" } + { "u" } + if$ + change.case$ + } + if$ + note #2 global.max$ substring$ * "note" bibinfo.check + } + if$ +} + +FUNCTION {format.title} +{ title + "title" bibinfo.check + duplicate$ empty$ 'skip$ + { + "\enquote{" swap$ * + add.period$ "}" * + } + if$ +} +FUNCTION {format.full.names} +{'s := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}{, jj}" format.name$ + 't := + nameptr #1 > + { + nameptr #1 + #1 + = + numnames #5 + > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + namesleft #1 > + { ", " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { + numnames #2 > + { "," * } + 'skip$ + if$ + bbl.and + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {author.editor.key.full} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.full.names } + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {author.key.full} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {editor.key.full} +{ editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.full.names } + if$ +} + +FUNCTION {make.full.names} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.full + { type$ "proceedings" = + 'editor.key.full + 'author.key.full + if$ + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem[{" write$ + label write$ + ")" make.full.names duplicate$ short.list = + { pop$ } + { * } + if$ + "}]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +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 {word.in} +{ bbl.in capitalize + ":" * + " " * } + +FUNCTION {format.date} +{ year "year" bibinfo.check duplicate$ empty$ + { + "empty year in " cite$ * "; set to ????" * warning$ + pop$ "????" + } + 'skip$ + if$ + extra.label * + before.all 'output.state := + " (" swap$ * ")" * +} +FUNCTION {format.btitle} +{ title "title" bibinfo.check + duplicate$ empty$ 'skip$ + { + emphasize + } + if$ +} +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { bbl.volume volume tie.or.space.prefix + "volume" bibinfo.check * * + series "series" bibinfo.check + duplicate$ empty$ 'pop$ + { swap$ bbl.of space.word * swap$ + emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { series empty$ + { number "number" bibinfo.check } + { output.state mid.sentence = + { bbl.number } + { bbl.number capitalize } + if$ + number tie.or.space.prefix "number" bibinfo.check * * + bbl.in space.word * + series "series" bibinfo.check * + } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition duplicate$ empty$ 'skip$ + { + output.state mid.sentence = + { "l" } + { "t" } + if$ change.case$ + "edition" bibinfo.check +% " " * bbl.edition * % editedByHand + } + 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 duplicate$ empty$ 'skip$ + { duplicate$ multi.page.check + { + bbl.pages swap$ + n.dashify + } + { + bbl.page swap$ + } + if$ + tie.or.space.prefix + "pages" bibinfo.check + * * + } + if$ +} +FUNCTION {format.journal.pages} +{ pages duplicate$ empty$ 'pop$ + { swap$ duplicate$ empty$ + { pop$ pop$ format.pages } + { + ", " * + swap$ + n.dashify + pages multi.page.check + 'bbl.pages + 'bbl.page + if$ + swap$ tie.or.space.prefix + "pages" bibinfo.check + * * + * + } + if$ + } + if$ +} +FUNCTION {format.journal.eid} +{ eid "eid" bibinfo.check + duplicate$ empty$ 'pop$ + { swap$ duplicate$ empty$ 'skip$ + { + ", " * + } + if$ + swap$ * + } + if$ +} +FUNCTION {format.vol.num.pages} +{ volume field.or.null + duplicate$ empty$ 'skip$ + { + "volume" bibinfo.check + } + if$ + bolden + number "number" bibinfo.check duplicate$ empty$ 'skip$ + { + swap$ duplicate$ empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + swap$ + "(" swap$ * ")" * + } + if$ * +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + { "" } + { type empty$ + { bbl.chapter } + { type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + } + if$ +} + +FUNCTION {format.booktitle} +{ + booktitle "booktitle" bibinfo.check + emphasize +} +FUNCTION {format.in.ed.booktitle} +{ format.booktitle duplicate$ empty$ 'skip$ + { + editor "editor" format.names.ed duplicate$ empty$ 'pop$ + { + " " * + get.bbl.editor + capitalize + "(" swap$ * ") " * + * swap$ + * } + if$ + word.in swap$ * + } + if$ +} +FUNCTION {format.thesis.type} +{ type duplicate$ empty$ + 'pop$ + { swap$ pop$ + "t" change.case$ "type" bibinfo.check + } + if$ +} +FUNCTION {format.tr.number} +{ number "number" bibinfo.check + type duplicate$ empty$ + { pop$ bbl.techrep } + 'skip$ + if$ + "type" bibinfo.check + swap$ duplicate$ empty$ + { pop$ "t" change.case$ } + { tie.or.space.prefix * * } + if$ +} +FUNCTION {format.article.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} +FUNCTION {format.book.crossref} +{ volume duplicate$ empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + pop$ word.in + } + { bbl.volume + capitalize + swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word * + } + if$ + " \cite{" * crossref * "}" * +} +FUNCTION {format.incoll.inproc.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} +FUNCTION {format.org.or.pub} +{ 't := + "" + address empty$ t empty$ and + 'skip$ + { + address "address" bibinfo.check * + t empty$ + 'skip$ + { address empty$ + 'skip$ + { ": " * } + if$ + t * + } + if$ + } + if$ +} +FUNCTION {format.publisher.address} +{ publisher "publisher" bibinfo.warn format.org.or.pub +} + +FUNCTION {format.organization.address} +{ organization "organization" bibinfo.check format.org.or.pub +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.block + crossref missing$ + { + journal + "journal" bibinfo.check + emphasize + word.in swap$ * + "journal" output.check + format.vol.num.pages output + } + { format.article.crossref output.nonnull + } + if$ + eid empty$ + { format.journal.pages } + { format.journal.eid } + if$ + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + add.blank + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.date "year" output.check + date.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + new.block + format.number.series output + format.edition output + new.sentence + format.publisher.address output + } + { + new.block + format.book.crossref output.nonnull + } + if$ + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {booklet} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.block + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.date "year" output.check + date.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 + format.edition output + new.sentence + format.publisher.address output + } + { + format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + } + if$ + format.pages "pages" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.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.edition output + format.chapter.pages output + new.sentence + format.publisher.address output + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + format.pages "pages" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + new.sentence + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + } + if$ + format.pages "pages" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {conference} { inproceedings } +FUNCTION {manual} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check + organization address new.block.checkb + organization "organization" bibinfo.check output + address "address" bibinfo.check output + format.edition output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.btitle + "title" output.check + new.block + bbl.mthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title output + new.block + howpublished "howpublished" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +% editedByHand +FUNCTION {electronic} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check % title is italic and without quotes + new.block + howpublished "howpublished" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.urldate output + new.block + format.note output + fin.entry +} +% end of editedByHand +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.btitle + "title" output.check + new.block + bbl.phdthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + format.editors output + editor format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check + format.bvolume output + format.number.series output + new.sentence + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.btitle + "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + format.doi output + new.block + format.url output + new.block + format.note "note" output.check + fin.entry +} + +FUNCTION {default.type} { misc } +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 {format.lab.names} +{'s := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}{, jj}" format.name$ + 't := + nameptr #1 > + { + nameptr #2 = + numnames #2 > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + namesleft #1 > + { ", " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { + numnames #2 > + { "," * } + 'skip$ + if$ + bbl.and + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.label} +{ editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.short.authors} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.label + 'author.key.label + if$ + } + if$ + 'short.list := +} + +FUNCTION {calc.label} +{ calc.short.authors + short.list + "(" + * + year duplicate$ empty$ + short.list key field.or.null = or + { pop$ "" } + 'skip$ + if$ + * + 'label := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" + format.name$ 't := + nameptr #1 > + { + nameptr #1 + #1 + = + numnames #5 + > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + " " * + namesleft #1 = t "others" = and + { "zzzzz" * } + { t sortify * } + if$ + } + { 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 {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 {editor.sort} +{ editor empty$ + { key empty$ + { "to sort, need editor or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ +} +INTEGERS { seq.num } +FUNCTION {init.seq} +{ #0 'seq.num :=} +EXECUTE {init.seq} +FUNCTION {int.to.fix} +{ "000000000" swap$ int.to.str$ * + #-1 #10 substring$ +} +FUNCTION {presort} +{ calc.label + label sortify + " " + * + seq.num #1 + 'seq.num := + seq.num int.to.fix + 'sort.label := + sort.label + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} +SORT +STRINGS { last.label next.extra } +INTEGERS { last.extra.num number.label } +FUNCTION {initialize.extra.label.stuff} +{ #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'last.extra.num := + #0 'number.label := +} +FUNCTION {forward.pass} +{ last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ + number.label #1 + 'number.label := +} +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + extra.label 'next.extra := + extra.label + duplicate$ empty$ + 'skip$ + { "{\natexlab{" swap$ * "}}" * } + if$ + 'extra.label := + label extra.label * 'label := +} +EXECUTE {initialize.extra.label.stuff} +ITERATE {forward.pass} +REVERSE {reverse.pass} +FUNCTION {bib.sort.order} +{ sort.label + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} +ITERATE {bib.sort.order} +SORT +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" number.label int.to.str$ * "}" * + write$ newline$ + "\newcommand{\enquote}[1]{``#1''}" + write$ newline$ + "\providecommand{\natexlab}[1]{#1}" + write$ newline$ + "\providecommand{\url}[1]{\texttt{#1}}" + write$ newline$ + "\providecommand{\urlprefix}{URL }" + write$ newline$ + %editedByHand + "\providecommand{\urldate}[1]{#1}" + write$ newline$ + "\providecommand{\urldateprefix}{Access }" + write$ newline$ + %end of editedByHand + "\expandafter\ifx\csname urlstyle\endcsname\relax" + write$ newline$ + " \providecommand{\doi}[1]{doi:\discretionary{}{}{}#1}\else" + write$ newline$ + " \providecommand{\doi}{doi:\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi" + write$ newline$ +} +EXECUTE {begin.bib} +EXECUTE {init.state.consts} +ITERATE {call.type$} +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} +EXECUTE {end.bib} +%% End of customized bst file +%% +%% End of file `FG_AK_template.bst'. diff --git a/help/FG_AK_English_Number.pdf b/help/FG_AK_English_Number.pdf new file mode 100644 index 0000000..9aefca8 Binary files /dev/null and b/help/FG_AK_English_Number.pdf differ diff --git a/help/Literatur.tex b/help/Literatur.tex new file mode 100755 index 0000000..ffc330e --- /dev/null +++ b/help/Literatur.tex @@ -0,0 +1,127 @@ +% ------------------------------------------------------------------------------------------------------ % +% Beispieldokument zur Veranschaulichung der Erzeugung von latex-Zitationen in uebereinstimmung mit +% Richtlinien des Fachgebiets Audiokommunikation. +% +% Bisher sind zwei Sprachen (Deutsch, Englisch) sowie zwei Zitationsstile (Autor/Jahr, Nummern) waehlbar. +% +% +% Lieferumfang, bzw. zur korrekten Funktion benoetigte Dateien: +% +% Literatur.tex - dieses tex-Dokument +% Bibliography.bib - eine Besipielbibliographie +% FG_AK_Deutsch_AutorJahr.bst - style-file +% FG_AK_Deutsch_Nummern.bst - " - +% FG_AK_English_AuthorYear.bst - " - +% FG_AK_English_Number.bst - " - +% FG_AK_Deutsch_AutorJahr.pdf - pdf zur Dokumentation einer korrekten Kompilation +% FG_AK_Deutsch_Nummern.pdf - " - +% FG_AK_English_AuthorYear.pdf - " - +% FG_AK_English_Number.pdf - " - +% +% sowie, zur naeheren Erlaeuterung: +% +% FG AK Zitieren und Verweisen Anwendungsbeispiele.pdf +% FG AK Zitieren und Verweisen Systeme.pdf +% +%-----------------------------------------% +% Fachgebiet Audiokommunikation, TU Berlin +% F. Brinkmann, A. Lindau, H.-J. Maempel +% (C) 2011 +% +% vs. 0.1 18.10.2011 FB +% vs 0.2 18.10.2011 AL, todo Nummerierung-Deutsch(!) noch in Zitationsreihenfolge, nicht alphabetisch! +% ------------------------------------------------------------------------------------------------------ % +\documentclass[12pt,oneside,a4paper]{scrartcl} % Schriftgroesse, Layout, Papierformat, Art des Dokumentes +\usepackage[utf8]{inputenc} % Umlaute ermoeglichen + + +% Sprache durch auskommentieren waehlen +%\usepackage[english]{babel} % Englisch +\usepackage{ngerman} % ... Deutsch, neue Rechtschreibung + + +% Korrekte Einbindung des natbib Packages, je nach gewaehltem Zitationsstil auskommentieren +\usepackage{natbib} % ... fuer Autor/Jahr-Stil +%\usepackage[numbers]{natbib} % ... fuer Nummerierungsstil + + +% Zur Wahl des Zitations- und Bibliography-Stils die folgenden Zeilen entprechend ein bzw. +% auskommentieren. Bisher sind zwei Sprachen (Deutsch, Englisch) sowie zwei Zitationsstile +% (Autor/Jahr, Nummern) waehlbar: +% +%\bibliographystyle{FG_AK_English_AuthorYear} +%\bibliographystyle{FG_AK_English_Number} +%\bibliographystyle{FG_AK_Deutsch_AutorJahr} +%\bibliographystyle{FG_AK_Deutsch_Nummer} + + +% ------------------ % +\begin{document} + +\section{Publikationstypen} + +\hspace{.4cm}\textbf{Monografie:}\\ +\cite{Bortz2005},\\ + +\textbf{Sammelband:}\\ +\cite{Ahnert2008},\\ + +\textbf{Zeitschriftenartikel:}\\ +% J.Sound Vib - 1 Autor +\cite{Barron1971},\\ +% J. Audio Eng. Soc. - 2 Autoren +\cite{Berg2006},\\ +% J. Hochfreq. - 3 Autoren, im Fliesstext ab jetzt per 'et al.' zitiert, wenn nicht mit '*' zitiert (\cite*{Moller1992}) +\cite{Reichhardt1955},\\ +% J. Audio Eng. Sog. - Titel endet mit einem ? +\cite{Moller1996},\\ +% Rundfunktech. Mitteilungen - Bei mehr als 5 Autoren in Bibliographie mit Erstautor et al. +\cite{Blauert1978},\\ + +\textbf{Online first Zeitschriftenartikel (wie Zeitschriftenartikel):}\\ +\cite{Brodsky2011},\\ + +\textbf{Technical Report (wie Zeitschriftenartikel):}\\ +%j. Report - 2 Autoren +\cite{Somerville1963},\\ + +\textbf{Kongressbeitrag:}\\ +% AES Convention +\cite{Berg2000},\\ + +\textbf{Internetressource:}\\ +\cite{Ledergerber2002},\\ + +\textbf{Abschlussarbeit:}\\ +\cite{Lindau2006},\\ + +\textbf{Normen und Empfehlungen (wie Monografie):}\\ +% Zitation einer Norm mit Angabe des Jahrs oder Nummer. Das ~ Zeichen setzt ein Leerzeichen und verhindert gleichzeitig einen Zeilenumbruch. +DIN~33402-2E\nocite{DIN33402-2E},\\ % bei Autor/Jahr ~(\citeyear{DIN33402-2E}), bei Nummern ~\cite{DIN33402-2E} +% Zitation einer Norm ohne Angabe des Jahrs. Sie erscheint trotzdem im Literaturverzeichnis. +Rec.~ITU-R~BS.1116-1\nocite{ITU_R1116-1}.\\ + +\clearpage + +\section{Zitation im Text} +\citet{Ahnert2008}\\ +\citet[Fig.~5.1]{Ahnert2008}\\ +\citep{Ahnert2008}\\ +\citep[p.~200]{Ahnert2008}\\ +\citep[c.f.][]{Ahnert2008}\\ +\citep[c.f.][Fig.~5.1]{Ahnert2008}\\ +\citep{Ahnert2008, Barron1971} + + +\section{Anmerkung} +Um das Literaturverzeichnis zu erzeugen, muss zunaechst Latex ausgefuehrt werden, wodurch die zitierten BibItems in eine aux-Datei geschrieben werden. Danach BibTex ausfuehren, um die BibItems zu uebernehmen und zum Schluss noch dreimal (!) Tex ausfuehren. Beim ersten Mal, wird das Literaturverzeichnis erstellt, beim zweiten und dritten Mal werden die Verlinkungen im Text geschaffen. + +Um die gewuenschte Formatierung zu schaffen muessen auch die BibTex Eintraege entsprechend formatiert sein. Freie Programme zur Literaturverwaltung sind z.B. JabRef fuer Windows, Mac und Linux oder BibDesk fuer Mac. Beispiele fuer die korrekte Formatierung sind in der beiliegenden Bibliographie enthalten. + +Bei Abschlussarbeiten kann der Typ (Masterarbeit, Bachelorarbeit etc.) ueber das Bibtex-Feld 'Type' definiert werden. Die Standardeinstellungen sind 'Masterarbeit' bei deutschen und 'Master's Thesis' bei englischen Dokumenten. + +Wenn das Packet 'csquotes' benutzt wird, muss in der bbl-Datei die zweite Zeile mit '\%' auskommentiert werden: \%\textbackslash newcommand\{\textbackslash enquote\}[1]\{``\#1''\}. Die bbl-Datei entsteht, nachdem BibTex ausgefuehrt worden ist. + +\bibliography{Bibliography} + +\end{document} \ No newline at end of file diff --git a/help/LiteraturreferenzenAKStyle.pdf b/help/LiteraturreferenzenAKStyle.pdf new file mode 100644 index 0000000..48a1419 Binary files /dev/null and b/help/LiteraturreferenzenAKStyle.pdf differ diff --git a/help/Rg_8A6825GW9TG.pdf b/help/Rg_8A6825GW9TG.pdf new file mode 100644 index 0000000..de82370 Binary files /dev/null and b/help/Rg_8A6825GW9TG.pdf differ diff --git a/thesis/thesis.pdf b/thesis/thesis.pdf new file mode 100644 index 0000000..fdc2aeb Binary files /dev/null and b/thesis/thesis.pdf differ diff --git a/thesis/thesis.tex b/thesis/thesis.tex new file mode 100644 index 0000000..b1d78b8 --- /dev/null +++ b/thesis/thesis.tex @@ -0,0 +1,265 @@ +\documentclass[12pt,a4paper,oneside,titlepage]{report} +\usepackage[english]{babel} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{textcomp} % Sonderzeichen, z.B. € +%\usepackage{citep} +\usepackage{listings} +\lstdefinelanguage{Ini}{basicstyle=\ttfamily\tiny, + columns=fullflexible, + tag=[s]{[]}, + tagstyle=\color{blue}\bfseries, + usekeywordsintag=true +}[html] +\lstdefinelanguage{bash}{basicstyle=\ttfamily\tiny} +\usepackage{ulem} +\usepackage{lmodern} +\usepackage{multirow} +\usepackage{url} +\usepackage{graphicx} % for PDF scaling +\usepackage{pdfpages} +\usepackage{float} +\floatstyle{boxed} +\restylefloat{figure} +\usepackage{color} +\usepackage{bbding} +\usepackage{hyperref} +\usepackage[font=scriptsize]{caption} +\usepackage[numbers]{natbib} +\graphicspath{{images//}} + +\begin{document} + \title{Master Thesis: SoundScape Renderer Networking} + \author{David Runge\\ + Audiokommunikation und -technologie\\ + Fachgebiet Audiokommunikation\\ + Technische Universität Berlin\\ + \href{dave@sleepmap.de}{dave@sleepmap.de} + } + \date{\today} + \maketitle + \begin{abstract} + Wave Field Synthesis (WFS) as a technological concept has been around for + many years now and all over the world several institutions run small and + some even large scale setups ranging from single speaker lines to those + facilitating a couple of hundred loudspeakers respectively.\\ + The still evolving implementations are driven by several rendering + engines, of which two free and open-source ones, namely sWONDER and + SoundScape Renderer, have (partially) been developed at TU Berlin.\\ + The latter due to its current design is not yet able to render for large + scale setups, ie.\ those using several computers to render audio on a + loudspeaker setup, due to the high amount of channels.\\ + Its solid codebase however, which additionally offers a framework for many + more renderering types, and the ongoing development, deems further work on + this application a good future investment.\\ + This work is about the extension of the SoundScape Renderer's functionality + to turn it into a networking application for large scale WFS setups. +\end{abstract} + \section{Introduction} + Wave Field Synthesis (WFS) describes a spatial technique for rendering audio. As + such it aims at synthesizing a sound field of desired acoustic preference + in a given listening area, assuming a planar reproduction to be most + suitable for most applications.\\ + WFS is typically implemented using a curved or linear loudspeaker array + surrounding the listening area.\\ + Several free and open-source renderer applications exist for WFS + environments, with varying stages of feature richness.\\ + The proposed work will focus on one of them and its extension towards WFS + on large scale systems. + + \section{Free and open-source wave field synthesis renderers} + To date there exist three (known of) free and open-source Wave Field + Synthesis renderers, which are all \href{http://jackaudio.org/}{JACK Audio + Connection Kit (JACK)} \citep{website:jackaudio2016} clients: + \begin{itemize} + \item \href{https://sourceforge.net/projects/swonder/}{sWONDER} \citep{website:swonder2016}, + developed by Technische Universität Berlin, Germany + \item \href{https://github.com/GameOfLife/WFSCollider}{WFSCollider} \citep{website:wfscollider2016}, + developed by \href{http://gameoflife.nl/en}{Game Of Life Foundation} \citep{website:gameoflife2016}, + The Hague, Netherlands + \item \href{http://spatialaudio.net/ssr/}{SoundScape Renderer (SSR)} \citep{website:ssr2016}, + developed by Quality \& Usability Lab, Deutsche Telekom Laboratories + and TU Berlin and Institut für Nachrichtentechnik, Universität Rostock + \end{itemize} + Currently only WFSCollider and the SSR are actively maintained and + developed, thussWONDER, although used in some setups, loses significance. + Generally it can be said, that different concepts apply to the three + renderers, which are about to be explained briefly in the following + sections. + + \subsection{WONDER} + sWONDER \citep{baalman2007} consists of a set of C++ applications that provide binaural and + WFS rendering. In 2007 it was specifically redesigned + \citep{baalmanetal2007} to cope with large scale WFS setups in which + several (computer) nodes, providing several speakers each, drive a system + together.\\ + In these setups each node receives all available audio streams (which + represent one virtual audio source respectively) redundantly and a master + application signals which node is responsible for rendering what source + on which speaker.\\ + It uses Open Sound Control (OSC) for messaging between its parts and for + setting its controls. Apart from that, it can be controlled through a + Graphical User Interface (GUI), that was specifically designed for it. + Unfortunately sWONDER has not been actively maintained for several years, + has a complex setup chain and many bugs, that are not likely to get fixed + any time soon. + + \subsection{WFSCollider} + WFSCollider was built on top of + \href{https://supercollider.github.io}{SuperCollider} 3.5 + \citep{website:supercollider2016} and is also capable of driving large + scale systems. It uses a different approach in + doing so, though: Whereas withsWONDER all audio streams are distributed + to each node, WFSCollider usually uses the audio files to be played on + all machines simultaneously and synchronizes between them.\\ + It has a feature-rich GUI in the ``many window'' style, making available + time lines and movement of sources through facilitating what the sclang + (SuperCollider programming language) has to offer.\\ + As WFSCollider basically is SuperCollider plus extra features, it is also + an OSC enabled application and can thus also be used for mere + multi-channel playback of audio.\\ + Although it has many useful features, it requires MacOSX (Linux version + still untested) to run, is built upon a quite old version of + \href{https://supercollider.github.io}{SuperCollider} and is likely never + to be merged into it, due to many core changes to it. + + \subsection{SoundScape Renderer} + SoundScape Renderer (SSR), also a C++ application, running on Linux and + MacOSX, is a multi-purpose spatial audio renderer, as it is not only + capable of Binaural Synthesis and WFS, but also Higher-Order Ambisonics + and Vector Base Amplitude Panning.\\ + It can be used with a GUI or headless (without one), depicting the + virtual sources, their volumes and positions, alongside which speakers + are currently used for rendering a selected source. + SSR uses TCP/IP sockets for communication and thus is not directly OSC + enabled. This functionality can be achieved using the capapilities of + other applications such as \href{http://puredata.info}{PureData} + \citep{website:puredata2016} in combination with it though.\\ + Unlike the two renderers above, the SSR is not able to run large-scale + WFS setups, as it lacks the features to communicate between instances of + itself on several computers, while these instances serve a subset of the + available loudspeakers. + + \section{Extending Sound Scape Renderer functionality} + The SSR, due to its diverse set of rendering engines, which are made + available through an extensible framework, and its clean codebase, is a + good candidate for future large scale WFS setups. These type of features + are not yet implemented though and will need testing.\\ + Therefore I propose the implementation and testing of said feature, making + the SSR capable of rendering on large scale WFS setups with many nodes, + controlled by a master instance.\\ + The sought implementation is inspired by the architecture of sWONDER, but + instead of creating many single purpose applications, the master/node + feature will be made available through flags to the ssr executable, when + starting it. This behavior is already actively harnessed eg.\ for selecting + one of the several rendering engines. + \begin{figure}[!htb] + \centering + \includegraphics[scale=0.9, trim = 31mm 190mm 24mm 8mm, clip]{ssr-networking.pdf} + \caption{A diagram displaying the SSR master/node setup with TCP/IP + socket connections over network (green lines), audio channels (red dashed + lines) and OSC connection (blue dashed line). Machines are indicated as red + dashed rectangles and connections to audio hardware as outputs of SSR + nodes as black lines below them.} + \label{fig:ssr-networking} + \end{figure} + While the SSR already has an internal logic to know which loudspeaker will + be used for what virtual audio source, this will have to be extended to be + able to know which renderer node has to render what source on which + loudspeaker (see Figure~\ref{fig:ssr-networking}). + To achieve the above features, the SSR's messaging (and thus also settings) + capabilities have to be extended alongside its internal logic concerning + the selection of output channels (and the master to node notification + thereof). To introduce as little redundant code as possible, most likely a + ``the client knows all'' setup is desirable, in which each node knows about + the whole setup, but is also set to only serve its own subset of + loudspeakers in it. This will make sure that the rendering engine remains + functional also in a small scale WFS setup.\\ + The lack of a direct OSC functionality, as provided by the two other + renderers, will not be problematic, as master and nodes can communicate + through their builtin TCP/IP sockets directly and the master can, if + needed, be controlled via OSC. + + \section{Prelimenaries} + In preparation to the exposé I tried to implement a side-by-side + installation, using Arch Linux on a medium scale setup, facilitating the + WFS system of the Electronic Studio at TU Berlin. Unfortunately the + proprietary Dante driver, that is used in that system is very complex to be + built, as well as underdeveloped and thus keeps the system from being + easily updated, which is needed for testing purposes (finding a suitable + real-time, low-latency Linux kernel), trying out new software features, + building new software and keeping a system safe. The driver will most + likely require changes to the hardware due to implemention of hardware + branding by the vendor and dire testing before usage.\\ + Although eventually using a proper WFS setup for testing will be necessary, + it is luckily not needed for implementing the features, as they can already be + worked out using two machines running Linux, JACK and the development version + of SSR.\\ + The hardware of the large scale setup at TU Berlin in H0104 is currently + about to be updated and therefore a valuable candidate for testing of the + sought SSR features. + + \section{Schedule} + I propose a six month schedule for the implementation and testing of the + changes to the source code and writing of an accompanying thesis. The + following rough schedule should serve as a guideline for the realization of + the work:\\ + \begin{tabular}{|l|l|l|l|} + \hline + \multicolumn{4}{|c|}{\textbf{Schedule}}\\ + \hline + \textbf{Week} & \textbf{Implementation} & \textbf{Tests} & \textbf{Thesis} \\ + \hline + 1 & Reading into codebase & & \\ + \hline + 2 & Reading into codebase & & \\ + \hline + 3 & Reading into codebase & & \\ + \hline + 4 & Reading into codebase & & \\ + \hline + 5 & Assessing changes & & Documentation \\ + \hline + 6 & Assessing changes & & Documentation \\ + \hline + 7 & Implementing changes & & \\ + \hline + 8 & Implementing changes & & \\ + \hline + 9 & Implementing changes & & \\ + \hline + 10 & Implementing changes & & \\ + \hline + 11 & Implementing changes & & \\ + \hline + 12 & Implementing changes & & \\ + \hline + 13 & Implementing changes & & Preparation\\ + \hline + 14 & Implementing changes & & Preparation\\ + \hline + 15 & & Small scale setup & Writing\\ + \hline + 16 & & Large scale setup & Writing\\ + \hline + 17 & & Large scale setup & Writing\\ + \hline + 18 & & Large scale setup & Writing\\ + \hline + 19 & Large scale setup (scripts) & & Writing\\ + \hline + 20 & Large scale setup (scripts) & & Writing\\ + \hline + 21 & Large scale setup (scripts) & & Writing\\ + \hline + 22 & & & Writing\\ + \hline + 23 & & & Writing\\ + \hline + 24 & & & Writing\\ + \hline + \end{tabular} + \pagebreak + \bibliographystyle{plainnat} + \bibliography{bib/ssr-networking} +\end{document} -- cgit v1.2.3-70-g09d2