#Build Number for ANT. Do not edit!
-#Tue Jan 30 19:44:09 CET 2007
-build.number=437
+#Fri Jun 29 14:17:55 CEST 2007
+build.number=84
help mailing list: must be inserted
Precondition: 1. Ant should be installed.
- 2. JAVA_HOME environment variable contains the path to JDK1.4 or higher
+ 2. JAVA_HOME environment variable contains the path to JDK1.5 or higher
3. ANT_HOME environment variable contains the path to ant's home directory
Language: XML
Compiler: Ant
Authors: Joerg K. Wegner, wegnerj@informatik.uni-tuebingen.de
Morten O. Alver
- Version: $Revision: 1.78 $
- $Date: 2006/11/29 00:51:22 $
- $Author: coezbek $
+ Version: $Revision: 1.82.2.1 $
+ $Date: 2007/06/20 18:51:59 $
+ $Author: mortenalver $
modified:
23.11.2006 c.oezbek
========================================================================================== -->
<!-- some version information -->
- <property name="jabref.version" value="2.2" />
+ <property name="jabref.version" value="2.3b" />
<property name="jabref.placeholder.version" value="@version@" />
<!-- used by replace task -->
<and>
<os family="windows" />
<isset property="nsis.executable" />
-<!-- <available file="${nsis.executable}" /> -->
</and>
</condition>
<pathelement location="${library.directory}/looks-2.0.4.jar" />
<pathelement location="${library.directory}/forms-1.0.4.jar" />
<pathelement location="${library.directory}/spin.jar" />
- <pathelement location="${library.directory}/glazedlists-1.7.0_java14.jar" />
+ <pathelement location="${library.directory}/glazedlists-1.7.0_java15.jar" />
<pathelement location="${library.directory}/microba.jar" />
<pathelement location="${library.directory}/PDFBox-0.7.3-dev-reduced.jar" />
<pathelement location="${library.directory}/JempBox-0.1.0-dev.jar" />
<!-- Compiles project -->
<target name="compile">
<mkdir dir="${build.classes}" />
- <javac debug="off" deprecation="on" destdir="${build.classes}" source="1.4" target="1.4">
+ <javac debug="on" deprecation="on" destdir="${build.classes}" source="1.5" target="1.5">
<src path="${java.dir}" />
<exclude name="tests/**" />
<classpath refid="classpath" />
<target name="compiletest">
<mkdir dir="${build.classes}" />
<!--deprecation="on"-->
- <javac srcdir="${java.dir}/tests" debug="off" destdir="${build.classes}" source="1.4" target="1.4">
+ <javac srcdir="${java.dir}/tests" debug="off" destdir="${build.classes}" source="1.5" target="1.5">
<classpath refid="classpath" />
</javac>
</target>
<target name="osx">
<mkdir dir="${build.classes}" />
- <javac srcdir="${osx.dir}" debug="on" destdir="${build.classes}" target="1.4">
+ <javac srcdir="${osx.dir}" debug="on" destdir="${build.classes}" target="1.5">
</javac>
</target>
<unjar src="${library.directory}/looks-2.0.4.jar" dest="${build.tmp}" />
<unjar src="${library.directory}/forms-1.0.4.jar" dest="${build.tmp}" />
<unjar src="${library.directory}/spin.jar" dest="${build.tmp}" />
- <unjar src="${library.directory}/glazedlists-1.7.0_java14.jar" dest="${build.tmp}" />
+ <unjar src="${library.directory}/glazedlists-1.7.0_java15.jar" dest="${build.tmp}" />
<unjar src="${library.directory}/microba.jar" dest="${build.tmp}" />
<unjar src="${library.directory}/PDFBox-0.7.3-dev-reduced.jar" dest="${build.tmp}" />
<unjar src="${library.directory}/JempBox-0.1.0-dev.jar" dest="${build.tmp}" />
<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
<target name="win.installer.clean" description="Delete Installer and Exe-Wrapper + Temp-files">
- <delete dir="${win.installer.dir}/dist" />
+ <delete failonerror="false" dir="${win.installer.dir}/dist" />
<delete file="${win.installer.dir}/JabRefSetup.exe" />
</target>
- <target name="win.installer" if="is.windows" description="Copy files in place to be used by the installer">
+ <target name="win.installer" description="Copy files in place to be used by the installer" depends="jars">
+ <fail unless="is.windows" message="Not running on windows or NSIS not found. Please make sure that user.properties exists"/>
+
<!-- Gather everything that will go into the installer in dist -->
<mkdir dir="${win.installer.dir}/dist" />
- <!-- <copy file="${build.lib}/${jabref.bin}.jar"
- todir="${win.installer.dir}/dist" /> -->
+ <copy file="${build.lib}/${build.jar}"
+ todir="${win.installer.dir}/dist" />
<available property="win.installer.jar.available" file="${win.installer.dir}/dist/${build.jar}"/>
<exec dir="." executable="${nsis.executable}" failonerror="true">
<arg line="'/DVERSION=${jabref.version}' ${win.installer.dir}/setup.nsi" />
</exec>
+
+ <delete dir="${win.installer.dir}/dist" />
+
</target>
<!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Michel Baylac,
Guillaume Gardey,
Cyrille d'Haese,
+S M Mahbub Murshed,
Raik Nagel,
Christopher Oezbek,
Ellen Reitmayr,
<H2>Contributions from:</H2>
Michael Beckmann,
-Oliver Böckmann,
+Oliver B�ckmann,
Kolja Brix,
Frédéric Darboux,
Fabrice Dessaint,
Nathan Dunn,
Brian Van Essen,
Alexis Gallagher,
+David Gleich,
Sascha Hunold,
Bernd Kalbfuss,
Martin Kähmer,
Christian Kopf,
Jeffrey Kuhn,
Alex Montgomery,
+S. M. Mahbub Murshed,
Ambrogio Oliva,
+Stephan Rave,
John Relph,
Hannes Restel,
Moritz Ringler,
There is a lot of different fields in <em>bibtex</em>, and some
-additional fields that you can set in JabRef.
+additional fields that you can set in JabRef.
<p>
Generally, you can use LaTeX commands inside of fields containing
text. <em>Bibtex</em> will automatically format your reference lists,
</strong>An abstract of the work.<br>
<br>
+ </li>
+
+ <li><strong>doi<br>
+ </strong>The Digital Object Identifier, a permanent identifier given to documents.<br>
+ <br>
+
+ </li>
+ <li><strong>eid<br>
+ </strong>The Electronic identifier is for electronic journals that also appear in print. This number replaces the page number, and is used to find the article within the printed volume. Sometimes also called <em>citation number</em>.<br>
+ <br>
+
</li>
<li><strong><span style="font-weight: normal; font-style: italic;">contents*</span><br>
</strong>A Table of Contents<br>
-</body></html>
\ No newline at end of file
+</body></html>
\ No newline at end of file
<a href="GeneralFields.html">Customizing general fields</a><br>
<a href="EndNoteFilters.html">The EndNote import/export filter set</a><br>
<a href="EntryEditorHelp.html">Entry editor</a><br>
+ <a href="FileLinks.html">External file links</a><br>
<a href="TimeStampHelp.html">Entry time stamps</a><br>
<a href="CiteSeerHelp.html">Fetching entries from <em>CiteSeer</em></a><br>
<a href="MedlineHelp.html">Fetching entries from <em>Medline</em></a><br>
<a href="PreviewHelp.html">Entry preview setup</a><br>
<a href="XMPHelp.html">XMP metadata support in JabRef</a>
-</HTML>
\ No newline at end of file
+</HTML>
the extension <b>.layout</b>. To add a new custom export filter, open the
dialog box <b>Options -> Manage custom exports</b>, and click <b>Add new</b>.
A new dialog box will appear, allowing you to specify a name for the export filter
-(which will appear in the <b>File -> Custom export</b> menu of the JabRef window),
+(which will appear as one of the choices in the File type dropdown menu of the file dialog
+when you use the <b>File -> Export</b> menu choice in the JabRef window),
the path to the <b>.layout</b> file, and the preferred file extension for the export
filter (which will be the suggested extension in the file dialog when you use the
export filter).
<li><code>AuthorAndsReplacer</code> : replaces "and" between names with ";", and "&" between the last two.
<li><code>AuthorAndsCommaReplacer</code> : replaces "and" between names with ",", and "&" between the last two.
<li><code>AuthorOrgSci</code> : first author is in "last, first" all others in "first last". First names are abbreviated.
-<li><code>AuthorAbbreviator : to be documented.
-
+<li><code>AuthorAbbreviator</code> : to be documented.
+<li><code>AuthorNatBib</code> : formats author names in NatBib style, with last names only, separating names by "and"
+ if there are two authors, and giving the first author followed by "et al." if there are more than
+ two authors.
<li><code>NoSpaceBetweenAbbreviations</code> : spaces between multiple abbreviated first names are removed.
<li><code>FormatPagesForHTML</code> : replaces "--" with "-".
<li><code>FormatPagesForXML</code> : replaces "--" with an XML en-dash.
<li><code>RemoveWhitespace</code> : to be documented.
<li><code>RemoveLatexCommands</code> : removes LaTeX commands like <code>\em</code>, <code>\textbf</code>, etc. If
used together with <code>HTMLChars</code> or <code>XMLChars</code>, this formatter should be called last.
+<li><code>RemoveTilde</code> : replaces the tilde character used in LaTeX as a non-breakable space by a regular space. Useful
+in combination with the NameFormatter discussed in the next section.
<li><code>ToLowerCase</code> : turns all characters into lower case.
<li><code>CompositeFormat</code> : to be documented.
<p>With JabRef 2.2 it is now possible to define custom name formatters using the bibtex-sty-file syntax.
This allows ultimate flexibility, but is a cumbersome to write</p>
<p>You can define your own formatter in the preference tab "Name Formatter" using the following format
-and then use it with the name given to it as any other name formatter</p>
+and then use it with the name given to it as any other formatter</p>
<code>
<case1>@<range11>@<format>@<range12>@<format>@<range13>...@@<br>
<h2>Export from JabRef</h2>
JabRef can export databases to EndNote-readable files.
-To use this feature, choose <b>Tools -> EndNote</b>,
+To use this feature, choose <b>File -> Export</b>, choose the file type <b>Endnote (txt)</b> and
then specify the name of the export file.
<h2>Import to EndNote</h2>
The default EndNote Import filter does not properly parse authors. The
EndNote Import from JabRef filter does. Additionally, this filter
will recognize a field endnotereftype that will override the default
-mapping. To install the filter, extract the EndNote Extras (<b>File ->
-Export - > Unpack EndNote filter set</b>) and unpack the Zip file which is created.
+mapping. To install the filter, extract the EndNote Extras (<b>Tools -> Unpack EndNote filter set</b>) and unpack the Zip file which is created.
Then follow the directions in the file Readme.txt.<p>
<h3>Modifying EndNote Reference Types</h3>
extract the EndNote Extras and follow the directions in the file
readme.txt.<p>
-<h3>Export to JabRef</h3>
+<h3>Export to JabRef</h3>
EndNote comes with an export style BibTeX. However, this does not
support all BibTeX types and fields, and does not support the
additional General Fields supported by JabRef (<i>pdf, owner, key,</i> etc.)
If you wish to have these fields supported, extract the EndNote
-Extras and follow the directions in the file readme.txt.<p>
+Extras (<b>Tools -> Unpack EndNote filter set</b>) and follow the directions in the file readme.txt.<p>
-</HTML>
+</HTML>
\ No newline at end of file
<H1>PDF/PS/URL/DOI links in JabRef</H1>
+<b>Note:</b> JabRef 2.3 and later versions offer an <a href="FileLinks.html">improved system for external file links</a>.
+<p>
JabRef lets you link up your entries with PDF or PS files stored on your system, as well as
links to the document on the web in the form of an URL or a DOI identifier.
--- /dev/null
+<HTML>
+
+<BODY text="#275856">
+<basefont size="4" color="#2F4958" face="arial">
+
+<H1>File links in JabRef</H1>
+
+JabRef lets you link up your entries with files of any type stored on your system, as well as
+links to the document on the web in the form of an URL or a DOI identifier. Each entry can
+have an arbitrary number of file links, and each linked file can be opened quickly from
+JabRef.
+<p>
+In BibTeX terms, the file links of an entry are encoded in a single field. However, from
+within JabRef they appear as an editable list of links accessed from the entry editor
+along with other BibTeX fields.
+
+<H2>Setting up external file types</H2>
+
+For each file link, a file type must be chosen, to determine what icon should be used and what
+application should be called to open the file. The list of file types can be viewed and edited
+by choosing <b>Options -> Manage external file types</b>, or by clicking the <b>Manage external
+file types</b> button in the <b>External programs</b> tab of the Preferences dialog.
+<p>
+A file type is specified by its name, a graphical icon, a file extension and an application view the files. On Windows, the name of the application can be omitted in
+order to use Window's default viewer instead.
+
+<h2>Adding external links to an entry</h2>
+
+If the "file" field is included in <a href="GeneralFields.html">General fields</a>,
+you can edit the list of external links for an entry in the <a href="EntryEditorHelp.html">Entry editor</a>. The editor includes buttons for inserting,
+editing and removing links, as well as buttons for reordering the list of links.
+<p>
+If you have a file within or below your file directory (set up in <b>Preferences -> External programs -> External file links -> Main file directory</b>) with an extension
+matching one of the defined external file types, and a name containing a BibTeX entry's
+BibTeX key, the file can be autolinked by clicking on the <b>Auto</b> button in the entry editor. The rules for which file names can be autolinked to a BibTeX key can be set up in
+<b>Preferences -> External programs -> External file links -> Use regular expression search</b>.
+<p>
+If you want to download a file and link to it from a BibTeX entry, you can do this by
+clicking the <b>Download</b> button in the entry editor. A dialog box will appear, prompting you to enter the URL. The file will be downloaded to your main file directory, named based on the entry's BibTeX key, and finally linked from the entry.
+
+<h2>Opening external files</h2>
+
+There are several ways to open an external file or web page. In the entry table you can select an entry and use the menu choice, keyboard shortcut
+or the right-click menu to open an entry's first external link. Alternatively, if the entry table is set up to show the <b>file</b> column (set up in <b>Preferences -> Entry table -> Special table columns -> Show file column</b>), you can click on
+the file icon to open an entry's first link. To access any of an entry's links, click
+on the icon with the right mouse button (or <b>Ctrl-click</b> on Max OS X) to bring up
+a menu showing all links.
+
+</body>
+</html>
\ No newline at end of file
<li><b>[<code>authN</code>]</b>: The first N characters of the first author's last name<BR>
<li><b>[<code>authN_M</code>]</b>: The first N characters of the Mth author's last name<BR>
<li><b>[<code>auth.auth.ea</code>]</b>: The last name of the first two authors, and ".ea" if there are more than two.<BR>
+<li><b>[<code>auth.etal</code>]</b>: The last name of the first author, and the last name of the second author if there are two
+ authors or ".etal" if there are more than two.<BR>
<li><b>[<code>authshort</code>]</b>: The last name if one author is given; the first character of up to three authors' last names if more than one author is given. A plus character is added, if there are more than three authors.<BR>
</ul>
<b>Note:</b> If there is no author (as in the case of an edited book), then all of the above <b><code>[auth...]</code></b> markers will use the editor(s) (if any) as a fallback. Thus, the editor(s) of a book with no author will be treated as the author(s) for label-generation purposes. If you do not want this behaviour, i.e. you require a marker which expands to nothing if there is no author, use <b><code>pureauth</code></b> instead of <b><code>auth</code></b> in the above codes. For example, <b><code>[pureauth]</code></b>, or <b><code>[pureauthors3]</code></b>.
identically each time.
<P>
-A string reference can appear anywhere in any field, always by enclosing
+A string reference can appear anywhere in a field, always by enclosing
the string's name in a pair of '#' characters. This syntax is specific for
JabRef, and differs slightly from the <em>bibtex</em> notation that
-is produced when you save your database.
+is produced when you save your database. Strings can by default be used for all
+standard BibTeX fields, and in <b>Preferences -> General -> File</b> you can opt to
+enable strings for non-standard fields as well. In the latter case you can specify a
+set of fields that are excepted from string resolving, and here it is recommended
+to include the 'url' field and other fields that may need to contain the '#' character
+and that may be processed by BibTeX/LaTeX.
<P>
A string may in the same way be referred in the content of another
a different ordering is required by BibTeX.
</BODY>
-</HTML>
\ No newline at end of file
+</HTML>
\ No newline at end of file
Mike Smoot
Ulrich Stärk
Martin Stolle
+Matthias Stuermer
David Weitzman
Seb Wills
Nathan Dunn,
Brian Van Essen,
Alexis Gallagher,
+David Gleich,
Sascha Hunold,
Bernd Kalbfuss,
Martin Kähmer,
Christian Kopf,
Jeffrey Kuhn,
Alex Montgomery,
+S. M. Mahbub Murshed,
Ambrogio Oliva,
+Stephan Rave,
John Relph,
Hannes Restel,
Moritz Ringler,
</strong>Copyright-Informationen.<br>
<br>
</li>
+
+ <li><strong>doi<br>
+ </strong>Der <em>Digital Object Identifier</em> ist eine permanente Kennung von Dokumenten.<br>
+ <br>
+
+ </li>
+ <li><strong>eid<br>
+ </strong>Der EID (<em>Electronic identifier</em>) wird für elektronische Zeitschriften benutzt, die auch im Druck erscheinen. Mit dieser Nummer, die die Seitenzahlen ersetzt, lässt sich der Artikel in der gedruckten Ausgabe finden. Der EID wird manchmal auch <em>citation number</em> genannt.<br>
+ <br>
+
+ </li>
+
<li><strong><span style="font-weight: normal; font-style: italic;">ISBN*</span><br>
</strong>Die Internationale Standardbuchnummer.<br>
<br>
<a href="ImportInspectionDialog.html">Import-Kontrollfenster</a><br>
<a href="OpenOfficeHelp.html">JabRef-Bibliographien in OpenOffice.org benutzen</a><br>
<a href="CommandLine.html">Kommandozeilen-Optionen</a><br>
-<a href="ExternalFiles.html">Links zu externen Dateien (PDF/PS/URL/DOI) in JabRef</a><br>
+<a href="FileLinks.html">Links zu externen Dateien</a><br>
+<a href="ExternalFiles.html">Links zu PDF- und PS-Dateien, URLs und DOIs</a><br>
<a href="StringEditorHelp.html">Der String-Editor</a><br>
<a href="SearchHelp.html">Die Suchfunktionen von JabRef</a><br>
<a href="ContentSelectorHelp.html">Wortauswahl verwalten</a><br>
Endung <b>.layout</b> vorhanden ist. Um einen neuen, eigenen Exportfilter hinzuzufügen,
öffnen Sie das Dialogfenster <b>Optionen -> Verwalte externe Exportfilter</b> und klicken
auf die Schaltfläche <b>Neu</b>. Es öffnet sich ein neues Fenster, in dem Sie einen
-Namen (der im Menü <b>Datei -> Externe Exportfilter</b> angezeigt wird), eine Pfadangabe
+Namen (der als Auswahl im Dateityp-Dropdownmenü erscheint, wenn man <b>Datei -> Exportieren</b>
+im JabRef-Hauptfenster wählt), eine Pfadangabe
zur <b>.layout</b>-Datei und die gewünschte Dateiendung für den Exportfilter angeben
können. Wenn Sie den Exportfilter benutzen, wird diese Endung im Datei-Dialog automatisch
vorgeschlagen.
<ul>
<li><code>HTMLChars</code> : ersetzt TeX-spezifische Sonderzeichen (z.B. {\^a} oder {\"{o}})
durch ihre HTML-Entsprechungen.
+<li><code>HTMLParagraphs</code> : interpretiert zwei aufeinanderfolgende Zeilenumbrüche (z.B. \n \n) als Beginn eines neuen Absatzes und erstellt dementsprechend Absatz-HTML-Tags.
<li><code>XMLChars</code> : ersetzt TeX-spezifische Sonderzeichen (z.B. {\^a} oder {\"{o}})
durch ihre XML-Entsprechungen.
+
<li><code>CreateDocBookAuthors</code> : formatiert das author-Feld im DocBook-Stil.
+<li><code>CreateDocBookEditors</code> : Dokumentation folgt.
+
+<li><code>CurrentDate</code> : gibt das aktuelle Datum aus. Ohne Argument gibt dieser Formatierer das aktuelle Datum im Format "JJJJ.MM.TT HH:MM:SS Z" (Datum, Zeit und Zeitzone) aus. Mit einem anderen Format-String als Argument kann das Datum angepasst werden. So ergibt <code>\format[CurrentDate]{yyyy.MM.dd}</code> nur das Datum, z.B. 2005.11.30.
+
<li><code>AuthorFirstFirst</code> : formatiert die Felder author/editor mit den Vornamen zuerst.
<li><code>AuthorFirstFirstCommas</code> : formatiert die Felder author/editor mit den Vornamen zuerst
und abgetrennt durch Kommas.
+<li><code>AuthorFirstAbbrLastCommas</code> : Dokumentation folgt.
+<li><code>AuthorFirstAbbrLastOxfordCommas</code> : Dokumentation folgt.
+<li><code>AuthorFirstLastOxfordCommas </code> : Dokumentation folgt.
+
<li><code>AuthorLastFirst</code> : formatiert die Felder author/editor mit den Nachnamen zuerst.
<li><code>AuthorLastFirstAbbreviator</code> : kürzt die Vornamen aller Autoren.
Dieser Formatierer kann nur angewendet werden, wenn <code>AuthorLastFirst</code> bereits benutzt wurde.
+<li><code>AuthorLastFirstCommas</code> : Dokumentation folgt.
+<li><code>AuthorLastFirstOxfordCommas</code> : Dokumentation folgt.
+<li><code>AuthorLastFirstAbbrCommas</code> : Dokumentation folgt.
+<li><code>AuthorLastFirstAbbrOxfordCommas</code> : Dokumentation folgt.
+
<li><code>AuthorAndsReplacer</code> : ersetzt "and" zwischen den Namen durch ";", zwischen den letzten beiden Autoren steht "&".
<li><code>AuthorAndsCommaReplacer</code> : ersetzt "and" zwischen den Namen durch "," sowie "&" zwischen den beiden letzten.
+
+<li><code>AuthorOrgSci</code> : Der erste Autor erscheint als "Nachname, Vorname", alle anderen als "Vorname Nachname". Vornamen werden abgekürzt.
+<li><code>AuthorAbbreviator</code> : Dokumentation folgt.
+<li><code>AuthorNatBib</code> : formatiert Autorennamen im Natbib-Stil, also nur mit Nachnamen; zwei Autoren werden durch ein "and" voneinander getrennt, bei mehr als zwei Autoren wird der erste angegeben, gefolgt von "et al."
+<li><code>NoSpaceBetweenAbbreviations</code> : Leerzeichen zwischen mehreren abgekürzten Vornamen werden gelöscht.
+
<li><code>FormatPagesForHTML</code> : ersetzt "--" durch "-".
<li><code>FormatPagesForXML</code> : ersetzt "--" durch einen XML en-dash (Gedanken- bzw. Bis-Strich).
<li><code>RemoveBrackets</code> : entfernt alle geschweiften Klammern "{" oder "}".
+<li><code>RemoveBracketsAddComma</code> : Dokumentation folgt.
+<li><code>RemoveWhitespace</code> : Dokumentation folgt.
<li><code>RemoveLatexCommands</code> : entfernt LaTeX Kommandos wie <code>\em</code>, <code>\textbf</code>
etc. Zusammen mit <code>HTMLChars</code> oder <code>XMLChars</code> sollte dieser Formatierer
zuletzt aufgerufen werden.
<li><code>ToLowerCase</code> : macht aus allen Buchstaben Kleinbuchstaben.
+
+<li><code>CompositeFormat</code> : Dokumentation folgt.
+<li><code>GetOpenOfficeType</code> : Dokumentation folgt.
+<li><code>RTFChars</code> : Dokumentation folgt.
+<li><code>ResolvePDF</code> : Dokumentation folgt.
</ul>
<p>Falls keiner der verfügbaren Formatierer das Ergebnis erzielt, das Sie erreichen möchten,
<h2>Exportieren aus JabRef</h2>
JabRef kann Dateien so exportieren, dass EndNote sie lesen kann.
-Um diese Funktion zu nutzen, wählen Sie <b>Extras -> Endnote</b>
-und wählen dann den Namen der Export-Datei.
+Um diese Funktion zu nutzen, wählen Sie <b>Datei -> Exportieren</b>, wählen als Dateityp <b>Endnote (txt)</b> und dann den Namen der Export-Datei.
<h2>Importieren in EndNote</h2>
Der vorgegebene EndNote-Importfilter kann das Feld author nicht richtig analysieren.
Der EndNote Import from JabRef Filter kann dies. Außerdem erkennt dieser Filter
ein Feld <code>endnotereftype</code>, das die vorgegebene Zuordnung überschreibt.
-Um den Filter zu installieren, extrahieren Sie die EndNote Extras (<b>Datei -> Exportieren
--> EndNote Filter-Set auspacken</b>) und entpacken die Zip-Datei, die dabei erstellt wird. Dann folgen Sie den Angaben in der Datei <code>readme.txt</code>.
+Um den Filter zu installieren, extrahieren Sie die EndNote Extras (<b>Extras
+-> EndNote Filter-Set entpacken</b>) und entpacken die Zip-Datei, die dabei erstellt wird. Dann folgen Sie den Angaben in der Datei <code>readme.txt</code>.
<h3>Ändern der EndNote Referenztypen</h3>
EndNote hat einen Export-Stil BibTeX, der allerdings nicht alle Eintragstypen und Felder von BibTeX
und auch nicht die zusätzlich von JabRef genutzten Allgemeinen Felder (<i>pdf, owner, key</i>
-usw.) unterstützt. Falls Sie diese Felder nutzen wollen, extrahieren Sie die EndNote Extras
+usw.) unterstützt. Falls Sie diese Felder nutzen wollen, extrahieren Sie die EndNote Extras (<b>Extras -> EndNote Filter-Set entpacken</b>)
und folgen den Anweisungen in der Datei <code>readme.txt</code>.<p>
</HTML>
\ No newline at end of file
<H1>Der Eintrags-Editor</H1>
<em>Geöffnet wird der Eintrags-Editor im Hauptfenster durch einen Doppelklick
-auf die linke Spalte eines Eintrags (bzw. irgendwo auf die Zeile des Eintrags, wenn "Bearbeiten in der Tabelle zulassen" im Dialog <strong>Optionen --> Einstellungen --> Allgemein</strong> nicht ausgewählt ist), oder durch Drücken auf ENTER. Der
+auf die Zeile eines Eintrags oder durch Drücken auf ENTER. Der
Eintrags-Editor wird geschlossen, indem man auf ESC drückt.</em>
<P>
Im Eintrags-Editor können Sie alle relevanten Informationen eines Eintrags festlegen.
<BODY text="#275856">
<basefont size="4" color="#2F4958" face="arial">
-<H1>Links zu PDF/PS/URL/DOI-Dateien in JabRef</H1>
+<H1>Links zu PDF- und PS-Dateien, URLs und DOIs in JabRef</H1>
+<b>Anmerkung:</b> Ab JabRef 2.3 gibt es ein <a href="FileLinks.html">verbessertes System für Links zu externen Dateien</a>.
+<p>
Mit JabRef können Sie Ihre Einträge mit den entsprechenden PDF- oder PS-Dateien,
die sich auf Ihrem Computer befinden, verlinken. Ebenso ist es möglich, Dateien
im Internet über ein URL oder DOI zu verlinken.
--- /dev/null
+<HTML>
+
+<BODY text="#275856">
+<basefont size="4" color="#2F4958" face="arial">
+
+<H1>Datei-Links in JabRef</H1>
+
+JabRef lässt Sie Ihre Einträge mit Dateien jeden Typs verlinken, die Sie auf Ihrem System gespeichert haben. Außerdem sind Links zu Dokumenten im Internet in der Form eines URL oder eines DOI möglich. Jedem Eintrag kann eine beliebige Anzahl von Datei-Links zugeordnet werden und jede verlinkte Datei kann schnell aus JabRef heraus geöffnet werden.
+
+<p>
+Was BibTeX angeht, werden die Datei-Links eines Eintrags in ein einzelnes Feld geschrieben. In JabRef erscheinen sie aber als editierbare Liste von Links, die im Eintrags-Editor zugänglich sind.
+
+<H2>Einrichten der Dateitypen</H2>
+
+Für jeden Datei-Link muss ein Dateityp gewählt werden, damit das richtige Programm zum Öffnen der Datei und das entsprechende Icon gefunden werden. Die Liste der Dateitypen können Sie einsehen und bearbeiten, indem Sie <b>Optionen -> Externe Dateitypen verwalten</b> wählen oder auf die Schaltfläche <b>Externe Dateitypen verwalten</b> im Bereich <b>Externe Programme</b> des Einstellungs-Dialogs klicken.
+<p>
+Ein Dateityp besteht aus einem Namen, einem graphischen Icon, einer Dateierweiterung und einer Anwendung zum Öffnen der Dateien. Wenn Sie Windows benutzen, können Sie den Namen der Anwendung weglassen, wenn Sie das Standardprogramm verwenden wollen.
+
+<h2>Datei-Links zu einem Eintrag hinzufügen</h2>
+
+Wenn bei den <a href="GeneralFields.html">Allgemeinen Feldern</a> das Feld "file" eingetragen ist,
+können Sie die Liste der externen Links im <a href="EntryEditorHelp.html">Eintrags-Editor</a> bearbeiten.
+Der Editor hat dann Schaltflächen zum Einfügen, Bearbeiten, Löschen und Sortieren der Links.
+
+<p>
+Eine Datei kann mit Hilfe der <b>Auto</b>-Schaltfläche automatisch verlinkt werden, falls sie in Ihrem Dateiverzeichnis (<b>Einstellungen -> Externe Programme -> Links zu externen Dateien -> Hauptverzeichnis</b>) oder einem Unterordner liegt, eine Dateierweiterung hat, die JabRef bekannt ist, und einen Namen hat, der mit dem BibTeX-Key des Eintrags übereinstimmt. Die Regeln, nach denen Dateinamen mit BibTeX-Keys automatisch verknüpft werden, können eingestellt werden unter <b>Einstellungen -> Externe Programme -> Links zu externen Dateien -> Suche mit regulärem Ausdruck benutzen</b>.
+
+<p>
+Um eine Datei herunterzuladen und mit einem Eintrag zu verlinken, benutzen Sie die Schaltfläche <b>Download</b> im Eintrags-Editor. Es erscheint ein Dialog, in dem Sie den URL eingeben müssen. Die Datei wird dann in Ihr Hauptverzeichnis gespeichert, anhand des BibTeX-Keys benannt und mit dem Eintrag verknüpft.
+
+<h2>Externe Dateien öffnen</h2>
+
+Es gibt mehrere Möglichkeiten, externe Dateien oder Internetseiten zu öffnen. In der Tabellenansicht können Sie einen Eintrag auswählen und mit dem Menü, einem Tastenkürzel oder dem Kontextmenü den ersten externen Link öffnen. Falls in der Tabellenansicht die Spalte <b>file</b> angezeigt wird (<b>Einstellungen -> Tabellenansicht -> Spezielle Spalten -> Datei-Spalten anzeigen</b>), können Sie auch auf das Icon klicken, um den ersten Link eines Eintrags zu öffnen. Um weitere Links zu öffnen, klicken Sie mit der rechten Maustaste auf das Icon (Mac OS X: <b>Strg-Klick</b>); es erscheint dann ein Menü mit allen Links.
+
+</body>
+</html>
\ No newline at end of file
-This file was created with JabRef 2.2b2.
+This file was created with JabRef 2.2.
Encoding: ISO8859_1
-@ARTICLE{Fenn2006,
+@PERIODICAL{Fenn2006,
author = {Fenn, Jürgen},
title = {Managing Citations and Your Bibliography with \bibtex{}},
journal = {The Prac\TeX{} Journal},
von \bibtex{}. Auch für Anfänger geeignet; englisch.},
timestamp = {2006-12-09},
url = {http://www.tug.org/pracjourn/2006-4/fenn},
- urldate = {9.\,12.\,2006}
}
@UNPUBLISHED{Markey2005,
bib-Dateien über die Programmierung bis hin zu kleinen nützlichen
Tipps und Tricks und dem "`Missbrauch"' von Bib\TeX{} als Adressbuch
oder Glossar~\ldots{}; englisch.},
- timestamp = {2005-11-15},
+ timestamp = {2007-02-01},
titleaddon = {The B to X of Bib\TeX}
}
@UNPUBLISHED{btxdoc,
author = {Oren Patashnik},
title = {Bib\TeX{}ing},
- note = {\ctan{biblio\slash{}bibtex\slash{}distribs\slash{}doc\slash{}btxdoc.tex}},
+ note = {\ctan{biblio\slash{}bibtex\slash{}contrib\slash{}doc\slash{}btxdoc.pdf}},
month = {8.\,} # feb,
year = {1988},
abstract = {Documentation for general {\BibTeX} users},
annote = {Einführung in die Benutzung von Bib\TeX{}, vom Autor des Programms
- selbst; englisch. Dokumentation von Bib\TeX{}, die bei jeder \LaTeX{}-Distribution
- dabei sein sollte.},
+ selbst; englisch.},
timestamp = {2005-11-15}
}
@UNPUBLISHED{btxhak,
author = {Oren Patashnik},
title = {Designing Bib\TeX{} Styles},
- note = {\ctan{biblio\slash{}bibtex\slash{}distribs\slash{}doc\slash{}btxhak.tex}},
+ note = {\ctan{biblio\slash{}bibtex\slash{}contrib\slash{}doc\slash{}btxhak.pdf}},
month = {8.\,} # feb,
year = {1988},
abstract = {The part of \BibTeX's documentation that's not meant for general users},
annote = {Einführung in die Bib\TeX{}-Programmierung, vom Autor des Programms
- selbst; englisch. Dokumentation von Bib\TeX{}, die bei jeder \LaTeX{}-Distribution
- dabei sein sollte. },
+ selbst; englisch.},
timestamp = {2005-11-15}
}
@UNPUBLISHED{Raichle2002,
author = {Raichle, Bernd},
title = {Tutorium: Einführung in die Bib\TeX{}-Programmierung},
- note = {\href{http://www.dante.de/dante/events/dante2002/handouts/raichle-bibtexprog.pdf}{http://www.dante.de/dante/events/dante2002/handouts/raichle-bibtexprog.pdf}},
+ url = {http://www.dante.de/dante/events/dante2002/handouts/raichle-bibtexprog.pdf},
year = {2002},
address = {Erlangen},
- annote = {Gibt eine kurze Einführung in den Aufbau einer Bib\TeX{}-Datei, hat
- seinen Schwerpunkt aber vor allem auf der Erstellung eines Bib\TeX{}-Styles
- (.bst). Erklärt auch die für Bib\TeX{} verwendete Programmiersprache
- UPN (Umgekehrte Polnische Notation); deutsch.},
+ annote = {Kurze Einführung in den Aufbau einer Bib\TeX{}"=Datei, wobei der
+ Schwerpunkt vor allem auf der Erstellung eines Bib\TeX{}"=Styles
+ (\texttt{.bst}) liegt. Auch die für Bib\TeX{} verwendete Programmiersprache
+ UPN (Umgekehrte Polnische Notation) wird erklärt; deutsch.},
timestamp = {2005-11-15}
}
+@UNPUBLISHED{btxfaq,
+ author = {Shell, Michael and Hoadley, David},
+ title = {\bibtex{} Tips and FAQ},
+ note = {\ctan{biblio\slash{}bibtex\slash{}contrib\slash{}doc\slash{}btxFAQ.pdf}},
+ month = jan,
+ year = {2007},
+ annote = {Allgemeine Hinweise und Antworten auf häufig gestellte Fragen rund
+ um \bibtex{}; englisch.}
+}
+
-\documentclass[10pt,normalheadings]{scrartcl}
+%%%%% To do %%%%%
+% DW 2007-03-23
+% - Bibliographie mit biblatex statt jurabib?
+\documentclass[10pt,normalheadings,ngerman]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{textcomp}
\setcounter{secnumdepth}{2}
\setcounter{tocdepth}{4}
+\usepackage{xspace}
-%%% version date
-\newcommand{\versiondate}{in Bearb.}%19.\,12.\,2006
+%%%%% author, version of file %%%%%
+\newcommand{\versiondate}{in Bearb.}%8.\,6.\,2007 20:44
+\def\FileAuthor{Dominik Waßenhoven}
+\def\FileTitle{\jabrefversion{} Benutzerhandbuch}
%%%%% Page Dimensions %%%%%
\usepackage{geometry}
\makeatletter
%%%%% LyX command %%%%%
-\providecommand{\LyX}{L\kern-.1667em\lower.25em\hbox{Y}\kern-.125emX\@}
-
-%%%%% Because html converters don't know tabularnewline %%%%%
-\providecommand{\tabularnewline}{\\}
+\providecommand{\LyX}{L\kern-.1667em\lower.25em\hbox{Y}\kern-.125emX\@\xspace}
%%%%% Listings %%%%%
\usepackage{listings}
frame=none,
%backgroundcolor=\color{pyellow},
language=[LaTeX]TeX,
- basicstyle=\ttfamily\small,
+ basicstyle=\ttfamily,%\small,
commentstyle=\color{red},
keywordstyle=, % LaTeX-Befehle werden nicht fett dargestellt
numbers=none,%left/right
\pdfoptionpdfminorversion 2
%%%%% Colors %%%%%
-\usepackage{color}
+\usepackage[dvipsnames]{xcolor}
\definecolor{dkblue}{rgb}{0,0.1,0.5} % dark blue
\definecolor{dkred}{rgb}{0.66,0.04,0.04} % dark red
\definecolor{pyellow}{rgb}{1,0.97,0.75} % pale yellow
%%%%% New commands %%%%%
%%% JabRef "logo"
-\newcommand{\jabref}{%
-\mbox{%
- \textit{%
- {\color{dkred}J}\hspace{-.015em}{\color{black}ab}%
- \hspace{-.02em}%
- {\color{dkblue}R}\hspace{-.025em}\raisebox{.15ex}{\color{black}ef}%
- }%
- }%
+\DeclareRobustCommand{\jabref}{%
+ \texorpdfstring{% TeX string
+ \raisebox{-.32ex}{\color{dkred}J}\kern-.06em%
+ \hbox{$\m@th$% %% force math size calculations
+ \csname S@\f@size\endcsname
+ \fontsize\sf@size\z@
+ \math@fontsfalse\selectfont
+ \color{orange}A\kern-.025emB}\-%
+ \hbox{\kern-.06em\-R\hspace{-.08em}%
+ \raisebox{.16ex}{$\m@th$% %% force math size calculations
+ \csname S@\f@size\endcsname
+ \fontsize\sf@size\z@
+ \math@fontsfalse\selectfont
+ E\kern-.025emF}}\xspace}%
+ {JabRef\xspace}% PDF string
}
+
%%% version number
-\newcommand{\versionnr}{2.2} %
+\newcommand{\versionnr}{\texorpdfstring{2.3\,(beta)}{2.3 (beta)}} %
%%% JabRef logo with version nr
-\newcommand{\jabrefversion}{\jabref{}~\versionnr}
-%%% BibTeX-shortcut
-\newcommand{\bibtex}{\texorpdfstring{Bib\kern-.125em\TeX}{BibTeX}}
+\newcommand{\jabrefversion}{\jabref~\versionnr}
+%%% BibTeX logo
+\newcommand{\bibtex}{\texorpdfstring{Bib\kern-.125em\TeX\xspace}{BibTeX}}
%%% for Menu references
\newcommand{\menu}[1]{\texorpdfstring{{\color{dkred}\textit{#1}}}{#1}}
%%% Menu separator
%%% yellow box with dark blue text
\newcommand{\tip}[2][Tipp: ]{%
\begin{center}%
- \colorbox{pyellow}{\parbox{0.7\textwidth}{%
+ \colorbox{pyellow}{\parbox{0.85\textwidth}{%
\color{dkblue}\textit{#1}#2}}%
\end{center}%
}%
#2\par%
\end{hangparas}
}%
-%\newcommand{\faq}[2]{%
-% \subsection{#1}
-% #2}%
+
%%% for CTAN references
\newcommand{\ctan}[1]{%
- {CTAN: \color{dkblue}#1}%
+ {\textsc{ctan}: \color{dkred}#1}%
}
-%%%%% author, version of file %%%%%
-\def\FileAuthor{Dominik Waßenhoven}
-\def\FileTitle{\jabrefversion{} Benutzerhandbuch}
-
%%%%% Headings %%%%%
\usepackage{scrpage2}
\pagestyle{scrheadings}
%%%%% Fonts %%%%%
\usepackage{charter}
\addtokomafont{sectioning}{\rmfamily} % Headings with serifs
+\renewcommand{\headfont}{\normalfont\itshape} % Headlines italic, not slanted ***
\usepackage[scaled=.83]{beramono}
%%%%% Other stuff %%%%%
%\usepackage{microtype} % micro typography
%%%%% Mini TOCs %%%%%
-\usepackage[ngerman]{minitoc}
+\usepackage{minitoc}
\mtcsetrules{secttoc}{off}
%\mtcsetdepth{secttoc}{3}
\mtcsetfont{secttoc}{subsection}{}
%\mtcsettitlefont{secttoc}{\itshape}
%%%%% Language %%%%%
-\usepackage[ngerman]{babel}
-\hyphenation{
-LaTeX
-BibTeX
-Da-tei-na-men
-Me-nü-be-feh-le
-}
+\usepackage{babel}
%%%%% Bibliography %%%%%
\usepackage{jurabib}
-\jurabibsetup{annote=true,authorformat=year}
+\jurabibsetup{%
+ annote=true,
+ authorformat=year,
+ dotafter=bibentry
+}
+\renewcommand{\biblnfont}{} % Autoren-Nachnamen (Standard: fett)
+\renewcommand{\bibfnfont}{} % Autoren-Vornamen (Standard: fett)
+\renewcommand{\bibelnfont}{} % Hrsg-Nachnamen (Standard: fett)
+\renewcommand{\bibefnfont}{} % Hrsg-Vornamen (Standard: fett)
+\renewcommand{\bibtfont}{\textit} % Titel (Bücher)
+\renewcommand{\bibbtfont}{\textit} % Titel (Sammelwerke)
+\renewcommand{\bibjtfont}{\textit} % Titel (Zeitschriften)
+\renewcommand{\bibpldelim}{(} % runde Klammern bei...
+\renewcommand{\bibprdelim}{)} % ...Zeitschriften (Jahr)
+\renewcommand{\ajtsep}{} % kein Komma nach Zs-Titeln
+\renewcommand{\biburlprefix}{\jblangle\textsc{url: }} % Klammer und Text vor einer URL (Standard: "URL: ")
+
\renewcommand{\bib@heading}{\addsec{Kommentiertes Literaturverzeichnis}}
%%%%% Hyperref %%%%%
bookmarksopen=true,%
bookmarksopenlevel=1,%
}
+\urlstyle{rm}
+
+\hyphenation{
+LaTeX
+BibTeX
+Da-tei-na-men
+Me-nü-be-feh-le
+For-mat-erken-nung% verhindert Trennung "Formater-kennung"
+}
\makeatother
+
+%%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%%
\begin{document}
-\subject{\includegraphics[scale=.5]{../../images/JabRef-icon-48.png}}
+\subject{\includegraphics[scale=.5]{../../images/JabRef-icon-48}}
\title{\jabrefversion{}\\
{\normalsize (\href{mailto:domwass@users.sourceforge.net}{domwass@users.sourceforge.net})}}
-\date{{}}
+\date{\small \versiondate}
\maketitle
+
\begin{abstract}
-\jabref{} ist eine grafische Java-Anwendung zur Bearbeitung von \bibtex{}-Dateien
-(.bib). Mit \jabref{} können Literaturangaben in Gruppen organisiert
+\jabref ist eine grafische Java-Anwendung zur Bearbeitung von \bibtex{}-Dateien
+(.bib). Mit \jabref können Literaturangaben in Gruppen organisiert
und mit einem einfachen Klick die Ansicht auf eine einzelne Gruppe,
eine Schnittmenge von Gruppen oder die Gesamtmenge mehrerer Gruppen
-eingegrenzt werden. \jabref{} kann Literaturangaben sortieren (für
+eingegrenzt werden. \jabref kann Literaturangaben sortieren (für
alle Standard-\bibtex{}-Felder) und automatisch \bibtex{}-Keys erzeugen.
-Auch Links zu PDF-Dateien oder Webseiten können mit \jabref{} einfach
+Auch Links zu PDF-Dateien oder Webseiten können mit \jabref einfach
erstellt werden.
-\jabref{} kann verschiedene Dateiformate importieren und exportieren,
-außerdem können die Exportfilter angepasst werden. \jabref{} kann
+\jabref kann verschiedene Dateiformate importieren und exportieren,
+außerdem können die Exportfilter angepasst werden. \jabref kann
auch von der Kommandozeile gestartet werden, um von einem Importformat
in ein Exportformat zu konvertieren, ohne die grafische Benutzeroberfläche
zu starten.
\end{abstract}
\begin{quote}
\begin{spacing}{0.7}
-\begin{center}{\scriptsize Copyright \textcopyright{} 2005--2006, Dominik
+\begin{center}{\scriptsize Copyright \textcopyright{} 2005--2007, Dominik
Waßenhoven}
\end{center}
{\scriptsize Der Inhalt dieses Handbuchs wird unter den Bedingungen der Creative Commons Public License ">Namensnennung"=NichtKommerziell"=Weitergabe unter gleichen Bedingungen 2.0 Deutschland"< zur Verfügung gestellt. Um den Lizenzvertrag anzusehen, gehen Sie bitte zu \href{http://creativecommons.org/licenses/by-nc-sa/2.0/de/}{http://creativecommons.org\slash{}licenses\slash{}by-nc-sa\slash{}2.0\slash{}de\slash{}} oder schicken einen Brief an Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. \par}\end{spacing}
\section{Einleitung}
\secttoc
-\subsection{Über dieses Handbuch}
+\subsection{Über dieses Handbuch}\label{subsec:about}
Dieses Handbuch will eine kurze Einführung zu den nützlichsten Funktionen
-von \jabref{} bieten, ohne dabei eine erschöpfende Beschreibung aller
-Funktionalitäten dieser Software zu liefern. \emph{}\jabref{} ist
+von \jabref bieten, ohne dabei eine erschöpfende Beschreibung aller
+Funktionalitäten dieser Software zu liefern. \emph{}\jabref ist
das Ergebnis der Verschmelzung von \emph{BibKeeper} und \emph{JBibtexManager}.
-Weitere Informationen gibt es im Internet unter \url{http://jabref.sourceforge.net}
-sowie im Programm selbst unter \menu{Hilfe} \msep{} \menu{Inhalt}.
+Weitere Informationen gibt es im Programm selbst unter \menu{Hilfe} \msep{} \menu{Inhalt}
+sowie im Internet unter \url{http://jabref.sourceforge.net}. Wer dann immer noch keine Antwort auf seine Frage oder keine Lösung zu seinem Problem hat, kann über die Foren oder die Mailingliste auf der Projektseite bei Sourceforge weitere Hilfe bekommen (siehe dazu den Abschnitt \nameref{sec:faq}).
Die Anleitungen basieren auf den Hilfeseiten des Programms. Da dieses
Handbuch und die Hilfeseiten unabhängig voneinander gepflegt und aktualisiert
und anklickbar~-- das gilt sowohl für die Navigation innerhalb des
Dokuments als auch für Links ins Internet.
-Über den Stand und die >>Geschichte<< dieses Handbuchs gibt der
-Abschnitt >>Versionsgeschichte<< (S.\,\pageref{RevisionHistory})
-Auskunft.
-
+Wenn Ihnen in diesem Handbuch Fehler auf"|fallen oder wenn Sie Anregungen zum Handbuch haben, würde ich mich über eine kurze Nachricht per \href{mailto:domwass@users.sourceforge.net}{E-Mail} freuen. Über den Stand und die Versionen dieses Handbuchs gibt der Abschnitt ">\nameref{RevisionHistory}"< Auskunft.
\subsection{Einführung in \bibtex{}}
-\label{BibtexHelp}\tip[]{\jabref{} hilft Ihnen bei der Arbeit mit
+\label{BibtexHelp}\tip[]{\jabref hilft Ihnen bei der Arbeit mit
Ihren \bibtex{}-Dateien, aber es müssen dennoch Regeln beachtet werden,
wenn Sie Ihre Einträge bearbeiten. Nur so kann sichergestellt werden,
dass \bibtex{} Ihre Datei richtig verarbeiten kann.}
-\noindent Im Folgenden können nur einige allgemeine Hinweise gegeben werden. Ausführlichere Einführungen und weitere Erläuterungen zu \bibtex{} finden Sie bei \cite{Fenn2006,Markey2005,btxdoc,btxhak,Raichle2002}.
+\noindent Im Folgenden können nur einige allgemeine Hinweise gegeben werden. Ausführlichere Einführungen und weitere Erläuterungen zu \bibtex{} finden Sie bei den im \hyperlink{bibliography}{kommentierten Literaturverzeichnis} aufgeführten Beiträgen.
+
+\subsubsection{\bibtex{}-Eintragstypen}
+\label{Eintragstypen}
+Je nachdem, ob sie ein Buch, einen Zeitschriftenartikel, einen Sammelband oder ein anderes Dokument referenzieren möchten, hält \bibtex{} unterschiedliche Eintragstypen bereit. Hier folgt eine kurze Aufstellung der meist gebrauchten Eintragstypen.\footnote{Vgl. \cite[12--17]{Markey2005}; \cite[7--9]{btxdoc}.} Manche Paktete (wie ">jurabib"<) stellen weitere Eintragstypen zur Verfügung, die Sie natürlich auch in \jabref verwenden können (mehr dazu im Abschnitt \nameref{CustomEntriesHelp}). Für die Verwendung dieser spezifischen Typen schauen Sie bitte in die jeweilige Dokumentation.
+
+\begin{itemize}
+\item \emph{@article}\\
+Ein Artikel in einer Zeitschrift.
+\item \emph{@book}\\
+Ein Buch, von einem Verlag veröffentlicht.
+\item \emph{@booklet}\\
+Ein gedrucktes und gebundenes Buch ohne Verlag.
+\item \emph{@conference}\\
+Siehe \emph{@inproceedings}
+\item \emph{@inbook}\\
+Ein Teil eines Buches, z.\,B. ein Kapitel oder Abschnitt.
+\item \emph{@incollection}\\
+Ein Beitrag aus einem Buch, z.\,B. einem Sammelband.
+\item \emph{@inproceedings}\\
+Ein Artikel aus einem Tagungsbericht, der nicht zwangsläufig in einem Verlag erschienen ist.
+\item \emph{@manual}\\
+Eine Dokumentation oder ein Handbuch.
+\item \emph{@mastersthesis}\\
+Eine Diplom-/Magisterarbeit.
+\item \emph{@misc}\\
+Dieser Typ kann benutzt werden, wenn nichts anderes passt.
+\item \emph{@phdthesis}\\
+Eine (unveröffentlichte) Dissertation.
+\item \emph{@proceedings}\\
+Ein Tagungsbericht.
+\item \emph{@techreport}\\
+Von einer Universität oder Institution (normalerweise in einer Reihe) veröffentlichter Bericht.
+\item \emph{@unpublished}\\
+Ein Dokument mit Autor und Titel, unveröffentlicht.
+\end{itemize}
\subsubsection{\bibtex{}-Felder}
-Es gibt viele unterschiedliche Felder in \bibtex{} und einige zusätzliche Felder, die Sie in \jabref{} einsetzen können.
+Es gibt viele unterschiedliche Felder in \bibtex{} und einige zusätzliche Felder, die Sie in \jabref einsetzen können.
Grundsätzlich können Sie \LaTeX{}-Befehle in Feldern, die Text beinhalten, einsetzen. \bibtex{} wird Ihr Literaturverzeichnis automatisch formatieren und je nach \bibtex{} style (Stildatei .bst) Großbuchstaben verkleinern. Um sicherzustellen, dass Anfangsbuchstaben groß bleiben, müssen Sie die Wörter in geschweifte Klammern einschließen, wie im Wort \{Belgien\}.\footnote{Die meisten deutschen \bibtex{}-Stile behalten die Großbuchstaben ohnehin bei.}
Hinweise zu einigen Feldtypen:
\item \emph{crossref}\\
Der \texttt{key} eines Eintrags, auf den ein Querverweis gesetzt wird. Damit lassen sich beispielsweise die Daten eines Sammelbandes in einem Eintrag für einen Aufsatztitel wiederverwenden, ohne sie bei jedem Aufsatztitel explizit einzutragen. Die Funktionalität von \texttt{crossref} ist jedoch nicht in jedem Fall praktikabel.
\item \emph{edition}\\
- Die Auflage eines Buch, z.\,B. \texttt{Zweite}. Die Ordnungszahl sollte mit einem Großbuchstaben beginnen; sie wird von den Standardstilen gegebenenfalls in Kleinbuchstaben umgewandelt. Manche Stile verlangen hier eine Ziffer.
+ Die Auflage eines Buchs, z.\,B. \texttt{Zweite}. Die Ordnungszahl sollte mit einem Großbuchstaben beginnen; sie wird von den Standardstilen gegebenenfalls in Kleinbuchstaben umgewandelt. Manche Stile verlangen hier eine Ziffer.
\item \emph{editor}\\
Dieses Feld ist analog zu dem \emph{author}-Feld.
Falls zusätzlich ein \texttt{author}-Feld angegeben wird, bezeichnet das \texttt{editor}-Feld den Herausgeber des Buches oder des Sammelbandes, in dem die referenzierte Literatur erschienen ist.
\item \emph{institution}\\
Die fördernde Institutions eines technischen Reports.
\item \emph{journal}\\
- Ein Zeitschriftenname.
-Mit Hilfe von ">Strings"< können Zeitschriftennamen abgekürzt werden. Zum Erstellen eines solchen Strings können Sie den \nameref{StringEditorHelp} benutzen oder die Funktionalität zur \nameref{JournalAbbreviations} %Abkürzung von Zeitschriftentiteln
+ Der Name einer Zeitschrift.
+Mit Hilfe von ">Strings"< können Zeitschriftentitel abgekürzt werden. Zum Erstellen eines solchen Strings können Sie den \nameref{StringEditorHelp} benutzen oder die Funktionalität zur \nameref{JournalAbbreviations} %Abkürzung von Zeitschriftentiteln
verwenden.
\item \emph{key}\\
- Dieses Feld wird zur Sortierung, zur Erstellung von Labels (falls kein \texttt{author} vorhanden ist) und für Querverweise (\texttt{crossref}) verwendet. Verwechseln Sie dieses Feld nicht mit dem \texttt{Bibtexkey}, der für die \texttt{\textbackslash cite}-Kommandos gebraucht wird und am Anfang jedes Eintrags erscheint (im \bibtex{}-Quelltext).
+ Dieses Feld wird zur Sortierung, zur Erstellung von Labels (falls kein \texttt{author} vorhanden ist) und für Querverweise (\texttt{crossref}) verwendet. Verwechseln Sie dieses Feld nicht mit dem \texttt{Bibtexkey}, der für die \texttt{\textbackslash cite}-Kommandos gebraucht wird und am Anfang jedes Eintrags erscheint (im \bibtex{}"=Quelltext).
\item \emph{month}\\
Der Monat, in dem ein Werk veröffentlicht oder geschrieben wurde. Benutzen Sie am besten die englischen Abkürzungen (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec).
\item \emph{note}\\
Die Organisation, die einen Konferenzband fördert.
\item \emph{pages}\\
Die Seitenzahl(en) oder der Seitenzahlbereich, z.\,B. \texttt{42-111} oder \texttt{7,41,73-97} or \texttt{43+} (das \texttt{+} deutet auf folgende Seiten, die nicht einen einfachen Bereich umfassen).
-Ein einfacher Bindestrich (wie in \texttt{7-33}) wird in einen doppelten Bindestrich (\texttt{-{-}}) verwandelt, der in TeX den bis-Strich anzeigt (also 7--33).
+Ein einfacher Bindestrich (wie in \texttt{7-33}) wird in einen doppelten Bindestrich (\texttt{-{-}}) verwandelt, der in der Ausgabe als bis-Strich erscheint (also 7--33).
\item \emph{publisher}\\
Der Name des Verlags.
\item \emph{school}\\
Bibliographie-Stile für \bibtex{} wurden von vielen Leuten entwickelt,
und einige haben weitere Felder erstellt. Es folgt eine kleine Auswahl.
-Feldnamen, die mit einem Stern* versehen sind, werden nicht direkt von \jabref{} unterstützt, können aber eingebunden werden (siehe Abschnitt~\ref{CustomEntriesHelp} \nameref{CustomEntriesHelp}).
+Feldnamen, die mit einem Stern* versehen sind, werden nicht direkt von \jabref unterstützt, können aber eingebunden werden (mehr dazu im Abschnitt \nameref{CustomEntriesHelp}).
\begin{itemize}
\item \emph{affiliation*}\\
Ein Inhaltsverzeichnis.
\item \emph{copyright*}\\
Copyright-Informationen.
+ \item \emph{doi}\\
+ Der \emph{Digital Object Identifier} ist eine permanente Kennung von Dokumenten.
+ \item \emph{eid}\\
+ Der EID \emph{(Electronic identifier)} wird für elektronische Zeitschriften benutzt, die auch im Druck erscheinen. Mit dieser Nummer, die die Seitenzahlen ersetzt, lässt sich der Artikel in der gedruckten Ausgabe finden. Der EID wird manchmal auch \emph{citation number} genannt.
\item \emph{ISBN*}\\
Die Internationale Standardbuchnummer.
\item \emph{ISSN*}\\
Die Internationale Standardseriennummer (für Zeitschriften).
\item \emph{keywords}\\
- Stichworte, können in \jabref{} gut zum Gruppieren verwendet werden.
+ Stichworte~-- sie können in \jabref gut zum Gruppieren verwendet werden.
\item \emph{language*}\\
Die Sprache des Werks.
\item \emph{location*}\\
Der Ort, der mit einem Werk in Verbindung steht, z.\,B. die Stadt, in der eine Konferenz stattgefunden hat.
\item \emph{LCCN*}\\
- Die \emph{Library of Congress Call Number}. Manchmal heißt das Feld auch \texttt{lib-congress}.
+ Die \emph{Library of Congress Call Number}. Das Feld kann auch \texttt{lib-congress} heißen.
\item \emph{mrnumber*}\\
Die \emph{Mathematical Reviews}-Nummer.
\item \emph{price*}\\
\item \emph{size*}\\
Die physische Größe eines Dokuments.
\item \emph{url}\\
- Der \emph{Uniform Resource Locator} (URL, "einheitlicher Quellenanzeiger"), der auf eine Webseite im Internet verweist.
+ Der \emph{Uniform Resource Locator} (URL, ">einheitlicher Quellenanzeiger"<), der auf eine Webseite im Internet verweist.
\item \emph{urldate}\\
Das Datum, an dem eine Webseite zuletzt besucht wurde.
\end{itemize}
\secttoc
\subsection{System-Voraussetzungen}
-
-\jabref{} ist in Java programmiert und somit betriebssystemunabhängig,
+\label{subsec:System-Voraussetzungen}
+\jabref ist in Java programmiert und somit betriebssystemunabhängig,
kann prinzipiell also unter Windows, Mac OS X, Linux und anderen UNIX-Systemen
betrieben werden. Voraussetzung ist allerdings, dass die \emph{Java
-Virtual Machine} mindestens in der Version~1.4.2 installiert ist.
+Virtual Machine} mindestens in der Version~1.5 installiert ist.\footnote{Bis zur Version 2.2 von \jabref reichte Java~1.4.2 aus.}
Sie ist kostenlos und kann unter \url{http://java.sun.com/} heruntergeladen
werden. Im Normalfall sollte das \emph{Java Runtime Environment} (JRE) ausreichen;
-nur wenn Sie \jabref{} kompilieren möchten, benötigen Sie das \emph{Java
+nur wenn Sie \jabref kompilieren möchten, benötigen Sie das \emph{Java
Development Kit} (JDK).
\subsubsection{Installer (msi)}
-\jabref{} gibt es im Windows Installer-Format (\texttt{.msi}). Ein
-Doppelklick auf die MSI-Datei installiert \jabref{} und fügt dem
+\jabref gibt es im Windows Installer-Format (\texttt{.msi}). Ein
+Doppelklick auf die MSI-Datei installiert \jabref und fügt dem
Startmenü eine Verknüpfung hinzu. Falls Java nicht installiert ist,
wird eine Warnmeldung ausgegeben.%
\footnote{Die Windows-Installation wurde von Dale Visser erstellt, der dazu
\subsubsection{Batch-Datei (jar)}
-
+\label{subsub:jar}
Wenn Sie die ausführbare jar-Datei (\texttt{.jar}) heruntergeladen
haben, probieren Sie zunächst, ob ein Doppelklick darauf das Programm
startet~-- dies funktioniert zumindest auf einigen Systemen. Falls
-\jabref{} nicht direkt startet (Windows also nicht weiß, was es mit
+\jabref nicht direkt startet (Windows also nicht weiß, was es mit
einer jar-Datei anfangen soll), fahren Sie folgendermaßen fort:
Erstellen Sie in dem Ordner, in dem Sie die Datei \emph{JabRef.jar}
\begin{lstlisting}
start javaw -jar JabRef.jar
\end{lstlisting}
-Mit einem Doppelklick auf die Batch-Datei starten Sie \jabref{}.
+Mit einem Doppelklick auf die Batch-Datei starten Sie \jabref.
-\subsection{Starten von der Kommandozeile}
+\subsection{Starten von der Kommandozeile}\label{subsec:Starten-Kommandozeile}
\begin{enumerate}
\item mit dem \emph{Java Runtime Environment}:
-
-
-\texttt{jre -new -jar <Pfad zur jar-Datei>}
-
+\begin{lstlisting}
+jre -new -jar <Pfad zur jar-Datei>
+\end{lstlisting}
oder
-
-\texttt{jrew -new -jar <Pfad zur jar-Datei>}
-
+\begin{lstlisting}
+jrew -new -jar <Pfad zur jar-Datei>
+\end{lstlisting}
\item mit dem \emph{Java Development Kit}:
-
-
-\texttt{java -jar <Pfad zur jar-Datei>}
-
+\begin{lstlisting}
+java -jar <Pfad zur jar-Datei>
+\end{lstlisting}
\end{enumerate}
-Es wird empfohlen, \jabref{} mit dem Java 5.0 JRE zu benutzen. Falls
-Sie dies tun, sollten Sie die Option \texttt{-Dswing.aatext=true}
-vor der Option \texttt{-jar} einfügen, um das Benutzen von Anti-Alias-Schriften
+Es wird empfohlen, \jabref mit Java 1.5 zu benutzen und die Option \lstinline{-Dswing.aatext=true}
+vor der Option \lstinline{-jar} einfügen, um das Benutzen von Anti-Alias-Schriften
im Programm zu ermöglichen.
-Die jar-Datei, die \jabref{} enthält, kann entpackt werden mit den
-Kommandos \texttt{jar xf <Pfad zur jar-Datei>} bzw. \texttt{jar xf
-<Pfad zur jar-Datei> <Liste der Dateien, die entpackt werden sollen>}.
+Die jar-Datei, die \jabref enthält, kann entpackt werden mit den
+Kommandos
+\begin{lstlisting}
+jar xf <Pfad zur jar-Datei>
+\end{lstlisting}
+bzw.
+\begin{lstlisting}
+jar xf <Pfad zur jar-Datei> <Liste der Dateien, die entpackt werden sollen>
+\end{lstlisting}
Das Entpacken der jar-Datei ist nicht notwendig, um das Programm zu
starten!
-Weitere Hinweise zur Installation finden Sie auf der \jabref{}-Homepage
-unter \url{http://jabref.sourceforge.net} und in der Datei INSTALL
-(zum Kompilieren aus den \emph{sourcen}).
+Weitere Hinweise zur Installation finden Sie in der Datei INSTALL
+(zum Kompilieren aus den \emph{sourcen}) und auf der \href{http://jabref.sourceforge.net}{\jabref-Homepage}.
\clearpage
\secttoc
\bigskip
-\noindent \label{JabRefHelp}\jabref{} ist ein Programm zur Verwaltung von
+\noindent \label{JabRefHelp}\jabref ist ein Programm zur Verwaltung von
\bibtex{}-Dateien. Es benutzt kein eigenes Dateiformat, d.\,h. dass
Sie Ihre Dateien direkt im \bibtex{}-Format (Dateiendung \texttt{.bib})
laden und speichern. Sie können aber auch bibliographische Datenbanken
-in anderen Formaten in \jabref{} importieren.
+anderer Formate in \jabref importieren.
-\jabref{} unterstützt Sortier- und Suchfunktionen, um einen Überblick
+\jabref unterstützt Sortier- und Suchfunktionen, um einen Überblick
über den Inhalt Ihrer Datei zu bekommen. Sie können der Datei ganz
einfach neue Einträge hinzufügen, ohne sich daran erinnern zu müssen,
-welche Informationen benötigt werden. Außerdem kann \jabref{} \bibtex{}-Keys
-automatisch generieren. \jabref{} ist sehr nützlich, wenn Sie \bibtex{}
-oder CiteMaker benutzen, kann aber auch für diejenigen sinnvoll sein,
+welche Informationen benötigt werden. Außerdem kann \jabref \bibtex{}-Keys
+automatisch generieren. \jabref ist sehr nützlich, wenn Sie \bibtex{}
+oder CiteMaker verwenden, kann aber auch für diejenigen sinnvoll sein,
die andere Bibliographie-Systeme benutzen oder schlicht und einfach
ihre Literaturquellen organisieren wollen.
\subsection{Das Hauptfenster}
-\begin{quote}
\tip[]{Die meisten Menüfunktionen, auf die im Folgenden hingewiesen
wird, haben Tastenkürzel, und viele Funktionen können über die Werkzeugleiste
aufgerufen werden.}
-\end{quote}
\label{BaseFrameHelp}Im Hauptfenster, in dem Sie mit Ihrer Datei
arbeiten, befindet sich unter der Menüleiste und der Werkzeugleiste
die Tableiste mit Tabs (Reitern) für jede Ihrer geöffneten Dateien.
Mit einem Doppelklick auf eine Tabellenzeile können Sie den Inhalt bearbeiten (der \nameref{EntryEditorHelp} wird geöffnet). Sie können mit den Pfeiltasten innerhalb der Tabelle navigieren. Wenn Sie einen Buchstaben drücken, springen Sie zu dem ersten Eintrag, der mit diesem Buchstaben beginnt (abhängig von der Spalte, nach der Sie die Tabelle sortiert haben).
-Die Sortierung der Tabelle erfolgt nach einem Feld Ihrer Wahl. Sie können das Standardverhalten unter \menu{Optionen \msep{} Einstellungen \msep{} Tabellenansicht} angeben. Um die Sortierreihenfolge schnell zu ändern, klicken Sie einfach auf die Kopfzeile einer Spalte; damit haben Sie das primäre Sortierkriterium definiert. Klicken Sie erneut auf den Spaltenkopf, um die Sortierrichtung umzukehren. Ein weiterer Klick sorgt dafür, dass die Spalte nicht mehr zur Sortierung herangezogen wird. Halten Sie die CTRL-Taste beim Klicken auf einen Spaltenknopf gedrückt, um eine zweite Spalte als sekundäres Sortierkriterium festzulegen. Sie können beliebig viele Spalten zur Sortierung heranziehen.
+Die Sortierung der Tabelle erfolgt nach einem Feld Ihrer Wahl. Sie können das Standardverhalten unter \menu{Optionen \msep{} Einstellungen \msep{} Tabellenansicht} angeben. Um die Sortierreihenfolge schnell zu ändern, klicken Sie einfach auf die Kopfzeile einer Spalte; damit haben Sie das primäre Sortierkriterium definiert. Klicken Sie erneut auf den Spaltenkopf, um die Sortierrichtung umzukehren. Ein weiterer Klick sorgt dafür, dass die Spalte nicht mehr zur Sortierung herangezogen wird. Halten Sie die STRG-Taste beim Klicken auf einen Spaltenknopf gedrückt, um eine zweite Spalte als sekundäres Sortierkriterium festzulegen. Sie können beliebig viele Spalten zur Sortierung heranziehen.
Welche Felder (Spalten) in der Tabelle angezeigt werden sollen, können
Sie im \menu{Einstellungs}-Dialog auswählen. Auch die Breite der
\item Eine \colorbox{green}{grüne} Zelle kennzeichnet ein optionales Feld.
\item Eine farblose (weiße) Zelle kennzeichnet ein Feld, das von \bibtex{}
für diesen Eintragstyp nicht benutzt wird. Das Feld kann selbstverständlich
-in \jabref{} bearbeitet werden.
+in \jabref bearbeitet werden.
\end{itemize}
\subsubsection{Einen neuen Eintrag hinzufügen}
Um den \nameref{EntryEditorHelp} zur Bearbeitung
eines existierenden Eintrags zu öffnen, klicken Sie einfach doppelt
-auf die linke Spalte der entsprechenden Zeile oder markieren den Eintrag
-und drücken auf ENTER. Falls \menu{Bearbeiten in der Tabelle zulassen}
-nicht ausgewählt ist (im Dialog \menu{Optionen} \msep{} \menu{Einstellungen}
-\msep{} \menu{Allgemein}), öffnet ein Doppelklick irgendwo in der
-zugehörigen Zeile den Eintrags-Editor.
+auf die entsprechende Zeile oder markieren den Eintrag
+und drücken auf ENTER.
\subsubsection{Einen \bibtex{}-String in einem Feld verwenden}
-In \jabref{} schreiben Sie den Inhalt aller Felder so, wie Sie es
+In \jabref schreiben Sie den Inhalt aller Felder so, wie Sie es
in einem Texteditor machen würden, mit einer Ausnahme: um einen String
(eine Art Abkürzung) zu verwenden, umschließen Sie den Namen des Strings
mit je einem \#, z.\,B.
\begin{lstlisting}
-\#jan\# 1997
+#jan# 1997
\end{lstlisting}
was interpretiert wird als String mit dem Namen \texttt{jan} gefolgt
von \texttt{1997}. Vergleichen Sie dazu auch die Hinweise zum \nameref{StringEditorHelp}.
-\subsection{Eintrags-Editor}
+\subsection{Eintrags"=Editor}
\label{EntryEditorHelp}
\begin{quote}
-\emph{Geöffnet wird der Eintrags-Editor im Hauptfenster durch einen
-Doppelklick auf die linke Spalte eines Eintrags (bzw. irgendwo auf
-die Zeile des Eintrags, wenn \menu{Bearbeiten in der Tabelle zulassen}
-im Dialog \menu{Optionen}} \msep{} \emph{\menu{Einstellungen}}
-\msep{} \emph{\menu{Allgemein} nicht ausgewählt ist), oder durch
+\emph{Geöffnet wird der Eintrags"=Editor im Hauptfenster durch einen
+Doppelklick auf die linke Spalte eines Eintrags oder durch
Drücken auf ENTER. Der Eintrags-Editor wird geschlossen, indem man
auf ESC drückt.}
\end{quote}
Sie können die Felder, die für die einzelnen Eintragstypen als benötigt
und optional angesehen werden, und auch die Allgemeinen Felder anpassen.
-Schlagen Sie unter Abschnitt~\ref{CustomEntriesHelp} nach, wenn
-Sie mehr Informationen darüber erhalten möchten.
-
+Näheres dazu erfahren Sie im Abschnitt \nameref{CustomEntriesHelp}.
\subsubsection{Die Panels des Eintrags-Editors}
Der Eintrags-Editor besteht in der Standardeinstellung aus fünf Panels:
\emph{Benötigte Felder}, \emph{Optionale Felder}, \emph{General},
-\emph{Abstract} und \emph{\bibtex{}} \emph{Quelltext}, wobei \emph{General}
+\emph{Abstract} und \emph{\bibtex{}"=Quelltext}, wobei \emph{General}
und \emph{Abstract} vom Benutzer angepasst werden können (siehe dazu
Abschnitt~\ref{GeneralFields}). In den ersten drei Panels können
Sie mit TAB und SHIFT-TAB zwischen den einzelnen Feldern hin- und
zwischen den Panels navigieren:
\begin{itemize}
-\item CTRL-TAB oder CTRL-+ wechselt zum Panel rechts vom aktuellen Panel,
-\item CTRL-SHIFT-TAB oder CTRL-$-$ (MINUS) wechselt dementsprechend zum
+\item STRG-TAB oder STRG-+ wechselt zum Panel rechts vom aktuellen Panel,
+\item STRG-SHIFT-TAB oder STRG-{-} (MINUS) wechselt dementsprechend zum
Panel links vom aktuellen Panel.
\end{itemize}
Außerdem können Sie zum nächsten oder vorherigen Eintrag wechseln,
indem Sie >>STRG-SHIFT-$\downarrow$<< bzw. >>STRG-SHIFT-$\uparrow$<<
oder die Pfeil-Buttons in der linken Toolbar drücken.
-Das Panel \emph{\bibtex{} Quelltext} zeigt, wie der Eintrag aussehen
+Das Panel \emph{\bibtex{}"=Quelltext} zeigt, wie der Eintrag aussehen
wird, wenn die Datei im \texttt{bib}-Format gespeichert wird. Wenn
-Sie wollen, können Sie den \bibtex{} Quelltext direkt bearbeiten.
+Sie wollen, können Sie den \bibtex{}"=Quelltext direkt bearbeiten.
Sobald Sie zu einem anderen Panel wechseln, STRG-S drücken oder den
-Eintrags-Editor schließen, wird \jabref{} versuchen, den Inhalt des
-Quelltext-Panels zu analysieren. Falls dabei Probleme auftreten, werden
+Eintrags-Editor schließen, wird \jabref versuchen, den Inhalt des
+Quelltext"=Panels zu analysieren. Falls dabei Probleme auftreten, werden
Sie benachrichtigt und erhalten die Möglichkeit, den Eintrag noch
-einmal zu überarbeiten oder den vorherigen Inhalt wiederherzustellen.
+einmal zu überarbeiten oder den vorherigen Inhalt wiederherzustellen. (Nähere
+Einzelheiten dazu finden Sie im Abschnitt \nameref{subsub:feldkonsistenz}.)
Wenn in den \menu{Einstellungen} (unter \menu{Allgemein}) die Option
-\menu{Quelltext standardmäßig anzeigen} gewählt wurde, wird das Quelltext-Panel
+\menu{Quelltext standardmäßig anzeigen} gewählt wurde, wird das Quelltext"=Panel
beim Öffnen des Eintrags-Editors als erstes angezeigt. Wenn Sie lieber
den Quelltext bearbeiten als die anderen Panels zu benutzen, sollten
Sie diese Option wählen.
-\tip{Wenn Ihre Datei Felder enthält, die \jabref{} nicht kennt,
-erscheinen diese im Quelltext-Panel.}
+\tip{Wenn Ihre Datei Felder enthält, die \jabref nicht kennt,
+erscheinen diese im Quelltext"=Panel.}
\tip[Und noch ein Tipp: ]{Die \emph{PDF-} und \emph{URL}-Felder unterstützen
Drag \& Drop. Sie können z.\,B. ein URL aus Ihrem Browser dort einfügen.}
\subsubsection{Überprüfung der Feldkonsistenz}
-
-Wenn der Inhalt eines Feldes geändert wird, überprüft \jabref{},
+\label{subsub:feldkonsistenz}
+Wenn der Inhalt eines Feldes geändert wird, überprüft \jabref,
ob der neue Inhalt akzeptiert werden kann. Bei Feldern, die von \bibtex{}
genutzt werden, wird der Inhalt zum einen auf die richtige Klammerung
mit geschweiften Klammern, aber auch auf die Benutzung des Zeichens
\texttt{\#} hin überprüft. Das >>hash<<-Symbol (im Deutschen oft
>>Doppelkreuz<< oder >>Raute<< genannt) darf \emph{nur} paarweise
benutzt werden, um damit den Namen eines \bibtex{}-Strings einzuschließen.
-Beachten Sie, dass \jabref{} nicht überprüft, ob der angeführte String
-tatsächlich vorhanden ist (der \bibtex{}-Stil, den Sie benutzen, kann
-eine beliebige Anzahl von Strings definieren, die \jabref{} nicht
-kennt).
+Beachten Sie, dass \jabref nicht überprüft, ob der angeführte String
+tatsächlich vorhanden ist, da der \bibtex{}-Stil, den Sie benutzen,
+eine beliebige Anzahl von Strings definieren kann, die \jabref nicht
+kennt.
Falls die Inhalte nicht akzeptabel sind, wird das Feld mit roter Farbe
hinterlegt, was auf einen Fehler hindeutet. In diesem Fall werden
\subsection{Integritätsprüfung}
\begin{quote}
-\emph{Erreichbar über das Menü \menu{Extras}} \msep{} \emph{\menu{Überprüfung der Integrität}.}
+\emph{Erreichbar über das Menü \menu{Extras \msep{} Datenbank durchsuchen
+\msep{} Überprüfung der Integrität}.}
\end{quote}
-Mit dieser Funktion überprüft \jabref{} alle Einträge auf deren Gültigkeit
+Mit dieser Funktion überprüft \jabref alle Einträge auf deren Gültigkeit
und versucht Fehler aufzudecken. Mit dem \menu{Überprüfen}-Button
kann der Vorgang gestartet werden. Es wird eine Liste mit Hinweisen
(Info-Icon) und möglichen Fehlern (Ausrufezeichen-Icon) sowie dem
beziehen kann, braucht man einen eindeutigen \bibtex{}-Key. Eindeutig
heißt, dass er nur einmal vergeben sein darf. Es wird nach Groß"~
und Kleinschreibung unterschieden, \texttt{Yared1998} ist also nicht
-identisch mit \texttt{yared1998}. \jabref{} bietet einige Möglichkeiten,
+identisch mit \texttt{yared1998}. \jabref bietet einige Möglichkeiten,
um auch bei größeren Datenbanken den Überblick über die \bibtex{}-Keys
nicht zu verlieren.
Falls Sie sich nicht im Eintrags-Editor befinden, werden mit Hilfe
von STRG-G oder dem Zauberstab-Button aus der Menüleiste für alle
Einträge der Datei \bibtex{}-Keys erzeugt. Falls dabei Keys überschrieben
-werden, gibt \jabref{} eine Warnmeldung aus.
+werden, gibt \jabref eine Warnmeldung aus.
-Wie die \bibtex{}-Keys aussehen, die \jabref{} automatisch generiert,
-und wie Sie dieses Aussehen verändern können, erfahren Sie unter Abschnitt~\ref{LabelPatterns} \nameref{LabelPatterns}.
+Wie die \bibtex{}-Keys aussehen, die \jabref automatisch generiert,
+und wie Sie dieses Aussehen verändern können, erfahren Sie im Abschnitt~\ref{LabelPatterns} \nameref{LabelPatterns}.
\subsection{Suchfunktionen}
\begin{quote}
\emph{STRG-F öffnet oder aktiviert den Suchdialog.
Drückt man mehrmals auf STRG-F, so werden die verschiedenen Suchmodi
-ausgewählt. Mit STRG-SHIFT-F öffnet oder aktiviert man den Suchdialog
+ausgewählt. STRG-SHIFT-F öffnet oder aktiviert den Suchdialog
und wählt gleichzeitig die direkte Suche aus. Bei der direkten Suche
springt man mit STRG-F oder STRG-SHIFT-F zum nächsten Treffer.}
\end{quote}
\subsubsection{Direkte Suche}
-Bei der direkten Suche sucht \jabref{} unmittelbar, wenn Sie einen
+Bei der direkten Suche sucht \jabref unmittelbar, wenn Sie einen
Buchstaben eingeben. Die Statuszeile informiert Sie über den Sucherfolg.
Mit STRG-F oder STRG-SHIFT-F wird zum nächsten Vorkommen des aktuellen
Suchbegriffs gesprungen. Falls es keine weiteren Vorkommen gibt, informiert
\subsubsection{Normale Suche}
-Hierbei sucht das Programm nach allen Vorkommen der Wörter ihres Suchausdrucks, sobald Sie ENTER drücken. Nur Einträge, die alle Wörter enthalten, gelten als Treffer. Um nach festen Ausdrücken zu suchen, müssen Sie die Wörter in doppelte Anführungszeichen einfassen. Zum Beispiel findet die Suchanfrage \texttt{progress \textquotedbl marine acquaculture\textquotedbl} Einträge, die sowohl das wort ">progress"< als auch den Ausdruck ">marine acquaculture"< aufweisen. Alle Einträge, die keine Treffer sind, werden entweder ausgeblendet, so dass nur die Treffer sichtbar sind (Option \menu{Filter}), oder sie werden grau dargestellt, während die Treffer oben angezeigt werden (Option \menu{Oben einsortieren}). Um die Trefferanzeige zu beenden, drücken Sie ESC oder klicken auf die Schaltfläche \menu{Zurücksetzen} im Suchen-Dialog.
+Hierbei sucht das Programm nach allen Vorkommen der Wörter ihres Suchausdrucks, sobald Sie ENTER drücken. Nur Einträge, die alle Wörter enthalten, gelten als Treffer. Um nach festen Ausdrücken zu suchen, müssen Sie die Wörter in doppelte Anführungszeichen einfassen. Zum Beispiel findet die Suchanfrage \texttt{progress \textquotedbl marine acquaculture\textquotedbl} Einträge, die sowohl das wort ">progress"< als auch den Ausdruck ">marine acquaculture"< aufweisen. Alle Einträge, die keine Treffer sind, werden entweder ausgeblendet, so dass nur die Treffer sichtbar sind (Suchmodus \menu{Filter}), oder sie werden grau dargestellt, während die Treffer oben angezeigt werden (Suchmodus \menu{Oben einsortieren}). Um die Trefferanzeige zu beenden, drücken Sie ESC oder klicken auf die Schaltfläche \menu{Zurücksetzen} im Suchen-Dialog.
\subsubsection{Suchoptionen}
ohne die bisherigen Ergebnisse zu >>verlieren<<.}
\subsubsection{Feldbezeichner und logische Operatoren}
+\label{SearchHelp_advanced}
-\label{SearchHelp_advanced}Um nur einige bestimmte Felder zu durchsuchen
+\tip[Achtung! ]{Die folgenden Hinweise gelten nicht für die direkte Suche.}
+Um nur einige bestimmte Felder zu durchsuchen
und\slash{}oder logische Operatoren im Suchbegriff zu benutzen, wird
eine spezielle Syntax zur Verfügung gestellt. Um beispielsweise nach
Einträgen mit dem Autor >>Miller<< zu suchen, geben Sie
\begin{lstlisting}
author = miller
\end{lstlisting}
-in das Suchfeld ein. \emph{(Achtung! Das funktioniert nicht bei der
-direkten Suche!)} Falls der Suchbegriff Leerzeichen enthält, schließen
+in das Suchfeld ein. Falls der Suchbegriff Leerzeichen enthält, schließen
Sie ihn in Anführungszeichen ein. Benutzen Sie \emph{nie} Leerzeichen
in dem Feldbezeichner. Mehrere Feldbezeichner werden durch >>|<<
voneinander getrennt. Um beispielsweise nach Einträgen über Karl den
-Großen zu suchen, geben Sie folgendes ein:
+Großen zu suchen, geben Sie Folgendes ein:
\begin{lstlisting}
title|keywords = "Karl der Große"
\begin{enumerate}
\item Während eine Datei auf einer Festplatte immer in genau einem Ordner
-abgelegt ist, kann ein Literatureintrag in \jabref{} mehreren Gruppen
+abgelegt ist, kann ein Literatureintrag in \jabref mehreren Gruppen
angehören.
\item Gruppen benutzen bestimmte Kriterien, um ihren Inhalt dynamisch zu
bestimmen. Neue Einträge, die den Kriterien einer Gruppe entsprechen,
Gruppendefinitionen sind dateispezifisch; sie werden als \texttt{@COMMENT}-Block
in der \texttt{bib}-Datei gespeichert und von allen Benutzern gemeinsam
-benutzt. (Künftige Versionen von \jabref{} werden möglicherweise
+benutzt. (Künftige Versionen von \jabref werden möglicherweise
benutzerabhängige Gruppen unterstützen.)
\item [\ldots]\textbf{sehen, welche Gruppen sich überschneiden}
-Mit \jabref{} können Sie ganz einfach herausfinden, welche Gruppen
+Mit \jabref können Sie ganz einfach herausfinden, welche Gruppen
sich mit den aktuell ausgewählten Gruppen überschneiden (d.\,h. welche
Gruppen zumindest einen Eintrag enthalten, der auch in der aktuell
ausgewählten Gruppe ist). Klicken Sie auf \menu{Einstellungen} und
\subsubsection{Arten von Gruppen}
-In \jabrefversion{} gibt es vier verschiedene Arten von Gruppen:
+In \jabref gibt es vier verschiedene Arten von Gruppen:
\begin{enumerate}
\item Die Gruppe \emph{Alle Einträge}, die~-- wie der Name vermuten lässt~--
die sich auf etwas Elektrisches beziehen. Benutzt man das Feld \emph{author},
kann man sich Einträge eines bestimmten Autors gruppieren lassen,
usw. Die Suche ist als reine Textsuche oder mit einem regulären Ausdruck
-möglich. Im ersten Fall erlaubt \jabref{} das manuelle Zuweisen zu
-und Entfernen aus einer Gruppe; dazu fügt \jabref{} den Suchausdruck
+möglich. Im ersten Fall erlaubt \jabref das manuelle Zuweisen zu
+und Entfernen aus einer Gruppe; dazu fügt \jabref den Suchausdruck
dem entsprechenden Feld zu bzw. entfernt ihn daraus. Das macht nur
für das Feld \emph{keywords} oder für selbstdefinierte Felder Sinn,
aber offensichtlich nicht für Felder wie \emph{author} oder \emph{year}.
im Gruppenbaum. Ist eine Gruppe ausgewählt, wird nur der Inhalt dieser
Gruppe angezeigt. Es ist jedoch~-- besonders beim Verwenden dynamischer
Gruppen~-- oft nützlich, eine Untergruppe zu erstellen, die \emph{ihre
-Obergruppe verfeinert}. Wenn diese Untergruppe ausgewählt wird, werden alle Einträge dieser
+Obergruppe einbezieht}. Wenn diese Untergruppe ausgewählt wird, werden alle Einträge dieser
Gruppe und ihrer Obergruppe angezeigt. Erstellen Sie z.\,B. eine
Obergrupe, die Einträge mit dem Stichwort \emph{Verteilung} enthält,
sowie eine einbeziehende Untergruppe mit Einträgen, die das Stichwort
alle Einträge angezeigt, die beiden Bedingungen entsprechen, also
alle, die mit Gauß'scher Verteilung zu tun haben. Indem Sie nun eine
weitere Untergruppe für \emph{Laplace} anlegen, die dieselbe Obergruppe
-verfeinert, können Sie die Gruppierung einfach erweitern. Im Gruppenbaum
+einbezieht, können Sie die Gruppierung einfach erweitern. Im Gruppenbaum
haben solche Gruppen, die ihre Obergruppen einbeziehen, ein spezielles
Icon. (Dieses Verhalten kann in den Einstellungen abgestellt werden.)
Das logische Gegenstück zu einer solchen einbeziehenden Untergruppe
-ist eine Gruppe, die \emph{ihre Untergruppen berücksichtigt}.%
-\footnote{Im Englischen \emph{including (super-)groups}.%
-} Wird sie ausgewählt, werden nicht nur die Einträge dieser Gruppe,
+ist eine Gruppe, die \emph{ihre Untergruppen berücksichtigt}.
+Wird sie ausgewählt, werden nicht nur die Einträge dieser Gruppe,
sondern auch diejenigen aller Untergruppen angezeigt. Im Gruppenbaum
hat auch diese Art von Gruppen ein spezielles Icon. (Dieses Verhalten
kann in den Einstellungen abgestellt werden.)
dem automatischen Erstellen von Gruppen basierend auf dem Feld \emph{keywords}
können Sie also ohne großen Aufwand ein Grundgerüst von Gruppen anlegen.
-Sie können auch Buchstaben angeben, die ignoriert werden sollen, z.\,B.
+Sie können auch Zeichen angeben, die ignoriert werden sollen, z.\,B.
Kommas, die zwischen einzelnen Stichworten stehen. Diese werden als
Worttrenner behandelt und nicht als Teile des Wortes selbst. Dieser
Schritt ist wichtig, damit kombinierte Stichworte wie etwa \emph{Gauß'sche
Der \menu{Aktualisieren}-Button in der Gruppenansicht aktualisiert
die Tabelle in Bezug auf die aktuell ausgewählten Gruppen. Normalerweise
erfolgt dies automatisch, aber in seltenen Fällen (z.\,B. nach einem
-Rückgängig- oder Wiederholen-Vorgang, der mit Gruppen zusammenhängt)
+Rückgängig- oder Wiederholen"=Vorgang, der mit Gruppen zusammenhängt)
ist ein händisches Aktualisieren nötig.
\paragraph{Einbeziehende Unter- und Obergruppen mischen}
-Wenn eine einbeziehende Gruppe die Untergruppe von einer Gruppe ist,
-die ihre Untergruppen berücksichtigt~-- also sozusagen die Geschwister
-der einbeziehenden Gruppe~--, dann werden diese Geschwister ignoriert,
+Ist eine einbeziehende Gruppe die Untergruppe von einer Gruppe,
+die ihre Untergruppen berücksichtigt~-- hat sie also sozusagen Geschwister~--,
+dann werden diese Geschwister ignoriert,
sobald die einbeziehende Gruppe ausgewählt wird.
\subsection{Markieren von Einträgen}
+\label{MarkingHelp}
\begin{quote}
-\label{MarkingHelp}\emph{Mit der Tastenkombination STRG-M können
+\emph{Mit der Tastenkombination STRG-M können
Sie Einträge markieren und diese Markierung mit STRG-SHIFT-M wieder
aufheben. Diese Aktionen sind auch im Menü \menu{Bearbeiten} zu finden.}
\end{quote}
einmal genauer ansehen müssen.
-\subsection{String-Editor}
+\subsection{String"=Editor}
\label{StringEditorHelp}
\begin{quote}
es ist sichergestellt, dass der Name jedesmal in identischer Schreibweise
ausgegeben wird.
-Der Verweis auf einen String kann an jeder Stelle in einem beliebigen
-Feld erscheinen, wobei der Name des Strings immer von einem Paar \texttt{\#}-Zeichen
-eingeschlossen werden muss. Diese Syntax gilt nur für \jabref{} und
+Der Verweis auf einen String kann an jeder Stelle eines Feldes erscheinen,
+wobei der Name des Strings immer von einem Paar \texttt{\#}-Zeichen
+eingeschlossen werden muss. Diese Syntax gilt nur für \jabref und
weicht ein wenig von der \bibtex{}-Syntax ab, die erzeugt wird, wenn
-Sie Ihre Datei speichern.
+Sie Ihre Datei speichern. Strings können für alle Standard-\bibtex{}-Felder verwendet werden.
+Unter \menu{Optionen \msep{} Einstellungen \msep{} Allgemein} können Sie im Bereich \menu{Datei} festlegen, ob Strings auch in Nicht-Standard-Feldern benutzt werden dürfen. In diesem Fall können Sie Felder bestimmen, die von der Auflösung der Strings ausgenommen werden; hierbei wird empfohlen, das Feld \texttt{url} und andere Felder anzugeben, die das Zeichen \texttt{\#} enthalten können und die von \bibtex\slash\LaTeX{} verarbeitet werden können.
In derselben Weise kann man auch im Inhalt eines Strings auf einen
anderen String verweisen, vorausgesetzt, dass der String, auf den
verwiesen wird, bereits \emph{vorher} definiert ist.
Während die Reihenfolge der Strings in Ihrer \bibtex{}-Datei in einigen
-Fällen wichtig ist, brauchen Sie sich bei der Benutzung von \jabref{}
+Fällen wichtig ist, brauchen Sie sich bei der Benutzung von \jabref
darüber keine Gedanken zu machen. Die Strings werden in alphabetischer
Reihenfolge im String-Editor aufgelistet und in derselben Reihenfolge
gespeichert, außer wenn eine andere Reihenfolge von \bibtex{} verlangt
\begin{quote}
\emph{Diese Funktion kann unter \menu{Optionen \msep{} Abkürzungen der Zeitschriften verwalten} eingestellt werden.}
\end{quote}
-\jabref{} kann automatisch zwischen Zeitschriftentiteln in abgekürzter und ausführlicher Form hin- und herschalten, sofern die Titel in einer Ihrer Zeitschriftenlisten enthalten ist. Sie können mehrere dieser Listen benutzen, die Sie als externe Textdateien anlegen.
+\jabref kann automatisch zwischen Zeitschriftentiteln in abgekürzter und ausführlicher Form hin- und herschalten, sofern die Titel in einer Ihrer Zeitschriftenlisten enthalten ist. Sie können mehrere dieser Listen benutzen, die Sie als externe Textdateien anlegen.
\subsubsection{Benutzungshinweise}
\item \caps{ISO}-Abkürzung, z.\,B. ">Aquacult. Eng."<
\item \caps{MEDLINE}-Abkürzung, z.\,B. ">Aquacult Eng"<
\end{itemize}
-Falls der Zeitschriftenname sich nicht in Ihren Zeitschriftenlisten findet, wird das Feld nicht verändert.
+Falls der Zeitschriftentitel sich nicht in Ihren Zeitschriftenlisten findet, wird das Feld nicht verändert.
-Um die Zeitschriftennamen mehrerer Einträge auf einmal zu konvertieren, können Sie eine beliebige Anzahl von Einträgen auswählen und im Menü \menu{Extras} einen der Einträge \menu{Zeitschriftennamen abkürzen (ISO)}, \menu{Zeitschriftennamen abkürzen (MEDLINE)} und \menu{Abkürzung der Zeitschriften aufheben} wählen.
-Diese drei Aktionen sorgen dafür, dass bei allen ausgewählten Einträgen die Zeitschriftennamen, die in den Zeitschriftenlisten gefunden werden konnten, abgekürzt oder komplett ausgeschrieben werden.
+Um die Zeitschriftentitel mehrerer Einträge auf einmal zu konvertieren, können Sie eine beliebige Anzahl von Einträgen auswählen und im Menü \menu{Extras} einen der Einträge \menu{Zeitschriftentitel abkürzen (ISO)}, \menu{Zeitschriftentitel abkürzen (MEDLINE)} und \menu{Abkürzung der Zeitschriften aufheben} wählen.
+Diese drei Aktionen sorgen dafür, dass bei allen ausgewählten Einträgen die Zeitschriftentitel, die in den Zeitschriftenlisten gefunden werden konnten, abgekürzt oder komplett ausgeschrieben werden.
\subsubsection{Zeitschriftenlisten verwalten}
-Sie können mehrere Zeitschriftenlisten als externe Textdateien benutzen, die mit \jabref{} verlinkt sind. Die primäre Liste kann in \jabref{} selbst verwaltet werden.
+Sie können mehrere Zeitschriftenlisten als externe Textdateien benutzen, die mit \jabref verlinkt sind. Die primäre Liste kann in \jabref selbst verwaltet werden.
\paragraph{Ihre persönliche Zeitschriften-Abkürzungsliste}
-Ihre persönliche Liste verwalten Sie im oberen Teil des \menu{Abkürzung der Zeitschriftennamen}-Dialogs.
+Ihre persönliche Liste verwalten Sie im oberen Teil des Dialogs \menu{Abkürzung der Zeitschriftentitel}.
Wählen Sie \menu{Neue Datei} und geben einen Dateinamen ein oder klicken auf den \menu{Durchsuchen}-Button. Wenn Sie bereits eine Datei haben, die Sie als Grundlage nehmen wollen, wählen Sie stattdessen \menu{Bestehende Datei} und benutzen den \menu{Durchsuchen}-Button zum Auswählen dieser Datei. Die Tabelle zeigt dann den Inhalt der Liste, die Sie ausgewählt haben.
-Sie können mit Hilfe der \menu{+} und \menu{--} Buttons an der rechten Seite Einträge hinzufügen oder entfernen. Für jeden Eintrag müssen Sie den vollständigen Zeitschriftennamen und die ISO-Abkürzung angeben (z.\,B. ">Aquacultural Engineering"< und ">Aquacult. Eng."<). Mit einem Doppelklick auf die Tabellenzeile können Sie die Einträge bearbeiten.
+Sie können mit Hilfe der \menu{+} und \menu{--} Buttons an der rechten Seite Einträge hinzufügen oder entfernen. Für jeden Eintrag müssen Sie den vollständigen Zeitschriftentitel und die ISO-Abkürzung angeben (z.\,B. ">Aquacultural Engineering"< und ">Aquacult. Eng."<). Mit einem Doppelklick auf die Tabellenzeile können Sie die Einträge bearbeiten.
-Sobald Sie auf \menu{OK} klicken (oder wenn Sie eine bestehende Datei ausgewält haben), enthält die Tabelle mindestens eine Zeile. Der Tabelleninhalt wird in die ausgewählte Datei geschrieben und die Zeitschriftenliste von \jabref{} wird aktualisiert.
+Sobald Sie auf \menu{OK} klicken (oder wenn Sie eine bestehende Datei ausgewält haben), enthält die Tabelle mindestens eine Zeile. Der Tabelleninhalt wird in die ausgewählte Datei geschrieben und die Zeitschriftenliste von \jabref wird aktualisiert.
\paragraph{Externe Zeitschriftenlisten}
-Zusätzlich zu Ihrer persönlichen Liste können Sie mehrere externe Listen verlinken. Diese Verknüpfungen werden im unteren Teil des \menu{Abkürzung der Zeitschriftennamen}-Dialogs verwaltet. Externe Listen sind den persönlichen Listen ähnlich~-- der einzige Unterschied ist, dass Sie nicht mit \jabref{} selbst verwaltet werden können.
+Zusätzlich zu Ihrer persönlichen Liste können Sie mehrere externe Listen verlinken. Diese Verknüpfungen werden im unteren Teil des Dialogs \menu{Abkürzung der Zeitschriftentitel} verwaltet. Externe Listen sind den persönlichen Listen ähnlich~-- der einzige Unterschied ist, dass Sie nicht mit \jabref selbst verwaltet werden können.
Um eine externe Liste hinzuzufügen, klicken Sie zunächst auf den \menu{+} Knopf, falls nötig (das fügt eine weitere Zeile hinzu). Dann benutzen Sie entweder den \menu{Durchsuchen}- oder den \menu{Herunterladen}-Button.
\begin{itemize}
\item Mit dem \menu{Durchsuchen}-Knopf können Sie eine auf Ihrem Computer bestehende Datei auswählen.
- \item Mit dem \menu{Herunterladen}-Knopf können Sie eine Liste aus dem Internet herunterladen, indem Sie eine \caps{URL} angeben. Die Datei wird auf Ihrem Computer gespeichert und mit \jabref{} verlinkt.
- Die \caps{URL} ist standardmäßig die Adresse einer Zeitschriftenliste auf der \jabref{}-Homepage. Diese Liste ist unvollständig, wird in Zukunft aber ausgebaut.
+ \item Mit dem \menu{Herunterladen}-Knopf können Sie eine Liste aus dem Internet herunterladen, indem Sie einen URL angeben. Die Datei wird auf Ihrem Computer gespeichert und mit \jabref verlinkt.
+ Der URL ist standardmäßig die Adresse einer Zeitschriftenliste auf der \jabref-Homepage. Diese Liste ist unvollständig, wird in Zukunft aber ausgebaut.
\end{itemize}
-Jeder Eintrag in Ihrer persönlichen Liste überschreibt einen Eintrag mit demselben vollständigen Zeitschriftennamen in einer Ihrer externen Listen. In ähnlicher Weise werden die externen Listen in der Reihenfolge, wie sie aufgelistet werden, abgearbeitet.
+Jeder Eintrag in Ihrer persönlichen Liste überschreibt einen Eintrag mit demselben vollständigen Zeitschriftentitel in einer Ihrer externen Listen. In ähnlicher Weise werden die externen Listen in der Reihenfolge, wie sie aufgelistet werden, abgearbeitet.
\subsection{Wortauswahl verwalten}
\menu{Verwalten} können Sie hinzugefügte Wörter auch wieder löschen.
-\subsection{Import und Export}
-
+\subsection{Import}
\subsubsection{Import-Kontrollfenster}
ist es oftmals leichter, diese Arbeiten durchzuführen, bevor die neuen
Einträge zwischen die bereits bestehenden sortiert wurden.
+\subsubsection[EndNote -> \jabref]{EndNote $\to$~\jabref}\label{subsubsec:endnote-jabref}
-\subsubsection[JabRef -> EndNote]{\jabref{} $\to$~EndNote}
+EndNote hat einen Export-Stil \bibtex{}, der allerdings nicht alle
+Eintragstypen und Felder von \bibtex{} und auch nicht die zusätzlich
+von \jabref genutzten Allgemeinen Felder (\emph{pdf}, \emph{owner},
+\emph{key} usw.) unterstützt. Falls Sie diese Felder nutzen wollen,
+verwenden Sie die EndNote Extras (\menu{Extras \msep{} EndNote Filter-Set entpacken}), extrahieren die Zip-Datei,
+die dabei erstellt wird und folgen den Anweisungen in der Datei \texttt{readme.txt}.
+
+\subsection{Export}
+\subsubsection[\jabref -> EndNote]{\jabref $\to$~EndNote}
+\label{EndnoteFilters}
\begin{quote}
-\label{EndnoteFilters}\emph{\jabref{} kann Dateien so exportieren,
+\emph{\jabref kann Dateien so exportieren,
dass EndNote sie lesen kann. Um diese Funktion zu nutzen, wählen Sie
-\menu{Datei}} \msep{} \emph{\menu{Exportieren}} \msep{} \emph{\menu{Endnote}
-und wählen dann den Namen der Export-Datei.}
+\menu{Datei \msep{} Exportieren}, dann bei \emph{Dateityp} \menu{Endnote} und
+geben den Namen der Export"=Datei an.}
\end{quote}
-Der Standard-EndNote-Importfilter kann nicht richtig mit mehreren
+Der Standard"=Importfilter von EndNote kann nicht richtig mit mehreren
Autoren oder Editoren umgehen. Es gibt zwei Möglichkeiten, um diese
Schwierigkeit zu umgehen:
\item Benutzen Sie den eingebauten Filter und bessern Sie die Datei später
aus.
-
Um die Datei in EndNote zu öffnen, erstellen Sie eine neue Datei oder
öffnen eine bestehende Datei in EndNote. Dann wählen Sie \menu{Datei}
\msep{} \menu{Importieren}, klicken mit der Maus auf \menu{Datei wählen},
-wählen die aus \jabref{} exportierte Datei aus und drücken auf \menu{Auswählen}.
+wählen die aus \jabref exportierte Datei aus und drücken auf \menu{Auswählen}.
Anschließend drücken Sie auf \menu{Import Optionen} und wählen \menu{EndNote Import}.
Mit einem Klick auf \menu{Importieren} starten Sie den Importvorgang.
Anschließend gehen Sie zum Menüpunkt \menu{Bearbeiten} \msep{} \menu{Text ändern}
-und ändern \emph{Any Field} in \emph{Author}. Geben Sie >>~and~<<
-in das Suchfeld ein (ohne Anführungszeichen) sowie ein RETURN-Zeichen
-in das Feld Ändern (Option-Return unter Mac OS X, STRG-Return unter
+und ändern \emph{Any Field} in \emph{Author}. Geben Sie \lstinline{_and_}
+in das Suchfeld ein (die Unterstriche stehen für Leerzeichen) sowie ein RETURN-Zeichen
+in das Feld \emph{Ändern} (Option-Return unter Mac OS X, STRG-Return unter
Windows XP). Dann klicken Sie auf \menu{Ändern}. Wiederholen Sie
das Ganze für das Feld \emph{Secondary Author} (Zweiter Autor).
\item Installieren Sie den \emph{EndNote Import from JabRef Filter}.
-
-Folgen Sie den Anweisungen im Abschnitt >>Erweiterte Benutzung<<
-(siehe unten, Seite~\pageref{EndNote_erweitert}). Um die Datei in
+Folgen Sie den Anweisungen im Abschnitt \nameref{EndNote_erweitert}. Um die Datei in
EndNote zu öffnen, erstellen Sie eine neue Datei oder öffnen eine
bestehende Datei in EndNote. Dann wählen Sie \menu{Datei} \msep{}
\menu{Importieren}, klicken auf \menu{Datei wählen}, wählen die
mit Klammern enthalten, als Eintrag mit mehreren Autoren gewertet
und demzufolge unpassend formatiert.
-
\subsubsection{Erweiterte Benutzung: EndNote Extras}
\label{EndNote_erweitert}Einige Felder, die von \bibtex{} genutzt
werden, gehören nicht zu EndNotes vorgegebenen Referenztypen. Während
-der Import in \jabref{} und der Export nach \jabref{} ohne ein Ändern
+der Import in \jabref und der Export nach \jabref ohne ein Ändern
der Referenztypen funktioniert, werden die Feldnamen in EndNote nicht
korrekt dargestellt (z.\,B. wird das PDF-Feld \emph{Custom 1} heißen
statt \emph{pdf}). Darüber hinaus können diese Felder bei neuen Einträgen
in EndNote nicht genutzt werden, weil sie nicht im Eintragsdialog
-erscheinen. Der vorgegebene EndNote-Importfilter kann darüberhinaus
+erscheinen. Der vorgegebene Importfilter von EndNote kann darüberhinaus
das Feld \emph{author} nicht richtig analysieren. Der \emph{EndNote
Import from JabRef Filter} kann dies. Außerdem erkennt dieser Filter
ein Feld \texttt{endnotereftype}, das die vorgegebene Zuordnung überschreibt.
-Um den Filter zu installieren, extrahieren Sie die EndNote Extras
-(\menu{Datei} \msep{} \menu{Exportieren} \msep{} \menu{EndNote Filter-Set auspacken})
+Um den Filter zu installieren, nutzen Sie die EndNote Extras
+(\menu{Extras \msep{} EndNote Filter-Set entpacken})
und entpacken die Zip-Datei, die dabei erstellt wird. Dann folgen
Sie den Angaben in der Datei \texttt{readme.txt}.
+\subsubsection{\jabref-Bibliographien in OpenOffice.org benutzen}
-\subsubsection[EndNote -> JabRef]{EndNote $\to$~\jabref{}}
-
-EndNote hat einen Export-Stil \bibtex{}, der allerdings nicht alle
-Eintragstypen und Felder von \bibtex{} und auch nicht die zusätzlich
-von \jabref{} genutzten Allgemeinen Felder (\emph{pdf}, \emph{owner},
-\emph{key} usw.) unterstützt. Falls Sie diese Felder nutzen wollen,
-extrahieren Sie die EndNote Extras (\menu{Datei} \msep{} \menu{Exportieren}
-\msep{} \menu{EndNote Filter-Set auspacken}), entpacken die Zip-Datei,
-die dabei erstellt wird und folgen den Anweisungenx in der Datei \texttt{readme.txt}.
-
-
-\subsubsection[JabRef-Bibliographien in OpenOffice.org benutzen]{\jabref{}-Bibliographien in OpenOffice.org benutzen}
-
-\jabref{} kann Ihre Datei sowohl in das OpenOffice.org 1.1 \texttt{.sxc}"=Tabellenkalkulationsformat als auch in das OpenDocument \texttt{.ods}"=Tabellenkalkulationsformat, das von OpenOffice.org 2.0 benutzt wird, exportieren.
+\jabref kann Ihre Datei sowohl in das OpenOffice.org 1.1 \texttt{.sxc}"=Tabellenkalkulationsformat als auch in das OpenDocument \texttt{.ods}"=Tabellenkalkulationsformat, das von OpenOffice.org 2.0 benutzt wird, exportieren.
In beiden Fällen besteht die exportierte Tabelle aus einem Arbeitsblatt, das die Einträge in Reihen
und die unterschiedlichen Felder in Spalten enthält. Die Reihenfolge und Benennung der Spalten ist kompatibel
zu den Literaturverzeichnis-Funktionen von OpenOffice.org (OOo 1.1: \texttt{.sxc}, OOo 2.0: \texttt{.ods}).
\paragraph{Die exportierte Datei als Bibliographiedatenbank in OpenOffice 2.0 (oder neuer) benutzen}
-Gehen Sie folgendermaßen vor, um eine Tabelle, die von \jabref{} exportiert wurde, als Bibliographiedatenbank in OpenOffice.org zu benutzen:
+Gehen Sie folgendermaßen vor, um eine Tabelle, die von \jabref exportiert wurde, als Bibliographiedatenbank in OpenOffice.org zu benutzen:
\begin{itemize}
\item Exportieren Sie Ihre Datenbank in das \texttt{.ods} -Format.
\item Exportieren Sie Ihre Datei in das \texttt{.sxc}-Format.
\item Starten Sie OpenOffice.org.
\item Wählen Sie \menu{Extras} \msep{} \menu{Datenquellen}.
-\item Wählen Sie die \emph{Bibliography}-Datei und ändern ihren Namen z.\,B. in \emph{Bibliographie-alt}.
+\item Wählen Sie die \emph{Bibliography}-Datei und ändern ihren Namen beispielsweise in \emph{Bibliographie-alt}.
\item Drücken Sie \menu{Anwenden}.
\item Klicken Sie \menu{Neue Datenquelle}. Ein neuer Eintrag erscheint. Ändern Sie den Namen zu \emph{Bibliography}.
\item Ändern Sie den \menu{Dateityp} zu \menu{Tabelle}. Klicken Sie den \menu{\ldots}-Button in der Zeile \menu{Datenquellen URL}. Wählen Sie die \texttt{.sxc}-Datei, die Sie exportiert haben.
\end{quote}
Dieser Dialog ermöglicht das schnelle Einfügen von Einträgen aus normalem
Text. Wählen Sie zunächst aus, welcher Eintragstyp erstellt werden
-soll. Fügen Sie dann einfach Text aus der Zwischenablage ein (mit
-dem Kontextmenü im Textfeld mit der Wasserzeichenschrift >>Text einfügen<<
-oder über den Button \menu{Einfügen}) oder wählen über den Button
-\menu{Datei öffnen} eine Datei aus, die Sie in den Dialog laden wollen.
+soll. Fügen Sie dann einfach Text aus der Zwischenablage ein (über das
+Kontextmenü im Textfeld mit der Wasserzeichenschrift >>Text einfügen<<
+oder über den Button \menu{Einfügen}). Alternativ können Sie über den Button
+\menu{Datei öffnen} eine Datei auswählen, um sie in den Dialog zu laden.
Jetzt markieren Sie z.\,B. den Textbereich, der zum Titel des neuen
-Eintrags werden soll, und machen im rechten Teil des Dialogfensters
-im Bereich >>verfügbare BibTeX Felder<< einen Doppelklick auf \emph{title}.
+Eintrags werden soll, und führen im rechten Teil des Dialogfensters
+im Bereich \menu{Verfügbare BibTeX"=Felder} einen Doppelklick auf \emph{title} aus.
So gehen Sie für alle weiteren Felder des neuen Eintrags vor. Sie
können einem Feld natürlich auch mehrere Textbereiche zuordnen. Achten
Sie dazu darauf, dass die Option \menu{anfügen} aktiviert ist, ansonsten
bestimmten \bibtex{}-Feld zugewiesen haben, wählen Sie das Feld im
rechten Bereich aus; der zugeordnete Text wird nun rot hervorgehoben.
-Sie können sich das Ergebnis des Importvorgangs jederzeit im Tab \menu{BibTeX Quelltext}
+Sie können sich das Ergebnis des Importvorgangs jederzeit im Tab \menu{BibTeX"=Quelltext}
des Importdialogs ansehen. Hier können keine Änderungen vorgenommen
werden; das ist erst möglich, sobald der Text tatsächlich importiert
und ein neuer Eintrag angelegt wurde. Auf mögliche Fehler werden Sie
Haben Sie alle Textstellen den gewünschten \bibtex{}-Feldern zugewiesen,
klicken Sie auf die Schaltfläche \menu{Übernehmen}. Nun erstellt
-\jabref{} den neuen Eintrag, der allerdings noch keinen \bibtex{}-Key
+\jabref den neuen Eintrag, der allerdings noch keinen \bibtex{}-Key
hat.
-
\subsection{Links zu externen Dateien}
-\label{ExternalFiles}Mit \jabref{} können Sie Ihre Einträge mit
+\label{ExternalFiles}Mit \jabref können Sie Ihre Einträge mit
den entsprechenden PDF- oder PS-Dateien, die sich auf Ihrem Computer
befinden, verlinken. Ebenso ist es möglich, Dateien im Internet über
-ein URL oder DOI zu verlinken.
+einen URL oder DOI zu verlinken.
\subsubsection{Externe Betrachter einrichten}
-\jabref{} benötigt Informationen darüber, welche Programme es für
-PDF- und PS-Dateien und Internetseiten benutzen soll. In der Standardeinstellung
+\jabref benötigt Informationen darüber, welche Programme es für
+PDF- und PS"=Dateien und Internetseiten benutzen soll. In der Standardeinstellung
werden sie auf Werte gesetzt, die wahrscheinlich zu Ihrem Betriebssystem
passen, so dass eine gute Chance besteht, dass Sie diese Werte nicht
zu verändern brauchen.
\subsubsection{Externe Dateien oder Links öffnen}
Es gibt verschiedene Möglichkeiten, wie man externe Dateien oder Internetseiten
-aus \jabref{} öffnen kann. Im Eintrags-Editor können Sie einfach
-auf das Textfeld, das ein DOI oder URL enthält, doppelklicken. In
+aus \jabref öffnen kann. Im Eintrags-Editor können Sie einfach
+auf das Textfeld, das einen DOI oder URL enthält, doppelklicken. In
der Tabellenansicht können Sie einen Eintrag auswählen und die Menüeinträge
(unter \menu{Extras}), die Tastenkombinationen (in der Standardeinstellung
F4 für PDF/PS und F3 für DOI/URL) oder das Kontextmenü (mit der rechten
\subsubsection{Der Standard-Ordner für PDF-Dateien}
-PDF-Dateien erhalten von \jabref{} eine >>Spezialbehandlung<<,
+PDF-Dateien erhalten von \jabref eine >>Spezialbehandlung<<,
um das Verlinken mit den entsprechenden Einträgen so einfach wie möglich
zu gestalten. Um diese >>Spezialbehandlung<< nutzen zu können, müssen
Sie im Unterpunkt \menu{Externe Programme} des Dialogs \menu{Optionen}
aus an derselben Datei arbeiten können.
Wenn Sie Ihren PDF-Dateien dann noch Namen geben, die mit dem \bibtex{}-Key
-des entsprechenden Eintrags übereinstimmen (plus \texttt{.pdf} im
-Dateinamen), sucht \jabref{} in Ihrem Standard-PDF-Ordner und dessen
+des entsprechenden Eintrags übereinstimmen (abgesehen von der Dateiendung \texttt{.pdf}),
+sucht \jabref in Ihrem Standard-PDF-Ordner und dessen
Unterordnern nach der richtigen PDF-Datei. Sobald die korrekt benannte
PDF-Datei sich dort befindet, klicken Sie auf die Schaltfläche \menu{Auto}
neben dem PDF-Feld im Eintrags-Editor. Wenn die PDF-Datei gefunden
\subsubsection{Dateispezifische PDF- und PS-Verzeichnisse}
-Sie können für jede Datei eigene PDF- und PS-Verzeichnisse angeben (\menu{Datei \msep{} Eigenschaften der Datei}). Diese Verzeichnisse ersetzen dann die Standardverzeichnisse.
+Sie können für jede Datei eigene PDF- und PS-Verzeichnisse angeben \emph{(}\menu{Datei \msep{} Eigenschaften der Datei}\emph{)}. Diese Verzeichnisse ersetzen dann die Standardverzeichnisse.
\subsubsection{Die Suche mit regulären Ausdrücken für automatische Verknüpfungen nutzen}
\label{RegularExpressionSearch}
-Wenn Sie Dateinamen verwenden, die dem bibtexkey ergänzt um die Dateiendung entsprechen, findet \jabref{} diese Dateien automatisch.
+Wenn Sie Dateinamen verwenden, die dem bibtexkey ergänzt um die Dateiendung entsprechen, findet \jabref diese Dateien automatisch.
Ab Version~2.2 ist mit Hilfe von regulären Ausdrücken eine größere Flexibilität beim Benennen der Dateien gewährleistet. In den meisten Fällen dürfte das Standardverhalten bereits ausreichend sein.
-In den Einstellungen zu externen Programmen (\menu{Optionen \msep{} Einstellungen \msep{} Externe Programme}) findet sich eine Option ">Suche mit regulärem Ausdruck benutzen"<. Wenn Sie diese Option aktivieren, können Sie für die Suche in PDF-Verzeichnissen einen eigenen regulären Ausdruck angeben.
+In den Einstellungen zu externen Programmen \emph{(}\menu{Optionen \msep{} Einstellungen \msep{} Externe Programme}\emph{)} findet sich eine Option ">Suche mit regulärem Ausdruck benutzen"<. Wenn Sie diese Option aktivieren, können Sie für die Suche in PDF-Verzeichnissen einen eigenen regulären Ausdruck angeben.
Die folgende Syntax wird verwendet:
\begin{labeling}{MextensionM}
\item [\texttt{*}] Suche in allen direkten Unterverzeichnissen, NICHT im aktuellen Verzeichnis und in Unterverzeichnissen zweiter oder tieferer Ebene.
\item [\texttt{**}] Rekursive Suche in allen Unterverzeichnissen UND im aktuellen Verzeichnis.
- \item [\texttt{.} und \texttt{..}] Das aktuelle Verzeichnis und das Elternverzeichnis (eine Ebene höher).
+ \item [\texttt{.}] Das aktuelle Verzeichnis.
+ \item [\texttt{..}] Das Elternverzeichnis (eine Ebene höher).
\item [\texttt{{[}title{]}}] Alle Ausdrücke in eckigen Klammern werden durch den Inhalt des entsprechenden Felds ersetzt.
\item [\texttt{{[}extension{]}}] Wird durch die Dateiendung des Feldes, das Sie benutzen, ersetzt.
\item Anderer Text wird als regulärer Ausdruck interpretiert. Aber Vorsicht: \emph{backslashes} müssen mit einem weiteren \emph{backslash} \emph{escaped} werden (\texttt{\textbackslash\textbackslash}), damit sie nicht mit Separatoren in Pfad-Angaben verwechselt werden.
XMP ist ein Standard, der von Adobe Systems entwickelt wurde, um Metadaten (Daten, die Informationen über andere Daten enthalten) in Dateien zu speichern. Ein bekanntes Beispiel für Metadaten sind ID3-Tags, die zur Beschreibung von Künstlern, Albumtiteln und Liednamen einer MP3-Datei verwendet werden. Mit Hilfe von Metadaten können MP3-Dateien unabhängig von ihrem Dateinamen identifiziert und z.B. von MP3-Playern ausgelesen und angezeigt werden.
-Mit der XMP-Unterstützung versucht das \jabref{}-Team, die Vorteile von Metadaten in die Welt der Literaturmanager einzuführen. Sie können \menu{XMP schreiben} im \menu{Allgemein}-Tab des Eintragseditors wählen und damit alle \bibtex{}-Informationen in die verlinkte PDF-Datei schreiben. Wenn Sie diese PDF-Datei mit anderen austauschen, können diese die Datei in das \jabref{}-Fenster ziehen und haben damit alle Informationen zur Verfügung, die Sie eingegeben haben.
+Mit der XMP-Unterstützung versucht das \jabref-Team, die Vorteile von Metadaten in die Welt der Literaturmanager einzuführen. Sie können \menu{XMP schreiben} im \menu{Allgemein}-Tab des Eintragseditors wählen und damit alle \bibtex{}-Informationen in die verlinkte PDF-Datei schreiben. Wenn Sie diese PDF-Datei mit anderen austauschen, können diese die Datei in das \jabref-Fenster ziehen und haben damit alle Informationen zur Verfügung, die Sie eingegeben haben.
\subsubsection{Benutzung}
-Um die XMP-Funktionen in \jabref{} zu nutzen, gehen Sie folgendermaßen vor:
+Um die XMP-Funktionen in \jabref zu nutzen, gehen Sie folgendermaßen vor:
\begin{itemize}
- \item Zum \emph{Importieren einer einzelnen PDF-Datei mit Metadaten} wählen Sie \menu{Datei \msep{} Importieren in {[}neue{|}aktuelle{]} Datenbank} und im anschließenden Dialog als Dateiformat \menu{PDF mit XMP-Anmerkungen} aus. Sie können die PDF-Datei stattdessen auch mit der Maus auf das Hauptfenster von \jabref{} ziehen.
- \item Um \emph{bibliographische Informationen in eine verlinkte PDF-Datei zu schreiben}, klicken Sie auf \menu{XMP schreiben} im \menu{Allgemein}-Tab des Eintragseditors.
+ \item Zum \emph{Importieren einer einzelnen PDF-Datei mit Metadaten} wählen Sie \menu{Datei \msep{} Importieren in {[}neue{|}aktuelle{]} Datenbank} und im anschließenden Dialog als Dateiformat \menu{PDF mit XMP-Anmerkungen} aus. Sie können die PDF-Datei stattdessen auch mit der Maus auf das Hauptfenster von \jabref ziehen.
+ \item Um \emph{bibliographische Informationen in eine verlinkte PDF-Datei zu schreiben}, klicken Sie auf \menu{XMP schreiben} im \menu{Allgemein}-Tab des Eintragseditors (neben dem \emph{pdf}"=Feld).
\item Wenn Sie \emph{alle PDFs einer Datei mit Metadaten versehen} wollen, wählen Sie \menu{Extras \msep{} XMP-Metadaten in PDFs schreiben}.
\item Um zu überprüfen, ob das Schreiben der Metadaten funktioniert hat, öffnen Sie die Datei in Adobe Acrobat und wählen \menu{Datei \msep{} Dokumenteigenschaften} und dann unter dem Reiter \menu{Beschreibung} die Schaltfläche \menu{Zusätzliche Metadaten}. Wenn Sie links ">Erweitert"< auswählen, sollten Sie im rechten Teil des Dialogs einen Eintrag \texttt{http://jabref.sourceforge.net/bibteXMP} sehen, der die entsprechenden Metadaten enthält. Dies geht nur mit dem Vollprogramm Adobe Acrobat, nicht mit dem Adobe Reader.
\item Wer kein Adobe Acrobat zur Verfügung hat, kann stattdessen das Programm ">pdfinfo"<\footnote{Dieses Programm ist Teil von \href{http://www.foolabs.com/xpdf/}{Xpdf} und \href{http://poppler.freedesktop.org/}{Poppler}.} verwenden, um die XMP-Metadaten zu überprüfen. Rufen Sie dazu auf der Kommandozeile einfach \lstinline{pdfinfo -meta <PDF-Datei>} auf, dann werden die entsprechenden Metadaten angezeigt.
\subsubsection{bibteXMP Dateiformat}
-XMP nutzt zum Speichern der Daten eine Teilmenge des \emph{Resource Description Framework} (RDF). Für \jabref{} wird ein neues Metadatenformat benutzt, das \bibtex{} sehr gut abbildet. Alle Felder und Werte werden in Knoten eines XML-Dokuments verwandelt. Nur Autoren und Herausgeber werden als \texttt{rdf:Seq}-Strukturen gespeichert, so dass die trennenden ">and"< weggelassen werden können. Alle Strings und crossrefs werden in den Metadaten aufgelöst.
+XMP nutzt zum Speichern der Daten eine Teilmenge des \emph{Resource Description Framework} (RDF). Für \jabref wird ein neues Metadatenformat benutzt, das \bibtex{} sehr gut abbildet. Alle Felder und Werte werden in Knoten eines XML-Dokuments verwandelt. Nur Autoren und Herausgeber werden als \texttt{rdf:Seq}-Strukturen gespeichert, so dass die trennenden ">and"< weggelassen werden können. Alle Strings und crossrefs werden in den Metadaten aufgelöst.
Das folgende einfache Minimal-Schema wird benutzt:
\begin{itemize}
\item \href{http://partners.adobe.com/public/developer/en/xmp/sdk/xmpspecification.pdf}{Adobe XMP Spezifikation}
\end{itemize}
-\subsection[JabRef und Online-Datenbanken]{\jabref{} und Online-Datenbanken}
+\subsection{\jabref und Online-Datenbanken}
\subsubsection{CiteSeer}
\label{CiteSeerHelp}
-\begin{quote}
-CiteSeer ist eine digitale Bibliothek und Suchmaschine für wissenschaftliche Literatur, vornehmlich zu den Bereichen Computer und Informatik.
-\end{quote}
-\jabref{} kann Informationen über eine bestimmte
+\tip[]{CiteSeer ist eine digitale Bibliothek und Suchmaschine für wissenschaftliche Literatur, vornehmlich zu den Bereichen Computer und Informatik.}
+\jabref kann Informationen über eine bestimmte
Literaturangabe aus der CiteSeer-Datenbank herunterladen. Um diesen
Vorgang zu starten, fügen Sie Ihrer Datei einen neuen Eintrag hinzu
und belegen das Feld \emph{citeseerurl} mit einem Link zur entsprechenden
auswählen. Achten Sie darauf, dass Sie die Zeile(n) ausgewählt haben,
die Sie aktualisieren wollen.
-Mit einem Set von Literaturangaben können Sie eine Liste von Dokumenten
-generieren, die die Elemente dieses Sets zitieren. Dazu muss jede
-Literaturangabe in einer Datei ein \emph{citeseerurl}-Feld mit dem
-eben beschriebenen Format haben.%
-\footnote{Hinweis des Übersetzers (DW): Offen gesagt habe ich diesen Absatz
-nicht wirklich verstanden, was daran liegen mag, dass ich CiteSeer
-nicht kenne und deshalb auch die Funktionsweise nicht nachvollziehen
-kann. Für Hinweise, Erklärungen oder eine bessere Übersetzung wäre
-ich deshalb dankbar.%
-}
-
\paragraph{Eine Datei mit zitierenden Literaturangaben erzeugen}
Mit einem Satz von Literaturangaben können Sie eine Liste der Dokumente
Sie \menu{Zitierende Literatur von CiteSeer abrufen} auswählen.
\subsubsection{Medline}
+\label{MedlineHelp}
-\begin{quote}
-\label{MedlineHelp}\caps{MEDLINE} ist die wichtigste Datenbank der \emph{U.\,S. National Library of Medicine}. Sie enthält Literaturangaben von Zeitschriftenartikeln der Lebenswissenschaften, vornehmlich der Biomedizin.
-\jabref{} kann Literaturangaben von der Medline-Datenbank
-herunterladen. Um diese Funktion zu nutzen, wählen Sie \menu{Extras}
-\msep{} \menu{Medline abrufen}, so dass der Medline-Dialog im linken
-Seitenfeld erscheint.
-\end{quote}
+\tip[]{MEDLINE ist die wichtigste Datenbank der \emph{U.\,S. National Library of Medicine}. Sie enthält Literaturangaben von Zeitschriftenartikeln der Lebenswissenschaften, vornehmlich der Biomedizin.
+\jabref kann Literaturangaben der Medline"=Datenbank
+herunterladen. Um diese Funktion zu nutzen, wählen Sie \menu{Extras
+\msep{} Medline abrufen}, so dass der Medline-Dialog im linken
+Seitenfeld erscheint.}
Es gibt zwei Möglichkeiten, die Auswahl der Einträge vorzunehmen,
die heruntergeladen werden sollen:
\subsubsection{IEEEXplore}
\label{IEEEXploreHelp}
-\begin{quote}
-\emph{IEEEXplore bietet Zugang zu Literatur in den Bereichen Elektrotechnik, Informatik und Elektronik.}
-\end{quote}
-\jabref{} kann Literaturangaben der IEEEXplore-Datenbank herunterladen.
+\tip[]{IEEEXplore bietet Zugang zu Literatur in den Bereichen Elektrotechnik, Informatik und Elektronik.}
+\jabref kann Literaturangaben der IEEEXplore-Datenbank herunterladen.
Um diese Funktion zu nutzen, wählen Sie \menu{Internet \msep{} IEEEXplore abfragen}
und geben in dem Dialog, der im linken Bildschirmbereich erscheint, Ihre
Suchausdrücke ein. Drücken Sie anschließend die
Sie können die \emph{abstracts} zusammen mit den Literaturangaben herunterladen,
indem Sie einen Haken bei \menu{Abstracts berücksichtigen} setzen. Das verursacht
eine deutlich höhere Anzahl von Netzwerk-Anfragen; um die Webseite von IEEEXplore
-nicht übermäßig zu belasten, lädt \jabref{} \emph{abstracts} nur bei einer Suche,
+nicht übermäßig zu belasten, lädt \jabref \emph{abstracts} nur bei einer Suche,
deren Ergebnis eine bestimmte Trefferanzahl nicht übersteigt.
\subsubsection{Benutzung eines Proxy-Servers}
java -Dhttp.proxyHost="hostname" -Dhttp.proxyPort="portnumber"
\end{lstlisting}
-\subsection[JabRef mit mehreren Benutzern verwenden]{\jabref{} mit mehreren Benutzern verwenden}
+\subsection{\jabref mit mehreren Benutzern verwenden}
-\jabref{} bietet einige Funktionen, die besonders dann von Nutzen
+\jabref bietet einige Funktionen, die besonders dann von Nutzen
sind, wenn eine Datenbank von mehreren Benutzern~-- z.\,B. über
ein Netzwerk~-- bearbeitet wird. Das sind vor allem die Felder \emph{owner}
und \emph{timestamp}.
\subsubsection{Zeitstempel \emph{(timestamp)}}
+\label{TimeStampHelp}
\begin{quote}
-\label{TimeStampHelp}\emph{Die Benutzung des Zeitstempels kann unter
-\menu{Einstellungen}} \msep{} \emph{\menu{Allgemeines} an- und
+\emph{Die Benutzung des Zeitstempels kann unter
+\menu{Einstellungen}} \msep{} \emph{\menu{Allgemein} an- und
abgestellt sowie verändert werden.}
\end{quote}
-\jabref{} kann automatisch das Feld \emph{timestamp} setzen, das
+\jabref kann automatisch das Feld \emph{timestamp} setzen, das
das Datum enthält, an dem der Eintrag zur Datei hinzugefügt wurde.
Die Formatierung des Zeitstempels wird von einem Ausdruck mit Bezeichnern
bestimmt, die die Position verschiedener Bestandteile des Datums angeben.
Diese Bezeichner können mit Interpunktion und Leerzeichen kombiniert
werden. Hier einige Beispiele:
-\begin{quote}
-\texttt{yyyy.MM.dd} $\to$ 2005.09.14
-
-\texttt{yy-MM-dd} $\to$ 05-09-14
-
-\texttt{yyyy.MM.dd~HH:mm} $\to$ 2005.09.14 17:45
-\end{quote}
+\begin{labeling}{dd.MM.yyyy-HH:m}
+\item [\texttt{yyyy.MM.dd}]$\to$ 2005.09.14
+\item [\texttt{yy-MM-dd}]$\to$ 05-09-14
+\item [\texttt{dd.MM.yyyy~HH:mm}]$\to$ 14.09.2005 17:45
+\end{labeling}
\subsubsection{Besitzer \emph{(owner)}}
-\label{OwnerHelp}\jabref{} kann allen neuen Einträgen, die zu einer
+\label{OwnerHelp}\jabref kann allen neuen Einträgen, die zu einer
Datei hinzugefügt oder in sie importiert werden, Ihren Benutzernamen
beigeben. Diese Funktion können Sie im Menü \menu{Einstellungen}
\msep{} \menu{Allgemein} ein- und ausschalten. Dort können Sie auch
im Tab \emph{General fields} des Eintragseditors angezeigt wird.
-\subsection[JabRef von der Kommandozeile]{\jabref{} von der Kommandozeile}
+\subsection{\jabref von der Kommandozeile}
-\label{CommandLine}Obwohl \jabref{} in erster Linie ein Programm
+\label{CommandLine}Obwohl \jabref in erster Linie ein Programm
mit grafischer Benutzeroberfläche ist, bietet es einige nützliche
Optionen für die Kommandozeile und kann sogar Dateikonvertierungen
durchführen, ohne die grafische Benutzeroberfläche zu öffnen.
\begin{itemize}
\item Hilfe: \texttt{-h}
-Diese Option veranlasst \jabref{}, eine Zusammenfassung der Kommandozeilen-Optionen
+Diese Option veranlasst \jabref, eine Zusammenfassung der Kommandozeilen-Optionen
anzuzeigen und das Programm unmittelbar darauf zu schließen.
\item Kein GUI-Modus: \texttt{-n}
-Diese Option unterdrückt sowohl das \jabref{}-Fenster als auch den
+Diese Option unterdrückt sowohl das \jabref-Fenster als auch den
Eröffnungsbildschirm, der normalerweise beim Programmstart angezeigt
wird. Das Programm wird beendet, sobald die Kommandozeilen-Optionen
abgearbeitet wurden.
-
Diese Option ist nützlich, um Dateikonvertierungen von der Kommandozeile
oder mit Hilfe eines Scripts durchzuführen.
\item Sitzung laden: \texttt{-l}
-Diese Option veranlasst \jabref{}, eine gespeicherte Sitzung zu laden,
+Diese Option veranlasst \jabref, eine gespeicherte Sitzung zu laden,
sofern eine vorhanden ist, bevor sich das Hauptfenster öffnet.
\item Datei importieren: \texttt{-i Dateiname{[},Importformat{]}}
-Bei dieser Option importiert oder lädt \jabref{} eine bestimmte Datei.
+Bei dieser Option importiert oder lädt \jabref eine bestimmte Datei.
Wenn nur ein Dateiname angegeben wird oder ein Komma und ein {*}-Zeichen
-hinter dem Dateinamen stehen, versucht \jabref{}, das Dateiformat
+hinter dem Dateinamen stehen, versucht \jabref, das Dateiformat
automatisch zu erkennen. Das sollte bei allen \bibtex{}-Dateien ebenso
-funktionieren wie bei Dateien, die in einem der von \jabref{} unterstützten
+funktionieren wie bei Dateien, die in einem der von \jabref unterstützten
Importformate vorliegen. Wenn dem Dateinamen ein Komma und ein Importformat
folgen, wird der angegebene Importfilter benutzt. Mit der Option \texttt{-h}
können Sie sich eine Liste der verfügbaren Importformate anzeigen
zuerst ausgeführt, bevor die importierte oder geladene Datei an den
Exportfilter übergeben wird. Falls die grafische Oberfläche nicht
mit der Option \texttt{-n} unterdrückt wird, werden alle geladenen
-oder importierten Dateien im Hauptfenster von \jabref{} angezeigt.
+oder importierten Dateien im Hauptfenster von \jabref angezeigt.
Die Option \texttt{-i} kann nur einmal angegeben werden und nimmt
als Argument maximal eine Datei.
\item Datei exportieren: \texttt{-o Dateiname{[},Exportformat{]}}
-Diese Option veranlasst \jabref{}, eine Datei zu speichern oder zu
+Diese Option veranlasst \jabref, eine Datei zu speichern oder zu
exportieren, die von derselben Kommandozeile geladen oder importiert
wurde. Wenn eine Datei mit der Option \texttt{-i} importiert wurde,
wird diese Datei exportiert. Ansonsten wird die Datei exportiert,
Exportformate anzeigen lassen.
Falls die Option \texttt{-n} nicht aufgerufen wurde, wird jeder Exportvorgang
-durchgeführt, bevor das \jabref{}-Fenster geöffnet wird. Dort werden
+durchgeführt, bevor das \jabref-Fenster geöffnet wird. Dort werden
dann die importierten Dateien angezeigt.
Die Option \texttt{-o} kann nur einmal angegeben werden und nimmt
\item Einstellungen exportieren: \texttt{-x Dateiname}
-Mit dieser Option können Sie \jabref{} veranlassen, alle Benutzer-Einstellungen
-in eine XML-Datei zu speichern. Nach dem Export startet \jabref{}
+Mit dieser Option können Sie \jabref veranlassen, alle Benutzer-Einstellungen
+in eine XML-Datei zu speichern. Nach dem Export startet \jabref
normal.
\item Einstellungen importieren: \texttt{-p Dateiname}
-Mit dieser Option importiert \jabref{} Benutzer-Einstellungen, die
+Mit dieser Option importiert \jabref Benutzer-Einstellungen, die
mit der Option \texttt{-x} exportiert wurden. Nach dem Import startet
-\jabref{} normal.
+\jabref normal.
\item Nur benutzte Einträge exportieren: \texttt{-a Dateiname{[}.aux{]},neueBibDatei{[}.bib{]}}
Manchmal ist es nützlich, eine \bibtex{}-Datei zu haben, die nur die
benutzten Einträge enthält. Eine Liste dieser benutzten Einträge findet
-sich in einer .aux-Datei (sobald Sie \LaTeX{} aufgerufen haben). \jabref{}
+sich in einer .aux-Datei (sobald Sie \LaTeX{} aufgerufen haben). \jabref
kann diese Datei analysieren, um eine neue \bibtex{}-Datei zu erstellen,
die nur die bekannten und benutzten Einträge enthält. Das bedeutet,
dass ein Eintrag, der in der Standard-\bibtex{}-Datei nicht definiert
\subsubsection{Externer Zugriff}
\label{RemoteHelp}
\begin{quote}
-\emph{Diese Funktion kann unter \menu{Einstellungen \msep{} Erweitert} eingestellt werden.}
+\emph{Diese Funktion kann unter \menu{Optionen \msep{} Einstellungen \msep{} Erweitert} verwaltet werden.}
\end{quote}
-\tip[]{Beachten Sie, dass das Aktivieren dieser Funktion mit Windows XP SP2 (und möglicherweise auch mit anderen Konfigurationen) zu einer Meldung führen kann, die besagt, dass bestimmte Funktionen des Programms von der Windows-Firewall geblockt wurden. Sie können die Firewall anweisen, weiterhin zu blocken, denn die Firewall beeinträchtigt den Externen Zugriff von \jabref{} nicht.}
-Falls das Abhören von externen Zugriffen aktiviert ist, versucht \jabref{} beim Programmstart, den entsprechenden Port abzuhören. Das bedeutet, dass andere Anwendungen Informationen durch diesen Port an \jabref{} senden können. \jabref{} akzeptiert dabei nur lokale Verbindungen, um das Risiko eines Eingriffs von außerhalb auszuschließen.
+\tip[]{Beachten Sie, dass das Aktivieren dieser Funktion mit Windows XP SP2 (und möglicherweise auch mit anderen Konfigurationen) zu einer Meldung führen kann, die besagt, dass bestimmte Funktionen des Programms von der Windows-Firewall geblockt wurden. Sie können die Firewall anweisen, weiterhin zu blocken, denn die Firewall beeinträchtigt den Externen Zugriff von \jabref nicht.}
+Falls das Abhören von externen Zugriffen aktiviert ist, versucht \jabref beim Programmstart, den entsprechenden Port abzuhören. Das bedeutet, dass andere Anwendungen Informationen durch diesen Port an \jabref senden können. \jabref akzeptiert dabei nur lokale Verbindungen, um das Risiko eines Eingriffs von außerhalb auszuschließen.
-Mit dem externen Zugriff kann eine zweite Instanz von \jabref{} erkennen, dass eine erste Instanz bereits läuft. In diesem Fall leitet die zweite Instanz ihre Kommandozeilen-Optionen an die erste Instanz weiter und beendet sich selbst direkt im Anschluss~-- sofern die zweite Instanz nicht ausdrücklich instruiert wurde, im Stand-Alone-Modus (als selbständige Instanz) zu starten.
+Mit dem externen Zugriff kann eine zweite Instanz von \jabref erkennen, dass eine erste Instanz bereits läuft. In diesem Fall leitet die zweite Instanz ihre Kommandozeilen"=Optionen an die erste Instanz weiter und beendet sich selbst direkt im Anschluss~-- sofern die zweite Instanz nicht ausdrücklich instruiert wurde, im Stand-Alone-Modus (als selbständige Instanz) zu starten.
-Die erste \jabref{}-Instanz liest die Kommandozeilenoptionen und führt die erforderlichen Aktionen aus, z.\,B. das Lesen oder Importieren einer Datei oder das Anhängen einer Datei an die aktive Datenbank. Falls eine Datei mit der Option \texttt{-{-}importToOpen} importiert wird, werden die Einträge an die aktive Datei angehängt. Falls keine Datei geöffnet ist, wird eine neue Datei angelegt.
+Die erste \jabref-Instanz liest die Kommandozeilenoptionen und führt die erforderlichen Aktionen aus, z.\,B. das Lesen oder Importieren einer Datei oder das Anhängen einer Datei an die aktive Datenbank. Falls eine Datei mit der Option \texttt{-{-}importToOpen} importiert wird, werden die Einträge an die aktive Datei angehängt. Falls keine Datei geöffnet ist, wird eine neue Datei angelegt.
\clearpage
\section{Anpassung}
\msep{} \emph{\menu{Eintragstypen anpassen}.}
\end{quote}
Wenn Sie einen Eintragstyp anpassen, definieren Sie sowohl sein Erscheinungsbild
-im Eintragseditor als auch die Bedingungen, nach denen \jabref{}
+im Eintragseditor als auch die Bedingungen, nach denen \jabref
einen Eintrag als vollständig akzeptiert. Sie können die bestehenden
Eintragstypen verändern und neue hinzufügen.
Um eines oder mehrere Felder zu löschen, wählen Sie sie in der Liste
aus und klicken auf \menu{Löschen}. Die Reihenfolge der Felder können
-Sie ändern, indem Sie einen Feldnamen auswählen und die Pfeiltasten
+Sie ändern, indem Sie einen Feldnamen auswählen und die Pfeil"=Buttons
benutzen, um das Feld nach oben oder nach unten zu verschieben.
Es gibt eine Beschränkung beim Anpassen der Eintragstypen; bestimmte
-Typen haben eine und/oder-Bedingung in ihren benötigten Feldern. Ein
+Typen haben eine ">und/oder"<"=Bedingung in ihren benötigten Feldern. Ein
\emph{book}-Eintrag ist beispielsweise komplett, wenn entweder das
Feld \emph{author} oder \emph{editor} oder beide gesetzt sind. Diese
Art von Bedingung kann in einem angepassten Eintragstyp nicht realisiert
den Feldern \emph{abstract} und \emph{annote}.
-\subsection{Automatische Erstellung von \bibtex{}-Keys}
-
+\subsection{Automatische Erstellung von \bibtex{}"=Keys}
+\label{LabelPatterns}
\begin{quote}
-\label{LabelPatterns}Im Tab \menu{Key-Muster} des Dialogs \menu{Einstellungen}
+\emph{Unter \menu{Optionen \msep{} Einstellungen \msep{} BibTeX"=Key"=Muster}
kann man die Felder bestimmen, die zur automatischen Generierung der
-\bibtex{}-Keys herangezogen werden.
+\bibtex{}"=Keys herangezogen werden.}
\end{quote}
-Standardmäßig verwendet \jabref{} ein vorgegebenes Muster (default
-pattern) zur Generierung von \bibtex{}-Keys, das Keys wie z.\,B.
+\jabref verwendet ein Standardmuster zur Generierung von \bibtex{}"=Keys, das Keys wie z.\,B.
\texttt{Yared1998} erzeugt. Falls der \bibtex{}-Key in der geöffneten
Datei nicht eindeutig sein sollte, wird einer der Buchstaben a-z angefügt,
bis ein eindeutiger Key gefunden ist. Dementsprechend könnten die
Yared1998b
(*\ldots*)
\end{lstlisting}
-\jabref{} verwendet Feldmarken, um das Aussehen der \bibtex{}-Keys
-zu bestimmen. Das Key-Muster kann für jeden der vorgegebenen Eintragstypen
+Um das Aussehen der \bibtex{}-Keys zu bestimmen, benutzt \jabref
+Feldmarken. Das Key"=Muster kann für jeden der vorgegebenen Eintragstypen
bestimmt werden. Es kann beliebigen Text enthalten, unabhängig von
und zusätzlich zu den Feldmarken, die angeben, dass ein bestimmtes
Feld des Eintrags an dieser Stelle des Keys eingefügt werden soll.
\subsubsection{Spezielle Feldmarken}
-\begin{labeling}{veryveryveryshorttitle}
+\begin{labeling}{auth.auth.eaMM}
\item [\texttt{{[}auth{]}}]Der Nachname des ersten Autors.
\item [\texttt{{[}authors{]}}]Die Nachnamen aller Autoren.
\item [\texttt{{[}authorsN{]}}]Die Nachnamen von bis zu N Autoren. Falls
M-ten Autors.
\item [\texttt{{[}auth.auth.ea{]}}]Die Nachnamen der beiden ersten Autoren
und \texttt{.ea}, falls es mehr als zwei Autoren sind.
+\item [\texttt{{[}auth.etal{]}}]Der Nachname des ersten Autors und der Nachname des zweiten Autors bei zwei Autoren bzw. \texttt{.etal} bei mehr als zwei Autoren.
\item [\texttt{{[}authshort{]}}]Der Nachname bei einem Autor; der erste
Buchstabe der Nachnamen von bis zu drei Autoren, falls mehr als ein
Autor vorhanden ist. Ein Plus (+) wird angehängt, falls es mehr als
drei Autoren gibt.
\end{labeling}
-\tip[Anmerkung:]{Falls es keinen Autor gibt (z.\,B. bei einem Buch mit Herausgeber), benutzen die genannten \texttt{{[}auth...{]}}-Feldmarken den oder die Herausgeber, die im editor-Feld angegeben wurden. Also werden die Herausgeber eines Buches ohne Autor für die Label-Erstellung wie Autoren behandelt. Falls Sie dieses Verhalten nicht wünschen und die Feldmarke stattdessen bei einem leeren author-Feld zu nichts expandieren soll, müssen Sie stattdessen >>pureauth<< verwenden, z.\,B.: \texttt{{[}pureauth{]}} oder \texttt{{[}pureauthors3{]}.}}
+\tip[Anmerkung: ]{Falls es keinen Autor gibt (etwa bei einem Buch mit Herausgeber), benutzen die genannten \texttt{{[}auth\ldots{]}}"=Feldmarken den oder die Herausgeber, die im editor"=Feld angegeben wurden. Also werden die Herausgeber eines Buches ohne Autor für die Label"=Erstellung wie Autoren behandelt. Falls Sie dieses Verhalten nicht wünschen und die Feldmarke stattdessen bei einem leeren author"=Feld zu nichts expandieren soll, müssen Sie stattdessen >>pureauth<< verwenden, z.\,B. \texttt{{[}pureauth{]}} oder \texttt{{[}pureauthors3{]}.}}
-\begin{labeling}{veryveryveryshorttitle}
+\begin{labeling}{veryshorttitleMM}
\item [\texttt{{[}edtr{]}}]Der Nachname des ersten Herausgebers.
\item [\texttt{{[}editors{]}}]Die Nachnamen aller Herausgeber.
\item [\texttt{{[}edtrIniN{]}}]Der Anfang des Nachnamens von jedem Herausgeber,
\begin{labeling}{00.00.0000}
\item [\texttt{:abbr}]Kürzt den Text, der von einem Feldnamen oder speziellen
Feldmarken gebildet wird. Nur der erste Buchstabe und weitere Buchstaben,
-die auf ein Leerzeichen folgen, werden berücksichtigt. Zum Beispiel
-würde \texttt{{[}journal:}~\\
-\texttt{abbr{]}} die Zeitschrift >>Jorunal of Fish Biology<< zu
+die auf ein Leerzeichen folgen, werden berücksichtigt. So würde beispielsweise
+\texttt{[journal:abbr]} die Zeitschrift >>Journal of Fish Biology<< zu
>>JoFB<< wandeln.
\item [\texttt{:lower}]Wandelt den von der Feldmarke eingefügten Text in
Kleinbuchstaben. So wird beispielsweise bei \texttt{{[}auth:lower{]}}
der Nachname des ersten Autors in Kleinbuchstaben ausgegeben.
\end{labeling}
-Das Standard-Key-Muster, das \bibtex{}-Keys wie \texttt{Yared1998}
+Das Standardmuster, das \bibtex{}-Keys wie \texttt{Yared1998}
erzeugt, ist \texttt{{[}auth{]}{[}year{]}}. Wenn Sie keine Key-Muster
für einen bestimmten Eintragstyp angeben, wird dieses vorgegebene
Muster verwendet. Sie können das vorgegebene Muster natürlich ebenfalls
-anpassen~-- seine Einstellung befindet sich über der Liste der Eintragstypen
-im Tab \menu{Key-Muster} des Dialogs \menu{Einstellungen}.
+anpassen%~-- seine Einstellung befindet sich über der Liste der Eintragstypen
+%im Tab \menu{Key-Muster} des Dialogs \menu{Einstellungen}
+.
-Beachten Sie, dass \jabref{} Umlaute und Buchstaben mit Akzenten
+Beachten Sie, dass \jabref Umlaute und Buchstaben mit Akzenten
sowie das ß beim Erstellen von \bibtex{}-Keys verändert, um möglichen
Problemen vorzubeugen. Hierzu einige Beispiele:
\subsubsection{Ersetzen eines regulären Ausdrucks}
-Nachdem das Key-Muster angewendet wurde, um einen \bibtex{}-Key zu erstellen, können Sie den Key-Generator nach einem bestimmten regulären Ausdruck suchen und ihn durch eine Zeichenfolge ersetzen lassen. Der reguläre Ausdruck und die Zeichenfolge, die ihn ersetzen soll, werden in den Textfeldern unter der Liste der Key-Muster eingegeben. Falls das Feld zur Ersetzung des regulären Ausdrucks leer ist, werden die mit der Suche übereinstimmenden regulären Ausdrücke einfach gelöscht.
+Nachdem das Key"=Muster angewendet wurde, um einen \bibtex{}"=Key zu erstellen, können Sie den Key"=Generator nach einem bestimmten regulären Ausdruck suchen und diesen durch eine Zeichenfolge ersetzen lassen. Der reguläre Ausdruck und die Zeichenfolge, die ihn ersetzen soll, werden in den Textfeldern unter der Liste der Key"=Muster eingegeben. Falls das Feld zur Ersetzung des regulären Ausdrucks leer ist, werden die mit der Suche übereinstimmenden regulären Ausdrücke einfach gelöscht.
\subsection{Eintragsvorschau}
\label{PreviewHelp}Die Eintragsvorschau wird mit denselben Mechanismen
erstellt, die auch bei den Exportfiltern angewendet werden. Bei der
Vorschau durchläuft ein Eintrag eins von zwei möglichen Layouts (die
-sie mit STRG-F9 wechseln können) und erstellt HTML-Code, der im Vorschaudialog
+sie mit F9 wechseln können) und erstellt HTML-Code, der im Vorschaudialog
am unteren Bildschirmrand angezeigt wird.
Aussehen und Inhalt der Vorschau können mit derselben Syntax verändert
\subsection{Exportfilter}
-\label{CustomExports}Mit \jabref{} können Sie Ihre eigenen Exportfilter
-definieren und genau so wie die Standard-Exportfilter benutzen. Ein
-Exportfilter wird durch eine oder mehrere \emph{Layout-Dateien} definiert,
+\label{CustomExports}Mit \jabref können Sie Ihre eigenen Exportfilter
+definieren und genau so wie die Standard"=Exportfilter benutzen. Ein
+Exportfilter wird durch eine oder mehrere \emph{Layout"=Dateien} definiert,
die mittels eingebauter Formatierprogramme das Format der exportierten
Dateien festlegen. Ihre Layout-Datei müssen Sie in einem separaten
-Texteditor erstellen.
+Text\-editor erstellen.
-\subsubsection{Hinzufügen eines Exportfilters}
+\subsubsection{Hinzufügen eines Exportfilters}\label{subsubsec:Hinzufuegen-Exportfilter}
-Die einzige Voraussetzung für einen Exportfilter ist, daß eine Datei
+Die einzige Voraussetzung für einen Exportfilter ist, dass eine Datei
mit der Endung \texttt{.layout} vorhanden ist. Um einen neuen, eigenen
Exportfilter hinzuzufügen, öffnen Sie das Dialogfenster \menu{Optionen}
\msep{} \menu{Verwalte externe Exportfilter} und klicken auf die
Schaltfläche \menu{Neu}. Es öffnet sich ein neues Fenster, in dem
-Sie einen Namen (der im Menü \menu{Datei} \msep{} \menu{Externe Exportfilter}
-angezeigt wird), eine Pfadangabe zur \texttt{.layout}-Datei und die
+Sie einen Namen (der als Auswahl im Dateityp"=Dropdownmenü erscheint, wenn man \menu{Datei \msep{} Exportieren} im JabRef"=Hauptfenster wählt), eine Pfadangabe zur \texttt{.layout}-Datei und die
gewünschte Dateiendung für den Exportfilter angeben können. Wenn Sie
-den Exportfilter benutzen, wird diese Endung im Datei-Dialog automatisch
+den Exportfilter benutzen, wird diese Endung im Datei"=Dialog automatisch
vorgeschlagen.
Um einen Eindruck zu bekommen, wie Exportfilter auszusehen haben,
suchen Sie am besten auf unserer Homepage nach dem Paket, das die
-Layout-Dateien der Standard-Exportfilter enthält.
+Layout"=Dateien der Standard"=Exportfilter enthält.
Nehmen wir einmal an, dass wir einen HTML-Exportfilter erstellen wollen.
Der Exportfilter muss lediglich aus einer einzigen \texttt{.layout}-Datei
bestehen, die in diesem Fall \texttt{html.layout} genannt werden könnte.
Sie können darüber hinaus auch zwei Dateien mit den Namen \texttt{html.begin.layout}
und \texttt{html.end.layout} anlegen. Die erste dieser beiden Dateien
-enthält den Kopfteil der Ausgabe, die zweite den Fußteil. \jabref{}
-sucht jedes Mal, wenn der Exportfilter benutzt wird, nach diesen Dateien
+enthält den Kopfteil der Ausgabe, die zweite den Fußteil. \jabref
+sucht jedesmal wenn der Exportfilter benutzt wird nach diesen Dateien
und fügt sie~-- falls sie gefunden werden~-- wörtlich vor bzw. nach
den einzelnen Einträgen in die Ausgabe ein.
</BODY>
</HTML>
\end{lstlisting}
-Die Datei \texttt{html.layout} stellt die \emph{Standard}-Formatvorlage
+Die Datei \texttt{html.layout} stellt die \emph{Standard}"=Formatvorlage
für den Export eines einzelnen Eintrags bereit. Falls Sie unterschiedliche
Formatvorlagen für verschiedene Eintragstypen anwenden wollen, müssen
-Sie Eintrags-spezifische \texttt{.layout}-Dateien erstellen. Diese
-müssen sich ebenfalls in demselben Verzeichnis wie die Haupt-Layout-Datei
+Sie typspezifische \texttt{.layout}"=Dateien erstellen. Diese
+müssen sich ebenfalls in demselben Verzeichnis wie die Haupt"=Layout"=Datei
befinden und den Namensbestandteil \texttt{.entrytype} enthalten.
Der Name des Eintragstyps muss komplett in Kleinbuchstaben geschrieben
werden. In unserem Beispiel wollen wir eine Formatvorlage für Einträge
des Typs \emph{book} haben, die in der Datei \texttt{html.book.layout}
abgelegt wird. Für eine Dissertation würden wir die Datei \texttt{html.phdthesis.layout}
-anlegen~-- und so weiter. Diese Dateien sind der Standard-Layout-Datei
+anlegen~-- und so weiter. Diese Dateien sind der Standard"=Layout"=Datei
sehr ähnlich, nur dass sie lediglich für Einträge des entsprechenden
-Typs genutzt werden. Achten Sie darauf, dass die Standard-Layout-Datei
+Typs genutzt werden. Achten Sie darauf, dass die Standard"=Layout"=Datei
so allgemein gehalten wird, dass sie die meisten Eintragstypen abdeckt.
\paragraph{Das Format der Layout-Datei}
-Layout-Dateien werden mit einem einfachen markup-Format erstellt,
+Layout"=Dateien werden mit einem einfachen mark\-up"=Format erstellt,
bei dem die Kommandos mit einem >>backslash<< (\texttt{\textbackslash{}})
eingeleitet werden. Alle Textbestandteile, die nicht als Kommando
identifiziert werden, gelangen direkt in die Ausgabedatei.
\paragraph{Feldformatierer}
+\label{par:Feldformatierer}
Oft muss der Feldinhalt vor der Ausgabe verarbeitet werden. Dies wird
mit Hilfe eines \emph{Feldformatierers} gemacht~-- einer java class,
formatiert anschließend das Ergebnis. Auf diese Weise können Sie eine
beliebige Anzahl an Formatierern auflisten.
-\jabref{} bietet die folgenden Formatierer, wobei einige von anderen
+\jabref bietet die folgenden Formatierer, wobei einige von anderen
abhängen:
-\begin{labeling}{veryveryveryshorttitle}
+\begin{labeling}{MMMM}
\item [\texttt{HTMLChars}]ersetzt \TeX{}-spezifische Sonderzeichen wie
\texttt{\{\textbackslash{}\textasciicircum{}a\}} oder \texttt{\{\textbackslash{}\char`\"{}\{o\}\}}
durch ihre HTML-Entsprechungen.
+\item [\texttt{HTMLParagraphs}]interpretiert zwei aufeinanderfolgende Zeilenumbrüche (z.\,B. \lstinline{\n \n}) als Beginn eines neuen Absatzes und erstellt dementsprechend Absatz-HTML-Tags.
\item [\texttt{XMLChars}]ersetzt \TeX{}-spezifische Sonderzeichen wie \texttt{\{\textbackslash{}\textasciicircum{}a\}}
oder \texttt{\{\textbackslash{}\char`\"{}\{o\}\}} durch ihre XML-Entsprechungen.
\item [\texttt{CreateDocBookAuthors}]formatiert das author-Feld im DocBook-Stil.
+\item [\texttt{CreateDocBookEditors}]\emph{Dokumentation folgt.}
+\item [\texttt{CurrentDate}]gibt das aktuelle Datum aus. Ohne Argument gibt dieser Formatierer das aktuelle Datum im Format ">JJJJ.MM.TT HH:MM:SS Z"< (Datum, Zeit und Zeitzone) aus. Mit einem anderen Format-String als Argument kann das Datum angepasst werden. So ergibt \lstinline{\format[CurrentDate]}\texttt{\{}\lstinline{yyyy.MM.dd}\texttt{\}} nur das Datum, z.\,B. ">2005.11.30"<.
\item [\texttt{AuthorFirstFirst}]formatiert die Felder \emph{author}/\emph{editor}
mit den Vornamen zuerst.
\item [\texttt{AuthorFirstFirstCommas}]formatiert die Felder \emph{author}/\emph{editor}
mit den Vornamen zuerst und abgetrennt durch Kommas.
+\item [\texttt{AuthorFirstAbbrLastCommas}]\emph{Dokumentation folgt.}
+\item [\texttt{AuthorFirstAbbrLastOxfordCommas}]\emph{Dokumentation folgt.}
+\item [\texttt{AuthorFirstLastOxfordCommas}]\emph{Dokumentation folgt.}
\item [\texttt{AuthorLastFirst}]formatiert die Felder \emph{author}/\emph{editor}
mit den Nachnamen zuerst.
\item [\texttt{AuthorLastFirstAbbreviator}]kürzt die Vornamen aller Autoren.
Dieser Formatierer kann nur angewendet werden, wenn \texttt{AuthorLastFirst}
bereits benutzt wurde.
+\item [\texttt{AuthorLastFirstCommas}]\emph{Dokumentation folgt.}
+\item [\texttt{AuthorLastFirstOxfordCommas}]\emph{Dokumentation folgt.}
+\item [\texttt{AuthorLastFirstAbbrCommas}]\emph{Dokumentation folgt.}
+\item [\texttt{AuthorLastFirstAbbrOxfordCommas}]\emph{Dokumentation folgt.}
\item [\texttt{AuthorAndsReplacer}]ersetzt >>and<< zwischen den Namen
durch >>;<<, zwischen den letzten beiden Autoren steht >>\&<<.
\item [\texttt{AuthorAndsCommaReplacer}]ersetzt >>and<< zwischen den
Namen durch ein Komma (,) sowie >>\&<< zwischen den beiden letzten.
+\item [\texttt{AuthorOrgSci}]Der erste Autor erscheint als "Nachname, Vorname", alle anderen als "Vorname Nachname". Vornamen werden abgekürzt.
+\item [\texttt{AuthorAbbreviator}]\emph{Dokumentation folgt.}
+\item [\texttt{AuthorNatBib}]formatiert Autorennamen im Natbib-Stil, also nur mit Nachnamen; zwei Autoren werden durch ein ">and"< voneinander getrennt, bei mehr als zwei Autoren wird der erste angegeben, gefolgt von ">et al."<
+\item [\texttt{NoSpaceBetweenAbbreviations}]Leerzeichen zwischen mehreren abgekürzten Vornamen werden gelöscht.
\item [\texttt{FormatPagesForHTML}]ersetzt >>\texttt{-{}-}<< durch >>\texttt{-}<<.
\item [\texttt{FormatPagesForXML}]ersetzt >>\texttt{-{}-}<< durch einen
XML en-dash (>>--<<).
\item [\texttt{RemoveBrackets}]entfernt alle geschweiften Klammern (>>\{<<
und >>\}<<).
+\item [\texttt{RemoveBracketsAddComma}]\emph{Dokumentation folgt.}
+\item [\texttt{RemoveWhitespace}]\emph{Dokumentation folgt.}
\item [\texttt{RemoveLatexCommands}]entfernt \LaTeX{} Kommandos wie \texttt{\textbackslash{}em},
\texttt{\textbackslash{}textbf} etc. Zusammen mit \texttt{HTMLChars}
oder \texttt{XMLChars} sollte dieser Formatierer zuletzt aufgerufen
werden.
\item [\texttt{ToLowerCase}]macht aus allen Buchstaben Kleinbuchstaben.
+\item [\texttt{CompositeFormat}]\emph{Dokumentation folgt.}
+\item [\texttt{GetOpenOfficeType}]\emph{Dokumentation folgt.}
+\item [\texttt{RTFChars}]\emph{Dokumentation folgt.}
+\item [\texttt{ResolvePDF}]\emph{Dokumentation folgt.}
\end{labeling}
Falls keiner der verfügbaren Formatierer das Ergebnis erzielt, das
Sie erreichen möchten, können Sie Ihren eigenen Formatierer hinzufügen,
-indem Sie das \texttt{net.sf.jabref.ex\allowbreak port.layout.LayoutFormatter}-Interface
-implementieren. Wenn Sie Ihre Klasse (class) in das Paket \texttt{net.sf.jabref.export.}\allowbreak \texttt{layout.format}
-einfügen, können Sie den Formatierer mit seinem Klassennamen aufrufen,
-so wie auch die Standard-Formatierer. Ansonsten müssen Sie den Formatierer
+indem Sie das \lstinline{net.sf.jabref.export.layout.LayoutFormatter}-Interface
+implementieren. Wenn Sie in das Paket \lstinline{net.sf.jabref.export.layout.format} Ihre Klasse (class) einfügen, können Sie den Formatierer mit seinem Klassennamen aufrufen,
+so wie auch die Standard"=Formatierer. Ansonsten müssen Sie den Formatierer
mit seinem vollen Namen aufrufen (inklusive Paketname). In jedem Fall
-muss der Formatierer in ihrem classpath sein, wenn Sie \jabref{}
+muss der Formatierer in ihrem classpath sein, wenn Sie \jabref
starten.
\end{lstlisting}
Die Kommandos \texttt{\textbackslash{}begin} und \texttt{\textbackslash{}end}
sorgen dafür, dass der Text, den sie einschließen, nur dann ausgegeben
-wird, falls das Feld, auf das in den geschweiften Klammern verwiesen
+wird, wenn das Feld, auf das in den geschweiften Klammern verwiesen
wird, für den zu exportierenden Eintrag definiert und damit nicht
leer ist.
\subsection{Importfilter}
-\noindent \jabref{} bietet Ihnen die Möglichkeit, ganz ähnlich den Standard-Importern, eigene Importer
-zu definieren und zu benutzen. Man definiert einen Importer durch eine oder mehrere Java
-\emph{Klassen}, die Dateiinhalte aus einem sogenannten \emph{Input stream} lesen
+\noindent \jabref bietet Ihnen die Möglichkeit, ganz ähnlich den Standard-Importern, eigene Importer
+zu definieren und zu benutzen. Man definiert einen Importer durch eine oder mehrere Java"=\emph{Klassen},
+die Dateiinhalte aus einem sogenannten \emph{Input stream} lesen
und daraus \bibtex{}-Einträge erzeugen. Sie können vorkompilierte Importer einbinden, die Sie vielleicht
-von SourceForge erhalten haben (siehe Abschnitt >>Ihre Arbeit anderen zur Verfügung stellen<<,
-S.\,\pageref{subsec:Ihre-Arbeit}). Sie können auch
-mit Grundkenntnissen der Java-Programmierung eigene Importer für für Sie wichtige Referenzquellen
-erstellen oder neue, verbesserte Versionen existierender Importer einbinden, ohne \jabref{} neu zu
+von SourceForge erhalten haben (siehe Abschnitt ">\nameref{subsec:Ihre-Arbeit}"<). Sie können auch
+mit Grundkenntnissen der Java"=Programmierung eigene Importer für Referenzquellen, die für Sie wichtig sind,
+erstellen oder neue, verbesserte Versionen existierender Importer einbinden, ohne \jabref neu zu
kompilieren.
\paragraph{Vorrangsregeln}
Externe Importfilter haben Vorrang vor Standard-Importern. So können Sie mit Ihren Importern
-die existierenden in der automatischen Formaterkennung und an der Kommandozeile in \jabref{} überschreiben.
-Externe Importfilter selbst sind dann nach Namen sortiert.
+die existierenden Importer in der automatischen Formaterkennung und an der Kommandozeile in \jabref überschreiben. Externe Importfilter selbst sind dann nach Namen sortiert.
\subsubsection{Einen externen Importfilter hinzufügen}
Stellen Sie sicher, dass Sie den Importer in kompilierter Form haben (eine oder mehrere
\texttt{.class} Dateien) und dass die Klassendateien
-in einer Verzeichnisstruktur entsprechend ihrer Package-Struktur liegen.
+in einer Verzeichnisstruktur entsprechend ihrer Package"=Struktur liegen.
Um einen neuen externen Importfilter hinzuzufügen, öffnen Sie den Dialog
-\menu{Optionen} \msep{} \menu{Verwalte externe Importfilter}, und klicken Sie auf
-\menu{Aus Klassenpfad hinzufügen}. Ein Dateiauswahl-Fenster erscheint,
-mit dem Sie den Klassenpfad des Importers wählen, dass heißt den obersten Ordner,
-in dem die Package-Struktur Ihres Importers beginnt. In einem zweiten Dateiauswahl-Fenster
-wählen Sie die \emph{.class}-Datei Ihres Importers, die von \texttt{\textbackslash{}ImportFormat} abgeleitet
+\menu{Optionen \msep{} Verwalte externe Importfilter}, und klicken Sie auf
+\menu{Aus Klassenpfad hinzufügen}. Ein Dateiauswahl"=Fenster erscheint,
+mit dem Sie den Klassenpfad des Importers wählen, das heißt den obersten Ordner,
+in dem die Package"=Struktur Ihres Importers beginnt. In einem zweiten Dateiauswahl"=Fenster
+wählen Sie die \emph{.class}"=Datei Ihres Importers, die von \texttt{\textbackslash{}ImportFormat} abgeleitet
ist. Wenn Sie \menu{Klasse auswählen} klicken, erscheint Ihr neuer Importer
in der Liste der externen Importfilter. Alle externen Importfilter erscheinen in den
-\jabref{}-Untermenüs \menu{Datei} \msep{} \menu{Importieren} \msep{} \menu{Externe Importfilter} und
-\menu{Datei} \msep{} \menu{Importieren und Anhängen} \msep{} \menu{Externe Importfilter}.
+\jabref"=Untermenüs \menu{Datei \msep{} Importieren \msep{} Externe Importfilter} und
+\menu{Datei \msep{} Importieren und Anhängen \msep{} Externe Importfilter}.
\tip[Bitte beachten Sie: ]{Wenn Sie die Klassen in ein anderes Verzeichnis verschieben,
müssen Sie den Importer entfernen und neu hinzufügen. Wenn Sie einen Importfilter
-mit einem bereits vorhandenen Namen registrieren, ersetzt \jabref{} den vorhandenen
+mit einem bereits vorhandenen Namen registrieren, ersetzt \jabref den vorhandenen
externen Importfilter. Auch wenn es in manchen Fällen möglich ist, einen schon registrierten
-Importer zu aktualisieren ohne \jabref{} neu zu starten (nämlich dann,
-wenn der Importer nicht im Klassenpfad von \jabref{} ist), empfehlen wir, grundsätzlich
-\jabref{} neu zu starten, wenn Sie ein Update eines externen Importers durchgeführt haben.
+Importer zu aktualisieren ohne \jabref neu zu starten (nämlich dann,
+wenn der Importer nicht im Klassenpfad von \jabref ist), empfehlen wir, grundsätzlich
+\jabref neu zu starten, wenn Sie ein Update eines externen Importers durchgeführt haben.
Sie können auch Importer aus ZIP- oder JAR-Archiven registrieren, wählen Sie einfach
\emph{\menu{Aus Archiv-Datei hinzufügen}}, dann das ZIP- oder JAR-Archiv und dann den Eintrag
(Klassendatei), der den neuen Importer darstellt.}
\subparagraph{SimpleCsvImporter Erstellen}
-Erzeugen Sie in einem Text-Editor eine von \texttt{ImportFormat} abgeleitete Klasse,
-die die Methoden \texttt{getFormatName()},
+Erzeugen Sie in einem Text"=Editor eine Klasse, die von \texttt{ImportFormat} abgeleitet
+ist und die folgende Methoden implementiert:\\
+\texttt{getFormatName()},
\texttt{isRecognizedFormat()}
-und \texttt{importEntries()} implementiert. Hier ein Beispiel:
+und \texttt{importEntries()}.\\
+Hier ein Beispiel:
\begin{lstlisting}
import java.io.*;
import java.util.*;
\subparagraph{SimpleCsvImporter übersetzen}
-Beachten Sie, dass die Beispielklasse im Default"=Package liegt. Angenommen, Sie haben
-sie unter \texttt{/meinpfad/SimpleCsvImporter.java} gespeichert. Nehmen wir weiter an,
-die Datei \texttt{JabRef-2.0.jar} ist im gleichen Verzeichnis wie
+Beachten Sie, dass die Beispielklasse im Default"=Package liegt. Angenommen, sie liegt unter \texttt{/meinpfad\slash{}SimpleCsvImporter.java}, die Datei \texttt{JabRef-2.0.jar} ist im gleichen Verzeichnis wie
\texttt{SimpleCsvImporter.java} und Java ist in Ihrem Kommandopfad.
Kompilieren Sie die Klasse mit JSDK 1.4 zum Beispiel mit folgendem Kommandozeilen"=Aufruf:
\begin{lstlisting}
\subparagraph{SimpleCsvImporter registrieren}
-Öffnen Sie in \jabref{} \menu{Optionen} \msep{} \menu{Verwaltung externer Importfilter} und klicken Sie
+Öffnen Sie in \jabref \menu{Optionen} \msep{} \menu{Verwaltung externer Importfilter} und klicken Sie
auf \menu{Aus Klassenpfad hinzufügen}. Navigieren Sie nach \texttt{/meinpfad} und
klicken Sie \menu{Klassenpfad auswählen}. Wählen Sie dann die Datei \texttt{SimpleCsvImporter.class}
und klicken Sie \menu{Klasse auswählen}. Ihr Importfilter sollte nun in der Liste der
externen Importfilter unter dem Namen >>Simple CSV Importer<< erscheinen und,
sobald Sie \menu{Schließen} gewählt haben, auch in den Untermenüs \menu{Datei} \msep{} \menu{Importieren} \msep{}
\menu{Externe Importfilter} und \menu{Datei} \msep{} \menu{Importieren und Anhängen} \msep{} \menu{Externe Importfilter}
-des \jabref{}-Hauptfensters auftauchen.
+des \jabref-Hauptfensters auftauchen.
\subsection{Teilen Sie Ihre Arbeit mit anderen}
\label{subsec:Ihre-Arbeit}
Mit externen Layout-Dateien und Importfiltern ist es einfach, Ihre eigenen Export-Formate und Importfilter
mit anderen Anwendern gemeinsam zu benutzen. Falls Sie einen Exportfilter oder einen Importfilter
-für ein Format erstellt haben, das noch nicht von \jabref{} unterstützt wird,
+für ein Format erstellt haben, das noch nicht von \jabref unterstützt wird,
oder falls Sie einen bestehenden Exportfilter oder Importfilter verbessern, möchten
-wir Sie ermutigen, Ihre Arbeit auf der \href{http://sourceforge.net/projects/jabref/}{SourceForge.net-Seite} bereitzustellen.
+wir Sie ermutigen, Ihre Arbeit auf der \href{http://sourceforge.net/projects/jabref/}{SourceForge.net"=Seite} bereitzustellen.
Dasselbe gilt für Formatierklassen, die Sie schreiben. Wir würden
-uns freuen, eine Sammlung von bereitgestellten Layout-Dateien verteilen
-zu können oder die Standard-Export-Filter, -Formatierer und -Importfilter
+uns freuen, eine Sammlung von bereitgestellten Layout"=Dateien verteilen
+zu können oder die Standard"=Exportfilter, -Formatierer und -Importfilter
zu erweitern.
\clearpage
F11\tabularnewline
Sitzung laden&
F12\tabularnewline
-\jabref{} beenden&
+\jabref beenden&
STRG-Q\tabularnewline
\end{longtable}
\textbf{Externe Programme / Internet}&
\tabularnewline
\endfirsthead
-Literaturangaben in \LyX{} einfügen&
+Literaturangaben in \LyX einfügen&
STRG-L\tabularnewline
Literaturangaben in WinEdt einfügen&
STRG-SHIFT-W\tabularnewline
\section{Häufige Fragen und Antworten}\label{sec:faq}
%\secttoc
-Die folgenden Fragen und Antworten sind der \href{http://jabref.sourceforge.net/faq.php}{\jabref{}-Homepage} entnommen. Falls Sie darüber hinaus Fragen haben, die das Handbuch nicht beantworten konnte, haben Sie folgende Möglichkeiten, zu einer Antwort zu kommen:
+Die folgenden Fragen und Antworten sind der \href{http://jabref.sourceforge.net/faq.php}{\jabref-Homepage} entnommen. Falls Sie darüber hinaus Fragen haben, die das Handbuch nicht beantworten konnte, haben Sie folgende Möglichkeiten, zu einer Antwort zu kommen:
\begin{enumerate}
\item Durchsuchen Sie die \href{http://sourceforge.net/forum/?group_id=92314}{Foren} auf der Projektseite bei Sourceforge.
- \item Stellen Sie Ihre Frage in der \href{http://sourceforge.net/mail/?group_id=92314}{\jabref{}-Mailingliste}.
+ \item Durchsuchen Sie das \href{http://sourceforge.net/mailarchive/forum.php?forum_name=jabref-users}{Archiv} der \jabref-Mailingliste.
+ \item Stellen Sie Ihre Frage in einem der Foren oder auf der \href{http://sourceforge.net/mail/?group_id=92314}{\jabref-Mailingliste}.
\end{enumerate}
-\faq{Läuft \jabref{} unter freiem Java (Classpath, Kaffee GCJ etc.)?}{Am 13.~November~2006 hat Sun sein Java unter die GNU General Public License (Version~2) gestellt, so dass die Antwort ">Ja"< lautet. Ansonsten ist zu sagen, dass eine unserer Abhängigkeiten derzeit zu einem Absturz führt, wenn mit einer anderen Java API als der von Sun gearbeitet wird. Das gilt für Version 0.92 von Classpath.}
+\faq{Läuft \jabref unter freiem Java (Classpath, Kaffee GCJ etc.)?}{Am 13.~November~2006 hat Sun sein Java unter die GNU General Public License (Version~2) gestellt, so dass die Antwort ">Ja"< lautet. Ansonsten ist zu sagen, dass eine unserer Abhängigkeiten derzeit zu einem Absturz führt, wenn mit einer anderen Java API als der von Sun gearbeitet wird. Das gilt für Version 0.92 von Classpath.}
-\faq{\label{faq-linux}\jabref{} startet nicht unter Linux. Was kann ich tun?}{\jabref{} läuft unter Linux, wenn Sie eine Java Runtime Environment (JRE) von Sun in der Version~1.4.2 oder einer neueren Version verwenden. Falls \jabref{} dennoch nicht starten sollte, können Sie folgende Fehlersuche durchführen:
+\faq{\label{faq-linux}\jabref startet nicht unter Linux. Was kann ich tun?}{\jabref läuft unter Linux, wenn Sie eine Java Runtime Environment (JRE) von Sun in der Version~1.4.2 oder einer neueren Version verwenden. Falls \jabref dennoch nicht starten sollte, können Sie folgende Fehlersuche durchführen:
Starten Sie \texttt{java -{-}version} von der Kommandozeile. Falls dabei kein Produkt von Sun Microsystems verwendet wird (sondern beispielsweise angezeigt wird, dass Sie GCJ VM verwenden), selbst wenn Sie die JRE von Sun installiert haben, müssen Sie Ihr Setup anpassen. Da das Vorgehen dafür sehr von Ihrer Linux-Distribution abhängt, können wir keine Hinweise für jede mögliche Konstellation geben.
Unter Debian/Ubuntu können Sie die Einstellungen anpassen, indem Sie \texttt{sudo update-alternatives -{-}config java} aufrufen (dazu brauchen Sie admin-Rechte). In dem Dialog, der daraufhin erscheint, wählen Sie die Sun JDK oder JRE. Alternativ können Sie auch nach der Java-Programmdatei suchen und diese direkt ausführen. In Ubuntu findet man Java gewöhnlich unter \texttt{/usr\slash{}lib\slash{}jvm\slash{}java-1.5.0-sun\slash{}jre\slash{}bin\slash{}java}.
Wenn Sie keine admin-Rechte auf dem Computer haben, können Sie die Sun JRE in ihrem Home-Verzeichnis installieren. Sie müssen dann darauf achten, dass Sie die richtige Programmdatei aufrufen. Wenn Sie die JRE z.\,B. in einen Ordner namens ">java"< in ihrem Home-Verzeichnis installiert haben, geben Sie \texttt{\texttildelow{}/java/jre/bin/java -jar JabRef-2.1.jar} (bzw. die entsprechende Versionsnummer) in der Kommandozeile ein.}
-\clearpage\faq{Ich arbeite unter Ubuntu und \jabref{} startet, wenn ich auf das Icon klicke, aber nicht von der Kommandozeile. Wo liegt das Problem?}{Sie haben mehrere Java Virtual Machines installiert und von der Kommandozeile wird die falsche gewählt. Schauen Sie unter Frage \ref{faq-linux} nach, wie Sie die Einstellungen ändern können.}
+\clearpage\faq{Ich arbeite unter Ubuntu und \jabref startet, wenn ich auf das Icon klicke, aber nicht von der Kommandozeile. Wo liegt das Problem?}{Sie haben mehrere Java Virtual Machines installiert und von der Kommandozeile wird die falsche gewählt. Schauen Sie unter Frage \ref{faq-linux} nach, wie Sie die Einstellungen ändern können.}
+
+\faq{Wie kann ich verhindern, dass \jabref beim Speichern der .bib"=Datei in bestimmten Feldern (wie \texttt{title}) Zeilenumbrüche einfügt?}{Öfnnen Sie \menu{Optionen \msep{} Einstellungen}. Im Bereich \menu{Allgemein} gibt es die Option \menu{Beim Speichern keinen Zeilenumbruch in den folgenden Feldern einfügen}. Diese Option enthält eine Liste von Feldnamen. In Feldern, die Sie dieser Liste hinzufügen (abgetrennt mit einem Semikolon) wird beim Speichern kein Zeilenumbruch hinzugefügt.}
+
+\faq{Mein Virenscanner sagt mir, dass \jabref ein Virus ist. Ist der Server gefährdet?}{Nein, aber der Windows"=Installer benutzt das \href{http://nsis.sourceforge.net/}{Nullsoft Scriptable Install System (NSIS)} in der Version~2.18 (seit \jabref~2.1), das unglücklicherweise Installer produziert, die von einigen Virenscannern als Virus eingeschätzt werden. Wenn Sie mehr darüber erfahren wollen, sehen Sie sich die \href{http://forums.winamp.com/showthread.php?postid=1977648}{Diskussion im NSIS"=Forum} oder die \href{http://nsis.sourceforge.net/NSIS_False_Positives}{Liste der NSIS ">false positives"<} an.
+
+Als Workaround und falls Sie Bedenken haben, den Installer zu benutzen, können Sie immer die plattformunabhängige jar"=Datei benutzen (siehe dazu Abschnitt ">\nameref{subsub:jar}"<).}
\clearpage
\section{Entwicklung}
\secttoc
\bigskip
-\noindent \jabref{} ist ein \emph{Open Source} Projekt, das heißt, dass jede(r)
+\noindent \jabref ist ein \emph{Open Source} Projekt, das heißt, dass jede(r)
dazu beitragen kann, das Programm zu verbessern und weiterzuentwickeln.
Wenn Sie Anregungen, Wünsche oder Fragen haben, ist die erste Anlaufstelle
die \href{http://sourceforge.net/projects/jabref/}{Projektseite bei \emph{Sourceforge}}.
Dort gibt es Foren, in denen Sie Ihre Fragen stellen können, und eine
-Mailingliste rund um \jabref{}. Auch Ihre Wünsche \emph{(Feature
+Mailingliste rund um \jabref. Auch Ihre Wünsche \emph{(Feature
Requests)} und Fehlermeldungen \emph{(Bug Reports)} können Sie dort
loswerden. Um sich direkt als Entwickler einzubringen, wenden Sie
sich an einen der beiden Maintainer (Morten O. Alver und Nizar N.
\subsection{Danksagung}
-Neben den Entwicklern, die die Hilfe-Seiten des Programms geschrieben haben, möchte ich Thomas Fritz, Axel Junge und Tobias Wolf für ihre hilfreichen Tipps und Anmerkungen zum Handbuch danken.
+Neben den Entwicklern, die die Hilfe"=Seiten des Programms geschrieben haben, danke ich Robert Bitsche, Daniel Förderer, Thomas Fritz, Axel Junge, Jan Suhr und Tobias Wolf für ihre hilfreichen Tipps und Anmerkungen zum Handbuch.
Seit den Anfängen als \emph{BibKeeper} (von Morten O.~Alver) und \emph{JBibtexManager} (von Nizar N.~Batada) haben
zahlreiche Personen dazu beigetragen, dass \jabrefversion{} zu dem
\subsection{Lizenz}
-\jabref{} ist frei verfügbar unter den Bedingungen der \href{http://www.gnu.org/copyleft/gpl.html}{GNU General Public License}. Es gibt unterschiedliche Softwarepakete, die von \jabref{} genutzt werden. Wenn Sie sich über die Lizenzbestimmungen dieser Fremdsoftware informieren wollen, schauen Sie bitte unter \menu{Hilfe \msep{} Über JabRef} nach.
+\jabref ist frei verfügbar unter den Bedingungen der \href{http://www.gnu.org/copyleft/gpl.html}{GNU General Public License}. Es gibt unterschiedliche Softwarepakete, die von \jabref genutzt werden. Wenn Sie sich über die Lizenzbestimmungen dieser Fremdsoftware informieren wollen, schauen Sie bitte unter \menu{Hilfe \msep{} Über JabRef} nach.
\appendix
\newpage
+\nocite{*}
+\hypertarget{bibliography}{}
\bibliographystyle{jurabib}
\bibliography{JabRef-UserManual_de}
-
\newpage
\addsec{Versionsgeschichte}
\label{RevisionHistory}
-%\begin{revhist}{\versiondate}%Datum}
+%\begin{revhist}{\versiondate}%endgültiges Datum}
%\item Änderung
%\end{revhist}
-\begin{revhist}{\versiondate}%Datum}
+\begin{revhist}{\versiondate}%endgültiges Datum}
+\item Kleine Änderungen
+\end{revhist}
+
+\begin{revhist}{8.\,6.\,2007}
+\item Abschnitt ">Import und Export"< in zwei Abschnitte unterteilt
+\item Abschnitt \nameref{sec:faq} ergänzt
+\item Abschnitte \nameref{EntryEditorHelp} und \nameref{subsec:System-Voraussetzungen} angepasst
+\item Fehler im Abschnitt \nameref{PreviewHelp} korrigiert
+\item Versionsnummer angepasst
+\item Beschreibung der Felder ">doi"< und ">eid"< hinzugefügt
+\item Fehler im Link zum Mail-Archiv beseitigt
+\item Einleitung leicht ergänzt
+\item Generelle Überarbeitung des Dokuments
+\end{revhist}
+
+\begin{revhist}{18.\,4.\,2007}
+\item Abschnitte \nameref{LabelPatterns}, \nameref{par:Feldformatierer} und \nameref{StringEditorHelp} aktualisiert
+\item Fehler in Abschnitt \nameref{subsec:Starten-Kommandozeile} entfernt
+\item \jabref-Logo geändert
+\item Ein paar Kleinigkeiten
+\end{revhist}
+
+\begin{revhist}{20.\,3.\,2007}
+\item Abschnitt \nameref{subsubsec:Hinzufuegen-Exportfilter} angepasst
+\item Kleinere Änderungen
+\end{revhist}
+
+\begin{revhist}{1.\,2.\,2007}
+\item Abschnitte \nameref{EndnoteFilters}, \nameref{subsubsec:endnote-jabref}, \nameref{subsec:about} und \nameref{sec:faq} überarbeitet
+\item Literaturverzeichnis um Eintrag von \cite{btxfaq} ergänzt
+\item Und noch ein paar kleine Änderungen
+\end{revhist}
+
+\begin{revhist}{19.\,1.\,2007}
+\item Abschnitt ">\nameref{Eintragstypen}"< hinzugefügt
\item Grafik auf Titelseite ausgetauscht
\item Ein paar kleinere Änderungen
\end{revhist}
\end{revhist}
\begin{revhist}{30.\,1.\,2006}
-\item Abschnitt >>\jabref{}-Bibliographien in OpenOffice.org benutzen<< aktualisiert
+\item Abschnitt >>\jabref-Bibliographien in OpenOffice.org benutzen<< aktualisiert
\item Abschnitt zur Erzeugung der \bibtex{}-Keys aktualisiert
\item Neues Kapitel (>>Externe Importfilter<<), geschrieben von Andreas Rudert
\item Einige kleinere Änderungen
und den Hilfeseiten des Programms
\end{revhist}
-\end{document}
\ No newline at end of file
+\end{document}
<li><b>[<code>authN_M</code>]</b>: Die ersten N Buchstaben des Nachnamens des M. Autors.<BR>
<li><b>[<code>auth.auth.ea</code>]</b>: Die Nachnamen der beiden ersten Autoren und ".ea", falls
es mehr als zwei Autoren sind.<BR>
+<li><b>[<code>auth.etal</code>]</b>: Der Nachname des ersten Autors und der Nachname des zweiten Autors bei zwei Autoren bzw. ".etal" bei mehr als zwei Autoren.
<li><b>[<code>authshort</code>]</b>: Der Nachname bei einem Autor; der erste Buchstabe der Nachnamen von bis zu drei Autoren, falls mehr als ein Autor vorhanden ist. Ein Plus (+) wird angehängt, falls es mehr als drei Autoren gibt.<BR></ul>
<b>Anmerkung:</b>Falls es keinen Autor gibt (z.B. bei einem Buch mit Herausgeber), benutzen die genannten [auth...]-Feldmarken den oder die Herausgeber, die im editor-Feld angegeben wurden. Also werden die Herausgeber eines Buches ohne Autor für die Label-Erstellung wie Autoren behandelt. Falls Sie dieses Verhalten nicht wünschen und die Feldmarke stattdessen bei einem leeren author-Feld zu nichts expandieren soll, müssen Sie <b>pureauth</b> statt <b>auth</b> verwenden, z.B.: <b>[pureauth]</b> oder <b>[pureauthors3]</b>.
<ul>
ausgegeben wird.
<P>
-Der Verweis auf einen String kann an jeder Stelle in einem beliebigen Feld erscheinen, wobei
+Der Verweis auf einen String kann an jeder Stelle eines Feldes erscheinen, wobei
der Name des Strings immer von einem Paar '#'-Zeichen eingeschlossen werden muss. Diese Syntax
gilt nur für JabRef und weicht ein wenig von der <em>BibTeX</em>-Syntax ab, die erzeugt wird,
-wenn Sie Ihre Datei speichern.
+wenn Sie Ihre Datei speichern. Strings können für alle Standard-BibTeX-Felder verwendet werden.
+Unter <b>Optionen -> Einstellungen -> Allgemein</b> können Sie im Bereich <b>Datei</b> festlegen, ob Strings auch in Nicht-Standard-Feldern benutzt werden dürfen. In diesem Fall können Sie Felder bestimmen, die von der Auflösung der Strings ausgenommen werden; hierbei wird empfohlen, das Feld 'url' und andere Felder anzugeben, die das Zeichen '#' enthalten können und die von BibTeX/LaTeX abgearbeitet werden können.
<P>
-In derselben Weise kann man auch im Inhalt eines Strings auf einen anderen String verweisen,
+In derselben Weise kann man auch im Inhalt eines Strings auf einen anderen String verweisen,
vorausgesetzt, dass der String, auf den verwiesen wird, bereits <em>vorher</em> definiert ist.
<p>Während die Reihenfolge der Strings in Ihrer BibTeX-Datei in einigen Fällen wichtig ist,
Michel Baylac,
Guillaume Gardey,
Cyrille d'Haese,
+S M Mahbub Murshed,
Raik Nagel,
Christopher Oezbek,
Ellen Reitmayr,
<H2>Contributions de :</H2>
Michael Beckmann,
-Oliver Böckmann,
+Oliver B�ckmann,
Kolja Brix,
Frédéric Darboux,
Fabrice Dessaint,
Nathan Dunn,
Brian Van Essen,
Alexis Gallagher,
+David Gleich,
Sascha Hunold,
Bernd Kalbfuss,
Martin Kähmer,
Christian Kopf,
Jeffrey Kuhn,
Alex Montgomery,
+S. M. Mahbub Murshed,
Ambrogio Oliva,
+Stephan Rave,
John Relph,
Hannes Restel,
Moritz Ringler,
JabRef utilise aussi la bibliothèque de threading Spin 1.3.1, qui est distribuée selon les termes de la Lesser GNU Public License.
<P>
-Certains composants de l'interface graphique de la bibliothèque Microba sont utilisés. Elle est distribuée sous une license de type BSD. Voir <code>http://sourceforge.net/projects/microba/</code> pour plus d'informations.
+Certains composants de l'interface graphique de la biblioth�que Microba sont utilis�s. Elle est distribu�e sous une license de type BSD. Voir <code>http://sourceforge.net/projects/microba/</code> pour plus d'informations.
<P>
-La majorité des icônes proviennent de l'ensemble d'icônes Crystal Clear par Everaldo
-(<code>http://www.everaldo.com</code>), qui est distribuée sous les termes de la
+La majorit� des ic�nes proviennent de l'ensemble d'ic�nes Crystal Clear par Everaldo
+(<code>http://www.everaldo.com</code>), qui est distribu�e sous les termes de la
Lesser General Public License.
<P>
-JabRef utilise les bibliothèques JempBox et PDFBox pour gérer manipuler les PDF, les deux étant
+JabRef utilise les bibliothèques JempBox et PDFBox pour gérer manipuler les PDF, les deux étant
ées sous une licence de style BSD.
</CENTER>
<br>
</li>
+
+ <li><strong>doi<br>
+ </strong>Le Digital Object Identifier ("identifiant d'objet numérique") est l'identifiant permanent donné à un document numérique.<br>
+ <br>
+
+ </li>
+ <li><strong>eid<br>
+ </strong>L'Electronic IDentifier ("identifiant électronique") est utilisé par les journaux électroniques qui ont aussi une version papier. Ce numéro remplace le nombre de pages et est utilisé pour trouver un article dans un volume imprimé. Il est parfois aussi appelé <em>citation number</em>.<br>
+ <br>
+
<li><strong><span style="font-weight: normal; font-style: italic;">contents*</span><br>
</strong>La table des matières<br>
<br>
<h2>Ajout d'un filtre d'exportation personnalisé </h2>
<p>
-La seule obligation pour avoir un filtre d'exportation valide est l'existence d'un fichier avec l'extension <b>.layout</b>. Pour ajouter un nouveau filtre d'exportation, on utilise le menu <b>Options -> Gérer les exportations personnalisées</b>, et on clique sur <b>Ajouter nouvelle</b>. Une nouvelle boite de dialogue apparaît et vous permet de spécifier un nom du nouveau filtre d'exportation (ce nom apparaîtra dans le menu <b>Fichier -> Exportation personnalisée</b> de la fenêtre JabRef), le chemin du fichier <b>.layout</b>, et l'extension de fichier préférée par le filtre d'exportation (c'est cette extension qui sera suggérée dans la boite de dialogue lorsque le filtre sera utilisé).
+La seule obligation pour avoir un filtre d'exportation valide est l'existence d'un fichier avec l'extension <b>.layout</b>. Pour ajouter un nouveau filtre d'exportation, on utilise le menu <b>Options -> Gérer les exportations personnalisées</b>, et on clique sur <b>Ajouter nouvelle</b>. Une nouvelle boite de dialogue apparaît et vous permet de spécifier le nom du nouveau filtre d'exportation (ce nom apparaîtra ensuite comme l'un des choix du menu déroulant "Type de fichier" de la fenêtre de dialogue affectée au menu <b>Fichier -> Exporter</b> de la fenêtre principale de JabRef), le chemin du fichier <b>.layout</b>, et l'extension de fichier préférée par le filtre d'exportation (c'est cette extension qui sera suggérée dans la boite de dialogue lorsque le filtre sera utilisé).
</p>
+
<h2>Création d'un filtre d'exportation</h2>
<p>
<li><code>AuthorLastFirstAbbreviator</code> : réduit les prénoms de tous les auteurs à leurs initiales. Ce formateur nécessite d'avoir préalablement utilisé AuthorLastFirst.
<li><code>AuthorAndsReplacer</code> : remplace "and" par ";" entre les premiers noms et par "&" entre les deux derniers.
<li><code>AuthorAndsCommaReplacer</code> : remplace "and" entre les noms par une virgule (",") et "&" entre les deux derniers.
-<li><code>AuthorOrgSci</code> : premier auteur selon "nom, prénom" et tous les autres selon "prénom nom". Les prénoms sont abrégés.
+<li><code>AuthorOrgSci</code> : premier auteur selon "nom, prénom" et tous les autres selon "prénom nom". Les prénoms sont abrégés.
+<li><code>AuthorAbbreviator</code> : A documenter.
+<li><code>AuthorNatBib</code> : Formats des noms d'auteurs dans le style NatBin, avec les noms propres séparés par "and" s'il y a deux auteurs, ou le premier nom suivi de "et al." s'il y en a plus de deux.
<li><code>FormatPagesForHTML</code> : remplace "--" par "-".
<li><code>FormatPagesForXML</code> : remplace "--" par un tiret XML.
<li><code>RemoveBrackets</code> : supprime toutes les accolades "{" ou "}".
<li><code>RemoveLatexCommands</code> : supprime toutes les commandes LaTeX comme <code>\em</code>, <code>\textbf</code>, etc. Lorsqu'il est utilisé avec <code>HTMLChars</code> ou <code>XMLChars</code>, ce formateur doit être appelé en dernier.
+<li><code>RemoveTilde</code> : remplace le caractère tilde (utilisé dans LaTeX comme un espace insécable) par un espace normal. Utile en combinaison avec NameFormatter comme discuté dans la prochaine section.
<li><code>ToLowerCase</code> : bascule tous les caractères en minuscules.
</ul>
JabRef peut exporter des bases de données dans des fichiers
lisibles par EndNote. Pour utiliser cette fonction,
-choisissez <b>Outils -> EndNote</b>, et
-spécifiez le nom du fichier d'exportation.
+choisissez <b>Fichier -> Export</b>, choisissez le type de fichier
+<b>Endnote (*.txt)</b> et spécifiez le nom du fichier d'exportation.
<h2>Importer dans EndNote</h2>
Le fichier par défaut d'importation d'EndNote ne traite
-pas proprement les auteurs ou les éditeurs multiples.
+pas proprement les auteurs ou les éditeurs multiples.
Il y a deux façons de contourner cela :
<ol>
données ou ouvrez une ancienne base de données dans EndNote.
Ensuite, sélectionnez <b>Fichier -> Importer</b>, cliquer
sur <b>Choisir le filtre</b>, puis sélectionnez le fichier
-exporté et cliquez sur <b>Choisir</b>. Cliquez sur
+exporté et cliquez sur <b>Choisir</b>. Cliquez sur
<b>Options d'importation</b> et sélectionnez
<b>Importation EndNote</b>. Cliquez sur <b>Importer</b> pour
démarrer l'importation. Après l'importation, sélectionnez
<b>Edition-> Changer le texte</b>. Changez <b>N'importe
quel champ</b> en <b>Author</b>. Entrez " and " à l'intérieur
-du champ de recherche (sans les guillemets). Entrez un
+du champ de recherche (sans les guillemets). Entrez un
retour chariot dans le champ Remplacer
(option-return pour Mac OS X, ctrl-return pour Windows
XP). Cliquez sur <b>Remplacer</b>. Répétez avec le champ
de données ou ouvrez une ancienne base de données dans EndNote.
Ensuite, sélectionnez <b>Fichier -> Importer</b>, cliquez
sur <b>Choisir le filtre</b>, puis sélectionnez le fichier
-exporté et cliquez sur <b>Choisir</b>. Cliquez sur
+exporté et cliquez sur <b>Choisir</b>. Cliquez sur
<b>Options d'importation</b> et sélectionnez
<b>Filtre d'importation d'EndNote depuis
JabRef</b> (s'il n'est pas présent, sélectionnez Autres
<h2>Auteurs collectifs</h2>
-Par défaut, le filtre d'exportation suppose que le contenu
+Par défaut, le filtre d'exportation suppose que le contenu
des champs author ou editor qui sont dans des accolades
sont des auteurs collectifs et remplace les accolades par
une virgule. Cependant, cela signifie que les champs qui
<h3>Installation du filtre d'importation d'EndNote depuis JabRef</h3>
-Le filtre par défaut d'importation d'EndNote ne traite pas
+Le filtre par défaut d'importation d'EndNote ne traite pas
correctement les auteurs. Le filtre d'importation d'EndNote depuis
-JabRef le fait proprement. De plus, ce filtre reconnaîtra
+JabRef le fait proprement. De plus, ce filtre reconnaîtra
un champ EndNotereftype qui supplantera la table des correspondances
par défaut. Pour installer ce filtre, extraire les suppléments
-pour EndNote (<b>Fichier -> Exporter - > Décompacter la série de
+pour EndNote (<b>Outils - > Décompacter la série de
filtres EndNote</b>) et décompresser le fichier Zip qui est crée.
Ensuite, suivez les instructions du fichier readme.txt.<p>
Types de Références d'EndNote, extrayez les Suppléments
EndNote et suivez les instructions du fichier readme.txt.<p>
-<h3>Exportation vers JabRef</h3>
+<h3>Exportation vers JabRef</h3>
-EndNote est fourni avec un style d'exportation BibTeX.
+EndNote est fourni avec un style d'exportation BibTeX.
Cependant, il ne prend pas en compte tous les types et les champs BibTeX
et ne prend pas non plus en compte les Champs Généraux additionnels supportés
par JabRef (<i>pdf, owner, key,</i> etc.). Si vous souhaitez
que ces champs soient pris en compte, extrayez les Suppléments EndNote
+(<b>Outils - > Décompacter la série de filtres EndNote</b>)
et suivez les instructions du fichier readme.txt.<p>
</HTML>
<li><b>[<code>authN</code>]</b> : Les N premières lettres du premier auteur.<BR>
<li><b>[<code>authN_M</code>]</b> : Les N premières lettres du nom des M premiers auteurs.<BR>
<li><b>[<code>auth.auth.ea</code>]</b> : Le nom des deux premiers auteurs suivi de ".ea" lorsqu'ils sont plus de deux.<BR>
+<li><b>[<code>auth.etal</code>]</b>: Le nom du premier auteur et le nom du second auteur, ou ".etal" s'il y en a plus de deux.<BR>
<li><b>[<code>authshort</code>]</b> : Le nom s'il n'y a qu'un seul auteur. Jusqu'à trois auteurs, le premier caractère du nom de chacun d'eux. Au delà de trois auteurs, le caractère plus (+) est ajouté.<BR>
</ul>
<b>Note :</b> S'il n'y a pas d'auteur (dans le cas d'un livre édité), alors tous les marqueurs <b><code>[auth...]</code></b> ci-dessus utiliseront l'éditeur(s) (s'il y en a) comme alternative. Ainsi l'éditeur(s) d'un livre sans auteur sera traité comme l'auteur(s) pour la génération des clefs.
<li><b>[<code>shortyear</code>]</b> : Les 2 derniers chiffres de l'année de publication<BR>
<li><b>[<code>veryshorttitle</code>]</b> : Le premier mot du titre qui ne soit pas 'the', 'a', 'an'.<BR>
</ul>
-
+
<p>
Un nom de champs (ou celui de l'un des pseudo-champs vu au dessus) peut, de façon optionnelle, être suivi par un ou plusieurs modificateurs. Les modificateurs sont appliqués dans l'ordre
où ils sont spécifiés.
<P>
Si vous n'avez pas défini de modèle de clef pour un type d'entrées donné, le <b>Modèle de clef par
défaut</b> sera utilisé. Vous pouvez changer le modèle par défaut - son paramétrage se
-trouve au-dessus de la liste des types d'entrées dans la section
+trouve au-dessus de la liste des types d'entrées dans la section
<b>Paramétrage des clefs</b> de la fenêtre <b>Préférences</b>.
<P>
La clef utilisée par défaut est [auth][year]; elle produit des clefs du type <code>Yared1998</code>. Si la clef n'est pas unique dans la base de donnée, elle est modifiée par l'ajout d'une des lettres de a à z et ceci jusqu'a ce quelle soit unique. De cette façon, les étiquettes ressemblent à :
</p>
-<blockquote>
-<code>Yared1998</code><BR>
+<blockquote>
+<code>Yared1998</code><BR>
<code>Yared1998a</code><BR>
-<code>Yared1998b</code>
+<code>Yared1998b</code>
</blockquote>
<h2>Remplacement d'expressions régulières</h2>
en appuyant sur un des icônes de la barre d'outils.
Le raccourci clavier est CTRL-T.</em>
<P>
-Les <em>chaînes</em> sont l'équivalent <em>BibTeX</em> des constantes dans
-un langage de programmation. Chaque chaîne est définie par un <em>nom</em>
+Les <em>chaînes</em> sont l'équivalent <em>BibTeX</em> des constantes dans
+un langage de programmation. Chaque chaîne est définie par un <em>nom</em>
unique et un <em>contenu</em>. Dans votre base de données, ce nom peut être
utilisé pour représenter ce contenu.
du journal est écrit de la même façon à chaque fois.
<P>
-Une telle chaîne peut apparaître n'importe où, dans n'importe quel
-champ, en incluant le nom de la chaîne entre une paire de caractères '#'.
-Cette syntaxe est spécifique à JabRef et diffère légèrement de la notation
-<em>BibTeX</em> qui est utilisée quand vous sauvez votre base de données.
+Une telle chaîne peut apparaître n'importe où dans un champ en incluant
+le nom de la chaîne entre une paire de caractères '#'. Cette syntaxe est spécifique
+à JabRef et diffère légèrement de la notation <em>BibTeX</em> qui
+est produite quand vous sauvez votre base de données. Les chaînes peuvent par défaut être utilisées pour tous
+les champs BibTeX standard, et dans <b>Options -> Préférences -> Général-> Fichier</b>, vous pouvez choisir
+d'autoriser les chaînes pour des champs non-standards. Dans ce dernier cas, vous pouvez spécifier une
+série de champs où les chaînes ne doivent pas être recherchées ; il est recommandé d'y inclure le champ 'url' ainsi que les autres champs qui pourraient contenir des caractères '#' que BibTeX/LaTeX est susceptible de traiter.
<P>
Une chaîne peut être incluse dans le contenu d'une autre chaîne (chaîne
incluante), à la condition que la chaîne incluse soit définie
-<em>avant</em> la chaîne incluante.
+<em>avant</em> la chaîne incluante.
-<p>Alors que l'ordre des chaînes dans votre fichier BibTeX est important dans certains cas,
+<p>Alors que l'ordre des chaînes dans votre fichier BibTeX est important dans certains cas,
vous n'avez pas à vous en préoccuper quand vous utilisez JabRef. Dans l'éditeur de chaînes,
les chaînes seront affichées selon l'ordre alphabétique et stockée dans le même ordre,
excepté quand BibTeX aura besoin d'un ordre différent.
loadSession=fileimport.png
save=filesave.png
saveAs=filesaveas.png
+saveAll=save_all.png
copy=editcopy.png
paste=editpaste.png
cut=editcut.png
psSmall=ps.png
pdfSmall=pdf-document.png
openFile=pdf-document.png
+openExternalFile=ps.png
preferences=advancedsettings.png
openUrl=agt_internet.png
www=agt_internet.png
editPreamble=preamble.png
editStrings=strings.png
emacs=emacs.png
+vim=vim.png
+openoffice=openoffice.png
+picture=colors.png
lyx=lyx2.png
winedt=winedt.png
required=reqIcon.png
integrityCheck=integrity.png
groupIncluding=groupIncluding.png
groupRefining=groupRefining.png
+unknown=help.png
\ No newline at end of file
p.add(remoteHelp.getIconButton());
builder.append(p);
- if (Globals.ON_MAC) {
- builder.nextLine();
- builder.appendSeparator(Globals.lang("Mac file dialog"));
- builder.nextLine();
- builder.append(new JPanel());
- builder.append(useNativeFileDialogOnMac);
- }
+ //if (Globals.ON_MAC) {
+ builder.nextLine();
+ builder.appendSeparator(Globals.lang("Native file dialog"));
+ builder.nextLine();
+ builder.append(new JPanel());
+ builder.append(useNativeFileDialogOnMac);
+ //}
pan = builder.getPanel();
pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
*/
public class AuthorList {
- private Vector authors; // of Author
+ private Vector<Author> authors;
// Variables for storing computed strings, so they only need be created
// once:
// Tokens of one author name.
// Each token occupies TGL consecutive entries in this vector (as described
// below)
- private Vector tokens;
+ private Vector<Object> tokens;
private static final int TOKEN_GROUP_LENGTH = 4; // number of entries for
private static final int TOKEN_WORD = 3;
// Constant Hashtable containing names of TeX special characters
- private static final java.util.Hashtable tex_names = new java.util.Hashtable();
+ private static final java.util.HashSet<String> tex_names = new java.util.HashSet<String>();
// and static constructor to initialize it
static {
- tex_names.put("aa", "aa"); // only keys are important in this table
- tex_names.put("ae", "ae");
- tex_names.put("l", "l");
- tex_names.put("o", "o");
- tex_names.put("oe", "oe");
- tex_names.put("i", "i");
- tex_names.put("AA", "AA");
- tex_names.put("AE", "AE");
- tex_names.put("L", "L");
- tex_names.put("O", "O");
- tex_names.put("OE", "OE");
- tex_names.put("j", "j");
+ tex_names.add("aa");
+ tex_names.add("ae");
+ tex_names.add("l");
+ tex_names.add("o");
+ tex_names.add("oe");
+ tex_names.add("i");
+ tex_names.add("AA");
+ tex_names.add("AE");
+ tex_names.add("L");
+ tex_names.add("O");
+ tex_names.add("OE");
+ tex_names.add("j");
}
- static WeakHashMap authorCache = new WeakHashMap();
+ static WeakHashMap<String, AuthorList> authorCache = new WeakHashMap<String, AuthorList>();
/**
* Parses the parameter strings and stores preformatted author information.
* bibtex field.
*/
protected AuthorList(String bibtex_authors) {
- authors = new Vector(5); // 5 seems to be reasonable initial size
+ authors = new Vector<Author>(5); // 5 seems to be reasonable initial size
orig = bibtex_authors; // initialization
token_start = 0;
token_end = 0; // of parser
*/
private Author getAuthor() {
- tokens = new Vector(); // initialization
+ tokens = new Vector<Object>(); // initialization
von_start = -1;
last_start = -1;
comma_first = -1;
if (current_backslash >= 0 && !Character.isLetter(c)) {
if (!first_letter_is_found) {
String tex_cmd_name = orig.substring(current_backslash + 1, token_end);
- if (tex_names.get(tex_cmd_name) != null) {
+ if (tex_names.contains(tex_cmd_name)) {
token_case = Character.isUpperCase(tex_cmd_name.charAt(0));
first_letter_is_found = true;
}
authorsLastFirst[abbrInt] = res.toString();
return authorsLastFirst[abbrInt];
}
+
+ public String toString(){
+ return getAuthorsLastFirstAnds(false);
+ }
/**
* Returns the list of authors separated by "and"s with first names after
authorsFirstFirst[abbrInt] = res.toString();
return authorsFirstFirst[abbrInt];
}
-
+
+ /**
+ * Compare this object with the given one.
+ *
+ * Will return true iff the other object is an Author and all fields are identical on a string comparison.
+ */
+ public boolean equals(Object o) {
+ if (!(o instanceof AuthorList)) {
+ return false;
+ }
+ AuthorList a = (AuthorList) o;
+
+ return this.authors.equals(a.authors);
+ }
+
/**
* Returns the list of authors separated by "and"s with first names before
* last name; first names are not abbreviated.
* all other methods are provided for completeness.
*/
public static class Author {
+
private final String first_part;
private final String first_abbr;
private final String jr_part;
+ /**
+ * Compare this object with the given one.
+ *
+ * Will return true iff the other object is an Author and all fields are identical on a string comparison.
+ */
+ public boolean equals(Object o) {
+ if (!(o instanceof Author)) {
+ return false;
+ }
+ Author a = (Author) o;
+ return Util.equals(first_part, a.first_part)
+ && Util.equals(first_abbr, a.first_abbr)
+ && Util.equals(von_part, a.von_part)
+ && Util.equals(last_part, a.last_part)
+ && Util.equals(jr_part, a.jr_part);
+ }
+
/**
* Creates the Author object. If any part of the name is absent, <CODE>null</CODE>
* must be passes; otherwise other methods may return erroneous results.
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
+import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
-import java.io.StringWriter;
import java.nio.charset.UnsupportedCharsetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import java.util.Vector;
-import javax.swing.AbstractAction;
-import javax.swing.BorderFactory;
-import javax.swing.JFileChooser;
-import javax.swing.JList;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JSplitPane;
-import javax.swing.JTextArea;
-import javax.swing.ListSelectionModel;
-import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileFilter;
import javax.swing.tree.TreePath;
import javax.swing.undo.CannotRedoException;
import net.sf.jabref.collab.FileUpdateListener;
import net.sf.jabref.collab.FileUpdatePanel;
import net.sf.jabref.export.*;
-import net.sf.jabref.external.AutoSetExternalFileForEntries;
-import net.sf.jabref.external.WriteXMPAction;
+import net.sf.jabref.external.*;
import net.sf.jabref.groups.GroupSelector;
import net.sf.jabref.groups.GroupTreeNode;
-import net.sf.jabref.gui.GlazedEntrySorter;
-import net.sf.jabref.gui.MainTable;
-import net.sf.jabref.gui.MainTableFormat;
-import net.sf.jabref.gui.MainTableSelectionListener;
+import net.sf.jabref.gui.*;
import net.sf.jabref.imports.AppendDatabaseAction;
import net.sf.jabref.imports.BibtexParser;
import net.sf.jabref.journals.AbbreviateAction;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.uif_lite.component.UIFSplitPane;
+import javax.swing.*;
+
public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListener {
public final static int SHOWING_NOTHING=0, SHOWING_PREVIEW=1, SHOWING_EDITOR=2, WILL_SHOW_EDITOR=3;
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints con = new GridBagConstraints();
- //Hashtable autoCompleters = new Hashtable();
+ HashMap autoCompleters = new HashMap();
// Hashtable that holds as keys the names of the fields where
// autocomplete is active, and references to the autocompleter objects.
private boolean suppressOutput = false;
- private HashMap actions = new HashMap();
+ private HashMap<String, Object> actions = new HashMap<String, Object>();
private SidePaneManager sidePaneManager;
/**
}
setupActions();
setupMainPanel();
- /*if (Globals.prefs.getBoolean("autoComplete")) {
- db.setCompleters(autoCompleters);
- }*/
metaData.setFile(file);
}
private void setupActions() {
-
+
actions.put("undo", undoAction);
actions.put("redo", redoAction);
actions.put("test", new BaseAction () {
public void action() throws Throwable {
- ExportFormats.initAllExports();
- JFileChooser fc = ExportFormats.createExportFileChooser("/home/alver/Documents");
- fc.showSaveDialog(frame);
- File file = fc.getSelectedFile();
- if (file == null)
- return;
- FileFilter ff = fc.getFileFilter();
- if (ff instanceof ExportFileFilter) {
- ExportFormat format = ((ExportFileFilter)ff).getExportFormat();
- format.performExport(database, file.getPath(), "UTF8", null);
- // Make sure we remember which filter was used, to set the default
- // for next time:
- Globals.prefs.put("lastUsedExport", format.getConsoleName());
-
+ ArrayList<BibtexEntry> entries = new ArrayList<BibtexEntry>();
+ BibtexEntry[] sel = getSelectedEntries();
+ for (int i = 0; i < sel.length; i++) {
+ BibtexEntry bibtexEntry = sel[i];
+ entries.add(bibtexEntry);
}
+ final List<FileListEntry> links =
+ AccessLinksForEntries.getExternalLinksForEntries(entries);
+ for (Iterator<FileListEntry> iterator = links.iterator(); iterator.hasNext();) {
+ FileListEntry entry = iterator.next();
+ System.out.println("Link: "+entry.getLink());
+ };
+
+ final JProgressBar prog = new JProgressBar();
+ prog.setIndeterminate(true);
+ final JDialog diag = new JDialog(frame, false);
+ diag.getContentPane().add(prog, BorderLayout.CENTER);
+ diag.pack();
+ diag.setLocationRelativeTo(frame);
+ diag.setVisible(true);
+ Thread t = new Thread(new Runnable() {
+ public void run() {
+ AccessLinksForEntries.copyExternalLinksToDirectory(links,
+ new File("/home/alver/tmp"), metaData, prog, false,
+ new ActionListener() {
+ public void actionPerformed(ActionEvent actionEvent) {
+ diag.dispose();
+ }
+ });
+ }
+ });
+ t.start();
+
+ //CheckBoxFileChooser cb = new CheckBoxFileChooser(new File(""), "Selected only");
+ //cb.showSaveDialog(frame);
+
+ //ExternalFileTypeEditor efte = new ExternalFileTypeEditor(frame);
+ //efte.setVisible(true);
+ /*NamedCompound ce = Util.upgradePdfPsToFile(database,
+ new String[] {"pdf", "ps"});
+ undoManager.addEdit(ce);
+ markBaseChanged();*/
}
});
try {
// If the option is set, autogenerate keys for all entries that are
// lacking keys, before saving:
- if (Globals.prefs.getBoolean("generateKeysBeforeSaving")) {
- BibtexEntry bes;
- NamedCompound ce = new NamedCompound(Globals.lang("autogenerate keys"));
- boolean any = false;
- for (Iterator i=database.getKeySet().iterator(); i.hasNext();) {
- bes = database.getEntryById((String)i.next());
- String oldKey = bes.getCiteKey();
- if ((oldKey == null) || (oldKey.equals(""))) {
- LabelPatternUtil.makeLabel(Globals.prefs.getKeyPattern(), database, bes);
- ce.addEdit(new UndoableKeyChange(database, bes.getId(), null,
- (String)bes.getField(BibtexFields.KEY_FIELD)));
- any = true;
- }
- }
- // Store undo information, if any:
- if (any) {
- ce.end();
- undoManager.addEdit(ce);
- }
- }
- // Done with autosetting keys. Now save the database:
-
+ autoGenerateKeysBeforeSaving();
+
+ // Now save the database:
success = saveDatabase(getFile(), false, encoding);
//Util.pr("Testing resolve string... BasePanel line 237");
}
});
- actions.put("saveAs", new BaseAction () {
- public void action() throws Throwable {
-
- String chosenFile = Globals.getNewFile(frame, new File(Globals.prefs.get("workingDirectory")), ".bib",
- JFileChooser.SAVE_DIALOG, false);
-
- if (chosenFile != null) {
- metaData.setFile(new File(chosenFile));
- if (!metaData.getFile().exists() ||
- (JOptionPane.showConfirmDialog
- (frame, "'"+metaData.getFile().getName()+"' "+Globals.lang("exists. Overwrite file?"),
- Globals.lang("Save database"), JOptionPane.OK_CANCEL_OPTION)
- == JOptionPane.OK_OPTION)) {
-
- runCommand("save");
-
- // Register so we get notifications about outside changes to the file.
- try {
- fileMonitorHandle = Globals.fileUpdateMonitor.addUpdateListener(BasePanel.this,getFile());
- } catch (IOException ex) {
- ex.printStackTrace();
- }
-
- Globals.prefs.put("workingDirectory", metaData.getFile().getParent());
- frame.getFileHistory().newFile(metaData.getFile().getPath());
- }
- else {
- metaData.setFile(null);
- }
- }
+ actions.put("saveAs", new BaseAction() {
+ public void action() throws Throwable {
+
+ /*JPanel options = new JPanel();
+ DefaultFormBuilder builder = new DefaultFormBuilder(options, new FormLayout("left:pref", "pref, pref, pref"));
+ //options.setLayout(new GridLayout(2,1));
+ ButtonGroup bg = new ButtonGroup();
+ JRadioButton sAll = new JRadioButton("<html>All entries</html>");
+ JRadioButton sSel = new JRadioButton("<html>Selected<br>entries</html>");
+ sAll.setSelected(true);
+ bg.add(sAll);
+ bg.add(sSel);
+ builder.append(Globals.lang("Include")+":");
+ builder.append(sAll);
+ builder.append(sSel);
+ builder.appendGlueRow();
+ options.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));*/
+ String chosenFile = Globals.getNewFile(frame, new File(Globals.prefs.get("workingDirectory")), ".bib",
+ JFileChooser.SAVE_DIALOG, false, null);//options);
+ if (chosenFile == null)
+ return; // cancelled
+ File f = new File(chosenFile);
+ // Check if the file already exists:
+ if (f.exists() && (JOptionPane.showConfirmDialog
+ (frame, "'"+f.getName()+"' "+Globals.lang("exists. Overwrite file?"),
+ Globals.lang("Save database"), JOptionPane.OK_CANCEL_OPTION)
+ != JOptionPane.OK_OPTION)) {
+ return; // cancelled
}
- });
+ // Save:
+ //if (sAll.isSelected()) {
+ //
+ // Normal save
+ //
+ if (chosenFile != null) {
+ metaData.setFile(f);
+ Globals.prefs.put("workingDirectory", f.getParent());
+ runCommand("save");
+ // Register so we get notifications about outside changes to the file.
+ try {
+ fileMonitorHandle = Globals.fileUpdateMonitor.addUpdateListener(BasePanel.this,getFile());
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
+ frame.getFileHistory().newFile(metaData.getFile().getPath());
+ }
+ /*}
+ else {
+ //
+ // Save selected entries
+ //
+ File expFile = new File(chosenFile);
+ saveDatabase(expFile, true, encoding);
+ frame.getFileHistory().newFile(expFile.getPath());
+ frame.output(Globals.lang("Saved selected to")+" '"
+ +expFile.getPath()+"'.");
+ } */
+ }
+ });
actions.put("saveSelectedAs", new BaseAction () {
public void action() throws Throwable {
}
}
});
-
+
// The action for copying selected entries.
actions.put("copy", new BaseAction() {
public void action() {
actions.put("mergeDatabase", new AppendDatabaseAction(frame, this));
-
-
-
-
- actions.put("openFile", new BaseAction() {
- public void action() {
- (new Thread() {
- public void run() {
- BibtexEntry[] bes = mainTable.getSelectedEntries();
- String field = "ps";
- if ( (bes != null) && (bes.length == 1)) {
- Object link = bes[0].getField("ps");
- if (bes[0].getField("pdf") != null) {
- link = bes[0].getField("pdf");
- field = "pdf";
- }
- String filepath = null;
- if (link != null) {
- filepath = link.toString();
- }
- else {
-
- // see if we can fall back to a filename based on the bibtex key
- String basefile;
- Object key = bes[0].getField(BibtexFields.KEY_FIELD);
- if (key != null) {
- basefile = key.toString();
- final String[] types = new String[] {"pdf", "ps"};
- final String sep = System.getProperty("file.separator");
- for (int i = 0; i < types.length; i++) {
- String dir = Globals.prefs.get(types[i]+"Directory");
- if (dir.endsWith(sep)) {
- dir = dir.substring(0, dir.length()-sep.length());
+
+ actions.put("openFile", new BaseAction() {
+ public void action() {
+ (new Thread() {
+ public void run() {
+ BibtexEntry[] bes = mainTable.getSelectedEntries();
+ String field = "ps";
+ if ((bes != null) && (bes.length == 1)) {
+ Object link = bes[0].getField("ps");
+ if (bes[0].getField("pdf") != null) {
+ link = bes[0].getField("pdf");
+ field = "pdf";
+ }
+ String filepath = null;
+ if (link != null) {
+ filepath = link.toString();
+ } else {
+
+ // see if we can fall back to a filename based on the bibtex key
+ String basefile;
+ Object key = bes[0].getField(BibtexFields.KEY_FIELD);
+ if (key != null) {
+ basefile = key.toString();
+ final String[] types = new String[]{"pdf", "ps"};
+ final String sep = System.getProperty("file.separator");
+ for (int i = 0; i < types.length; i++) {
+ String dir = Globals.prefs.get(types[i] + "Directory");
+ if (dir != null) {
+ if (dir.endsWith(sep)) {
+ dir = dir.substring(0, dir.length() - sep.length());
+ }
+ } else
+ dir = "";
+ String found = Util.findPdf(basefile, types[i], dir, new OpenFileFilter("." + types[i]));
+ if (found != null) {
+ filepath = dir + sep + found;
+ break;
+ }
+ }
+ }
+ }
+
+
+ if (filepath != null) {
+ //output(Globals.lang("Calling external viewer..."));
+ try {
+ Util.openExternalViewer(metaData(), filepath, field);
+ output(Globals.lang("External viewer called") + ".");
+ }
+ catch (IOException ex) {
+ output(Globals.lang("Error") + ": " + ex.getMessage());
+ }
+ } else
+ output(Globals.lang(
+ "No pdf or ps defined, and no file matching Bibtex key found") +
+ ".");
+ } else
+ output(Globals.lang("No entries or multiple entries selected."));
+ }
+ }).start();
+ }
+ });
+
+ actions.put("openExternalFile", new BaseAction() {
+ public void action() {
+ (new Thread() {
+ public void run() {
+ BibtexEntry[] bes = mainTable.getSelectedEntries();
+ String field = GUIGlobals.FILE_FIELD;
+ if ((bes != null) && (bes.length == 1)) {
+ Object link = bes[0].getField(field);
+ if (link == null) {
+ runCommand("openFile"); // Fall back on PDF/PS fields???
+ return;
}
- String found = Util.findPdf(basefile, types[i], dir, new OpenFileFilter("."+types[i]));
- if (found != null) {
- filepath = dir+sep+found;
- break;
+ FileListTableModel tableModel = new FileListTableModel();
+ tableModel.setContent((String)link);
+ if (tableModel.getRowCount() == 0) {
+ runCommand("openFile"); // Fall back on PDF/PS fields???
+ return;
}
- }
- }
- }
-
-
- if (filepath != null) {
- //output(Globals.lang("Calling external viewer..."));
- try {
- Util.openExternalViewer(metaData(), filepath, field);
- output(Globals.lang("External viewer called") + ".");
- }
- catch (IOException ex) {
- output(Globals.lang("Error") + ": " + ex.getMessage());
- }
- }
- else
- output(Globals.lang(
- "No pdf or ps defined, and no file matching Bibtex key found") +
- ".");
- }
- else
- output(Globals.lang("No entries or multiple entries selected."));
- }
- }).start();
- }
- });
+ FileListEntry flEntry = tableModel.getEntry(0);
+ ExternalFileMenuItem item = new ExternalFileMenuItem
+ (frame(), bes[0], "",
+ flEntry.getLink(), flEntry.getType().getIcon(),
+ metaData(), flEntry.getType());
+ item.actionPerformed(null);
+ } else
+ output(Globals.lang("No entries or multiple entries selected."));
+ }
+ }).start();
+ }
+ });
- actions.put("openUrl", new BaseAction() {
+ actions.put("openUrl", new BaseAction() {
public void action() {
BibtexEntry[] bes = mainTable.getSelectedEntries();
String field = "doi";
}
});
- actions.put("strictDupliCheck", new BaseAction() {
+ /*actions.put("strictDupliCheck", new BaseAction() {
public void action() {
StrictDuplicateSearch ds = new StrictDuplicateSearch(BasePanel.this);
ds.start();
}
- });
+ });*/
actions.put("plainTextImport", new BaseAction() {
public void action()
actions.put("unabbreviate", new UnabbreviateAction(this));
actions.put("autoSetPdf", new AutoSetExternalFileForEntries(this, "pdf"));
actions.put("autoSetPs", new AutoSetExternalFileForEntries(this, "ps"));
+ actions.put("autoSetFile", new SynchronizeFileField(this));
+ actions.put("upgradeLinks", new UpgradeExternalLinks(this));
}
setLayout(new BorderLayout());
removeAll();
add(splitPane, BorderLayout.CENTER);
- //add(contentPane, BorderLayout.CENTER);
-
- //add(sidePaneManager.getPanel(), BorderLayout.WEST);
- //add(splitPane, BorderLayout.CENTER);
-
- //setLayout(gbl);
- //con.fill = GridBagConstraints.BOTH;
- //con.weighty = 1;
- //con.weightx = 0;
- //gbl.setConstraints(sidePaneManager.getPanel(), con);
- //con.weightx = 1;
- //gbl.setConstraints(splitPane, con);
- //mainPanel.setDividerLocation(GUIGlobals.SPLIT_PANE_DIVIDER_LOCATION);
- //setDividerSize(GUIGlobals.SPLIT_PANE_DIVIDER_SIZE);
- //setResizeWeight(0);
+
+ // Set up AutoCompleters for this panel:
+ if (Globals.prefs.getBoolean("autoComplete")) {
+ instantiateAutoCompleters();
+ }
+
splitPane.revalidate();
revalidate();
repaint();
}
+ public HashMap getAutoCompleters() {
+ return autoCompleters;
+ }
+
+ public AutoCompleter getAutoCompleter(String fieldName) {
+ return (AutoCompleter)autoCompleters.get(fieldName);
+ }
+
+ private void instantiateAutoCompleters() {
+ autoCompleters.clear();
+ String[] completeFields = Globals.prefs.getStringArray("autoCompleteFields");
+ for (int i = 0; i < completeFields.length; i++) {
+ String field = completeFields[i];
+ autoCompleters.put(field, new AutoCompleter(field));
+ }
+ for (Iterator i=database.getKeySet().iterator(); i.hasNext();) {
+ BibtexEntry entry = database.getEntryById((String)i.next());
+ Util.updateCompletersForEntry(autoCompleters, entry);
+ }
+ }
+
/**
* This method is called after a database has been parsed. The
} else return true;
}
-
+
+ /**
+ * If the relevant option is set, autogenerate keys for all entries that are
+ * lacking keys.
+ */
+ public void autoGenerateKeysBeforeSaving() {
+ if (Globals.prefs.getBoolean("generateKeysBeforeSaving")) {
+ BibtexEntry bes;
+ NamedCompound ce = new NamedCompound(Globals.lang("autogenerate keys"));
+ boolean any = false;
+ for (Iterator i=database.getKeySet().iterator(); i.hasNext();) {
+ bes = database.getEntryById((String)i.next());
+ String oldKey = bes.getCiteKey();
+ if ((oldKey == null) || (oldKey.equals(""))) {
+ LabelPatternUtil.makeLabel(Globals.prefs.getKeyPattern(), database, bes);
+ ce.addEdit(new UndoableKeyChange(database, bes.getId(), null,
+ (String)bes.getField(BibtexFields.KEY_FIELD)));
+ any = true;
+ }
+ }
+ // Store undo information, if any:
+ if (any) {
+ ce.end();
+ undoManager.addEdit(ce);
+ }
+ }
+ }
+
/**
* Activates or deactivates the entry preview, depending on the argument.
* When deactivating, makes sure that any visible preview is hidden.
package net.sf.jabref;
-import java.beans.*;
-import java.util.*;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyVetoException;
+import java.beans.VetoableChangeListener;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Vector;
import javax.swing.JOptionPane;
-import net.sf.jabref.groups.GroupSelector;
-
-public class BibtexDatabase
-{
- Map _entries = new Hashtable();
- String _preamble = null;
- HashMap _strings = new HashMap();
- Vector _strings_ = new Vector();
- Hashtable _autoCompleters = null;
- Set changeListeners = new HashSet();
- private BibtexDatabase ths = this;
-
- private HashMap allKeys = new HashMap(); // use a map instead of a set since i need to know how many of each key is inthere
-
- /* Entries are stored in a HashMap with the ID as key.
- * What happens if someone changes a BibtexEntry's ID
- * after it has been added to this BibtexDatabase?
- * The key of that entry would be the old ID, not the new one.
- * Use a PropertyChangeListener to identify an ID change
- * and update the Map.
- */
+public class BibtexDatabase {
+
+ Map<String, BibtexEntry> _entries = new Hashtable<String, BibtexEntry>();
+
+ String _preamble = null;
+
+ HashMap<String, BibtexString> _strings = new HashMap<String, BibtexString>();
+
+ Vector _strings_ = new Vector();
+
+ Set<DatabaseChangeListener> changeListeners = new HashSet<DatabaseChangeListener>();
+
+ /**
+ * use a map instead of a set since i need to know how many of each key is
+ * inthere
+ */
+ private HashMap<String, Integer> allKeys = new HashMap<String, Integer>();
+
+ /*
+ * Entries are stored in a HashMap with the ID as key. What happens if
+ * someone changes a BibtexEntry's ID after it has been added to this
+ * BibtexDatabase? The key of that entry would be the old ID, not the new
+ * one. Use a PropertyChangeListener to identify an ID change and update the
+ * Map.
+ */
private final VetoableChangeListener listener =
new VetoableChangeListener()
{
throws PropertyVetoException
{
if (pce.getPropertyName() == null)
- fireDatabaseChanged (new DatabaseChangeEvent(ths, DatabaseChangeEvent.CHANGING_ENTRY, (BibtexEntry)pce.getSource()));
+ fireDatabaseChanged (new DatabaseChangeEvent(BibtexDatabase.this, DatabaseChangeEvent.CHANGING_ENTRY, (BibtexEntry)pce.getSource()));
else if ("id".equals(pce.getPropertyName()))
{
// locate the entry under its old key
- Object oldEntry =
+ BibtexEntry oldEntry =
_entries.remove((String) pce.getOldValue());
if (oldEntry != pce.getSource())
// The entry under the old key isn't
// the one that sent this event.
// Restore the old state.
- _entries.put(pce.getOldValue(), oldEntry);
+ _entries.put((String)pce.getOldValue(), oldEntry);
throw new PropertyVetoException("Wrong old ID", pce);
}
if (_entries.get(pce.getNewValue()) != null)
{
- _entries.put(pce.getOldValue(), oldEntry);
+ _entries.put((String)pce.getOldValue(), oldEntry);
throw new PropertyVetoException
("New ID already in use, please choose another",
pce);
_entries.put((String) pce.getNewValue(),
(BibtexEntry) pce.getSource());
} else {
- fireDatabaseChanged (new DatabaseChangeEvent(ths, DatabaseChangeEvent.CHANGED_ENTRY, (BibtexEntry)pce.getSource()));
+ fireDatabaseChanged (new DatabaseChangeEvent(BibtexDatabase.this, DatabaseChangeEvent.CHANGED_ENTRY, (BibtexEntry)pce.getSource()));
//Util.pr(pce.getSource().toString()+"\n"+pce.getPropertyName()
// +"\n"+pce.getNewValue());
}
return (BibtexEntry) _entries.get(id);
}
- public synchronized Collection getEntries() {
+ public synchronized Collection<BibtexEntry> getEntries() {
return _entries.values();
}
}
public synchronized BibtexEntry[] getEntriesByKey(String key) {
- Vector entries = new Vector();
- BibtexEntry entry;
- for (Iterator it = _entries.entrySet().iterator(); it.hasNext(); ) {
- entry = (BibtexEntry)((Map.Entry)it.next()).getValue();
+
+ ArrayList<BibtexEntry> entries = new ArrayList<BibtexEntry>();
+
+ for (BibtexEntry entry : _entries.values()){
if (key.equals(entry.getCiteKey()))
entries.add(entry);
}
- BibtexEntry[] entryArray = new BibtexEntry[entries.size()];
- return (BibtexEntry[]) entries.toArray(entryArray);
+
+ return entries.toArray(new BibtexEntry[entries.size()]);
}
/**
entry.addPropertyChangeListener(listener);
- // Possibly add a FieldChangeListener, which is there to add
- // new words to the autocompleter's dictionary. In case the
- // entry is non-empty (pasted), update completers.
- /*if (_autoCompleters != null) {
- entry.addPropertyChangeListener(new FieldChangeListener
- (_autoCompleters, entry));
- Util.updateCompletersForEntry(_autoCompleters,
- entry);
- }
- */
_entries.put(id, entry);
fireDatabaseChanged(new DatabaseChangeEvent(this, DatabaseChangeEvent.ADDED_ENTRY, entry));
}
/**
- * Resolves any references to strings contained in this database,
+ * Resolves any references to strings contained in this field content,
* if possible.
*/
public String resolveForStrings(String content) {
- return resolveContent(content, new HashSet());
+ if (content == null){
+ throw new IllegalArgumentException("Content for resolveForStrings must not be null.");
+ }
+ return resolveContent(content, new HashSet<String>());
}
-
+
+ /**
+ * Take the given collection of BibtexEntry and resolve any string
+ * references.
+ *
+ * @param entries
+ * A collection of BibtexEntries in which all strings of the form
+ * #xxx# will be resolved against the hash map of string
+ * references stored in the databasee.
+ *
+ * @param inPlace If inPlace is true then the given BibtexEntries will be modified, if false then copies of the BibtexEntries are made before resolving the strings.
+ *
+ * @return a list of bibtexentries, with all strings resolved. It is dependent on the value of inPlace whether copies are made or the given BibtexEntries are modified.
+ */
+ public List<BibtexEntry> resolveForStrings(Collection<BibtexEntry> entries, boolean inPlace){
+
+ if (entries == null)
+ throw new NullPointerException();
+
+ List<BibtexEntry> results = new ArrayList<BibtexEntry>(entries.size());
+
+ for (BibtexEntry entry : entries){
+ results.add(this.resolveForStrings(entry, inPlace));
+ }
+ return results;
+ }
+
/**
+ * Take the given BibtexEntry and resolve any string references.
+ *
+ * @param entriy
+ * A BibtexEntry in which all strings of the form #xxx# will be
+ * resolved against the hash map of string references stored in
+ * the databasee.
+ *
+ * @param inPlace
+ * If inPlace is true then the given BibtexEntry will be
+ * modified, if false then a copy is made using close made before
+ * resolving the strings.
+ *
+ * @return a BibtexEntry with all string references resolved. It is
+ * dependent on the value of inPlace whether a copy is made or the
+ * given BibtexEntries is modified.
+ */
+ public BibtexEntry resolveForStrings(BibtexEntry entry, boolean inPlace) {
+
+ if (!inPlace){
+ entry = (BibtexEntry)entry.clone();
+ }
+
+ for (Object field : entry.getAllFields()){
+ entry.setField(field.toString(), this.resolveForStrings(entry.getField(field.toString()).toString()));
+ }
+
+ return entry;
+ }
+
+ /**
* If the label represents a string contained in this database, returns
* that string's content. Resolves references to other strings, taking
* care not to follow a circular reference pattern.
- * If the string is undefined, returns the label itself.
+ * If the string is undefined, returns null.
*/
- private String resolveString(String label, HashSet usedIds) {
+ private String resolveString(String label, HashSet<String> usedIds) {
for (java.util.Iterator i=_strings.keySet().iterator(); i.hasNext();) {
BibtexString string = (BibtexString)_strings.get(i.next());
return (String)o;
}
- return label;
+ return null;
}
- private String resolveContent(String res, HashSet usedIds) {
+ private String resolveContent(String res, HashSet<String> usedIds) {
//if (res.matches(".*#[-\\^\\:\\w]+#.*")) {
if (res.matches(".*#[^#]+#.*")) {
StringBuffer newRes = new StringBuffer();
// now resolve that one.
String refLabel = res.substring(next+1, stringEnd);
String resolved = resolveString(refLabel, usedIds);
- if (refLabel.equals(resolved)) {
- // We got just the label in return, so this may not have
- // been intended as a string label, or it may be a label for
- // an undefined string. Therefore we prefer to display the #
+
+ if (resolved == null) {
+ // Could not resolve string. Display the #
// characters rather than removing them:
newRes.append(res.substring(next, stringEnd+1));
} else
allKeys.put( key, new Integer(1));
return exists;
}
+
//========================================================
// reduce the number of keys by 1. if this number goes to zero then remove from the set
// note: there is a good reason why we should not use a hashset but use hashmap instead
changeListeners.remove(l);
}
- /*
- public void setCompleters(Hashtable autoCompleters) {
- _autoCompleters = autoCompleters;
-
- for (Iterator i=getKeySet().iterator(); i.hasNext();) {
- BibtexEntry be = getEntryById((String)(i.next()));
- be.addPropertyChangeListener(new FieldChangeListener
- (autoCompleters, be));
-
- Util.updateCompletersForEntry(autoCompleters, be);
- }
- }*/
+ /**
+ * Returns the text stored in the given field of the given bibtex entry
+ * which belongs to the given database.
+ *
+ * If a database is given, this function will try to resolve any string
+ * references in the field-value.
+ *
+ * @param field
+ * The field to return the value of.
+ * @param bibtex maybenull
+ * The bibtex entry which contains the field.
+ * @param database maybenull
+ * The database of the bibtex entry.
+ * @return The resolved field value or null if not found.
+ */
+ public static String getResolvedField(String field, BibtexEntry bibtex,
+ BibtexDatabase database) {
+
+ if (field.equals("bibtextype"))
+ return bibtex.getType().getName();
+
+ return getText((String)bibtex.getField(field), database);
+ }
+
+ /**
+ * Returns a text with references resolved according to an optionally given
+ * database.
+
+ * @param toResolve maybenull The text to resolve.
+ * @param database maybenull The database to use for resolving the text.
+ * @return The resolved text or the original text if either the text or the database are null
+ */
+ public static String getText(String toResolve, BibtexDatabase database) {
+ if (toResolve != null && database != null)
+ return database.resolveForStrings(toResolve);
+
+ return toResolve;
+ }
}
"' is reserved");
}
- // This mechanism is probably not really necessary.
- //Object normalValue = FieldTypes.normalize(name, value);
-
-
Object oldValue = _fields.get(name);
try {
return clone;
}
-
public String toString() {
return getType().getName()+":"+getField(BibtexFields.KEY_FIELD);
}
add( new BibtexSingleField( "keywords", false, GUIGlobals.SMALL_W ) ) ;
//FIELD_EXTRAS.put("keywords", "selector");
+
+ dummy = new BibtexSingleField(GUIGlobals.FILE_FIELD, false);
+ dummy.setEditorType(GUIGlobals.FILE_LIST_EDITOR);
+ add(dummy);
+
+
add( new BibtexSingleField( "search", false, 75 ) ) ;
return null ;
}
+
+ public static int getEditorType(String name) {
+ BibtexSingleField sField = getField( name ) ;
+ if (sField != null)
+ {
+ return sField.getEditorType();
+ }
+ return GUIGlobals.STANDARD_EDITOR;
+ }
+
public static double getFieldWeight( String name )
{
BibtexSingleField sField = getField( name ) ;
private int length = GUIGlobals.DEFAULT_FIELD_LENGTH ;
private double weight = GUIGlobals.DEFAULT_FIELD_WEIGHT ;
+ private int editorType = GUIGlobals.STANDARD_EDITOR;
+
// a alternative displayname, e.g. used for
// "citeseercitationcount"="Popularity"
private String alternativeDisplayName = null ;
{
return extras ;
}
+
+ public void setEditorType(int type) {
+ editorType = type;
+ }
+
+ public int getEditorType() {
+ return editorType;
+ }
// -----------------------------------------------------------------------
public void setWeight( double value )
package net.sf.jabref;
+import com.jgoodies.forms.builder.ButtonStackBuilder;
+import com.jgoodies.forms.builder.ButtonBarBuilder;
+
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
con.gridheight = 1;
con.fill = GridBagConstraints.NONE;
con.anchor = GridBagConstraints.WEST;
- gbl.setConstraints(newField, con);
+ gbl.setConstraints(newField, con);
fieldPan.add(newField);
gbl.setConstraints(newWord, con);
wordPan.add(newWord);
wordEditPan.add(wordEditField);
// Add buttons:
- buttonPan.add(help);
- buttonPan.add(Box.createHorizontalStrut(10));
- buttonPan.add(ok);
- buttonPan.add(apply);
- buttonPan.add(cancel);
-
- // Add panels to dialog:
+ ButtonBarBuilder bsb = new ButtonBarBuilder(buttonPan);
+ bsb.addGlue();
+ bsb.addGridded(ok);
+ bsb.addGridded(apply);
+ bsb.addGridded(cancel);
+ bsb.addRelatedGap();
+ bsb.addGridded(help);
+ bsb.addGlue();
+
+ // Add panels to dialog:
con.fill = GridBagConstraints.BOTH;
getContentPane().setLayout(gbl);
con.weightx = 1;
KEEP_BOTH = 0,
KEEP_UPPER = 1,
KEEP_LOWER = 2,
+ AUTOREMOVE_EXACT = 3,
BREAK = 5, // close
IMPORT_AND_DELETE_OLD = 1,
IMPORT_AND_KEEP_OLD = 0,
DO_NOT_IMPORT = 2,
DUPLICATE_SEARCH = 1,
IMPORT_CHECK = 2,
- INSPECTION = 3;
+ INSPECTION = 3,
+ DUPLICATE_SEARCH_WITH_EXACT = 4;
final Dimension DIM = new Dimension(650, 600);
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints con = new GridBagConstraints();
JButton first, second, both,
- cancel = new JButton(Globals.lang("Cancel"));
+ cancel = new JButton(Globals.lang("Cancel")),
+ removeExact = null;
JPanel options = new JPanel(),
main = new JPanel(),
source = new JPanel();
second = new JButton(Globals.lang("Remove entry from import"));
both = new JButton(Globals.lang("Keep both"));
break;
+ case DUPLICATE_SEARCH_WITH_EXACT:
+ first = new JButton(Globals.lang("Keep upper"));
+ second = new JButton(Globals.lang("Keep lower"));
+ both = new JButton(Globals.lang("Keep both"));
+ removeExact = new JButton(Globals.lang("Automatically remove exact duplicates"));
+ break;
default:
first = new JButton(Globals.lang("Import and remove old entry"));
second = new JButton(Globals.lang("Do not import entry"));
source.add(sp);
tabbed.add(Globals.lang("Short form"), main);
tabbed.add(Globals.lang("Complete record"), source);
+ if (removeExact != null)
+ options.add(removeExact);
options.add(first);
options.add(second);
options.add(both);
}
});
+ if (removeExact != null)
+ removeExact.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ status = AUTOREMOVE_EXACT;
+ block = false;
+ dispose();
+ }
+ });
+
cancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
status = BREAK;
package net.sf.jabref;
+import java.util.Vector;
+import java.util.ArrayList;
+import java.util.Iterator;
+import javax.swing.*;
+
import net.sf.jabref.undo.NamedCompound;
import net.sf.jabref.undo.UndoableRemoveEntry;
-import java.util.Vector;
+import spin.Spin;
public class DuplicateSearch extends Thread {
BasePanel panel;
BibtexEntry[] bes;
final Vector duplicates = new Vector();
-
+ boolean autoRemoveExactDuplicates = false;
+
public DuplicateSearch(BasePanel bp) {
panel = bp;
}
public void run() {
- NamedCompound ce = null;
+ final NamedCompound ce = new NamedCompound(Globals.lang("duplicate removal"));
int duplicateCounter = 0;
+
+ autoRemoveExactDuplicates = false;
panel.output(Globals.lang("Searching for duplicates..."));
Object[] keys = panel.database.getKeySet().toArray();
if ((keys == null) || (keys.length < 2))
}
*/
+ final ArrayList toRemove = new ArrayList();
while (!st.finished() || (current < duplicates.size()))
{
+
if (current >= duplicates.size() )
{
// wait until the search thread puts something into duplicates vector
}
} else // duplicates found
{
- BibtexEntry[] be = ( BibtexEntry[] ) duplicates.get( current ) ;
- current++ ;
- if ( ( panel.database.getEntryById( be[0].getId() ) != null ) &&
- ( panel.database.getEntryById( be[1].getId() ) != null ) )
- {
- drd = new DuplicateResolverDialog( panel.frame, be[0], be[1],
- DuplicateResolverDialog.DUPLICATE_SEARCH) ;
- drd.setVisible(true); // drd.show(); -> deprecated since 1.5
- duplicateCounter++ ;
- int answer = drd.getSelected() ;
- if ( answer == DuplicateResolverDialog.KEEP_UPPER )
- {
- if ( ce == null ) ce = new NamedCompound(Globals.lang("duplicate removal")) ;
- panel.database.removeEntry( be[1].getId() ) ;
- panel.markBaseChanged() ;
- ce.addEdit( new UndoableRemoveEntry( panel.database, be[1], panel ) ) ;
- }
- else if ( answer == DuplicateResolverDialog.KEEP_LOWER )
- {
- if ( ce == null ) ce = new NamedCompound(Globals.lang("duplicate removal")) ;
- panel.database.removeEntry( be[0].getId() ) ;
- panel.markBaseChanged() ;
- ce.addEdit( new UndoableRemoveEntry( panel.database, be[0], panel ) ) ;
- }
- else if ( answer == DuplicateResolverDialog.BREAK )
- {
- st.setFinished() ; // thread killing
- current = Integer.MAX_VALUE ;
- duplicateCounter-- ; // correct counter
+ BibtexEntry[] be = (BibtexEntry[]) duplicates.get(current);
+ current++;
+ if (!toRemove.contains(be[0]) && !toRemove.contains(be[1])) {
+ // Check if they are exact duplicates:
+ boolean askAboutExact = false;
+ if (Util.compareEntriesStrictly(be[0], be[1]) > 1) {
+ if (autoRemoveExactDuplicates) {
+ toRemove.add(be[1]);
+ duplicateCounter++;
+ continue;
+ } else {
+ askAboutExact = true;
+ }
+ }
+
+ DuplicateCallBack cb = new DuplicateCallBack(panel.frame, be[0], be[1],
+ askAboutExact ? DuplicateResolverDialog.DUPLICATE_SEARCH_WITH_EXACT :
+ DuplicateResolverDialog.DUPLICATE_SEARCH);
+ ((CallBack)(Spin.over(cb))).update();
+
+ duplicateCounter++;
+ int answer = cb.getSelected();
+ if ((answer == DuplicateResolverDialog.KEEP_UPPER)
+ || (answer == DuplicateResolverDialog.AUTOREMOVE_EXACT)) {
+ toRemove.add(be[1]);
+ if (answer == DuplicateResolverDialog.AUTOREMOVE_EXACT)
+ autoRemoveExactDuplicates = true; // Remember choice
+ } else if (answer == DuplicateResolverDialog.KEEP_LOWER) {
+ toRemove.add(be[0]);
+ } else if (answer == DuplicateResolverDialog.BREAK) {
+ st.setFinished(); // thread killing
+ current = Integer.MAX_VALUE;
+ duplicateCounter--; // correct counter
+ }
}
- drd.dispose();
- }
}
}
if (drd != null)
drd.dispose();
+ final int dupliC = duplicateCounter;
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ // Now, do the actual removal:
+ if (toRemove.size() > 0) {
+ for (Iterator iterator = toRemove.iterator(); iterator.hasNext();) {
+ BibtexEntry entry = (BibtexEntry) iterator.next();
+ panel.database.removeEntry(entry.getId());
+ ce.addEdit(new UndoableRemoveEntry(panel.database, entry, panel));
+ }
+ panel.markBaseChanged();
+ }
+ panel.output(Globals.lang("Duplicate pairs found") + ": " + duplicates.size()
+ +" " +Globals.lang("pairs processed") +": " +dupliC );
+
+ if (ce != null)
+ {
+ ce.end();
+ panel.undoManager.addEdit(ce);
+ }
+
+ }
+
+ });
- panel.output(Globals.lang("Duplicate pairs found") + ": " + duplicates.size()
- +" " +Globals.lang("pairs processed") +": " +duplicateCounter );
- if (ce != null)
- {
- ce.end();
- //Util.pr("ox");
- panel.undoManager.addEdit(ce);
- //markBaseChanged();
- //refreshTable();
- }
}
}
}
+ class DuplicateCallBack implements CallBack {
+ private int reply = -1;
+ DuplicateResolverDialog diag;
+ private JabRefFrame frame;
+ private BibtexEntry one;
+ private BibtexEntry two;
+ private int dialogType;
+
+ public DuplicateCallBack(JabRefFrame frame, BibtexEntry one, BibtexEntry two,
+ int dialogType) {
+
+ this.frame = frame;
+ this.one = one;
+ this.two = two;
+ this.dialogType = dialogType;
+ }
+ public int getSelected() {
+ return reply;
+ }
+ public void update() {
+ diag = new DuplicateResolverDialog(frame, one, two, dialogType);
+ diag.setVisible(true);
+ diag.dispose();
+ reply = diag.getSelected();
+ }
+ }
+
}
import net.sf.jabref.external.ExternalFilePanel;
import net.sf.jabref.journals.JournalAbbreviations;
import net.sf.jabref.gui.date.*;
+import net.sf.jabref.gui.AutoCompleter;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
*/
public class EntryEditor extends JPanel implements VetoableChangeListener {
- // A reference to the entry this object works on.
- private BibtexEntry entry;
+ // A reference to the entry this object works on.
+ private BibtexEntry entry;
- BibtexEntryType type;
+ BibtexEntryType type;
- // The action concerned with closing the window.
- CloseAction closeAction;
+ // The action concerned with closing the window.
+ CloseAction closeAction;
- // The action that deletes the current entry, and closes the editor.
- DeleteAction deleteAction = new DeleteAction();
+ // The action that deletes the current entry, and closes the editor.
+ DeleteAction deleteAction = new DeleteAction();
- // The action concerned with copying the BibTeX key to the clipboard.
- CopyKeyAction copyKeyAction;
+ // The action concerned with copying the BibTeX key to the clipboard.
+ CopyKeyAction copyKeyAction;
- // The action concerned with copying the BibTeX key to the clipboard.
- AbstractAction nextEntryAction = new NextEntryAction();
+ // The action concerned with copying the BibTeX key to the clipboard.
+ AbstractAction nextEntryAction = new NextEntryAction();
- // Actions for switching to next/previous entry.
- AbstractAction prevEntryAction = new PrevEntryAction();
+ // Actions for switching to next/previous entry.
+ AbstractAction prevEntryAction = new PrevEntryAction();
- // The action concerned with storing a field value.
- public StoreFieldAction storeFieldAction;
+ // The action concerned with storing a field value.
+ public StoreFieldAction storeFieldAction;
- // The actions concerned with switching the panels.
- SwitchLeftAction switchLeftAction = new SwitchLeftAction();
+ // The actions concerned with switching the panels.
+ SwitchLeftAction switchLeftAction = new SwitchLeftAction();
- SwitchRightAction switchRightAction = new SwitchRightAction();
+ SwitchRightAction switchRightAction = new SwitchRightAction();
- // The action which generates a bibtexkey for this entry.
- GenerateKeyAction generateKeyAction;
+ // The action which generates a bibtexkey for this entry.
+ public GenerateKeyAction generateKeyAction;
- SaveDatabaseAction saveDatabaseAction = new SaveDatabaseAction();
+ SaveDatabaseAction saveDatabaseAction = new SaveDatabaseAction();
- JPanel mainPanel = new JPanel();
+ JPanel mainPanel = new JPanel();
- JPanel srcPanel = new JPanel();
+ JPanel srcPanel = new JPanel();
- EntryEditorTab genPan, optPan, reqPan, absPan;
+ EntryEditorTab genPan, optPan, reqPan, absPan;
- JTextField bibtexKey;
+ JTextField bibtexKey;
- FieldTextField tf;
+ FieldTextField tf;
- JTextArea source;
+ JTextArea source;
- JToolBar tlb;
+ JToolBar tlb;
- JTabbedPane tabbed = new JTabbedPane(); // JTabbedPane.RIGHT);
+ JTabbedPane tabbed = new JTabbedPane(); // JTabbedPane.RIGHT);
- JLabel lab;
+ JLabel lab;
- TypeLabel typeLabel;
+ TypeLabel typeLabel;
- JabRefFrame frame;
+ JabRefFrame frame;
- BasePanel panel;
+ BasePanel panel;
- EntryEditor ths = this;
+ EntryEditor ths = this;
- HashSet contentSelectors = new HashSet();
+ HashSet contentSelectors = new HashSet();
- Logger logger = Logger.getLogger(EntryEditor.class.getName());
+ Logger logger = Logger.getLogger(EntryEditor.class.getName());
- boolean updateSource = true; // This can be set to false to stop the
- // source
+ boolean updateSource = true; // This can be set to false to stop the
+ // source
- List tabs = new ArrayList();
+ List tabs = new ArrayList();
- // text area from gettin updated. This is used in cases where the source
- // couldn't be parsed, and the user is given the option to edit it.
- boolean lastSourceAccepted = true; // This indicates whether the last
+ // text area from gettin updated. This is used in cases where the source
+ // couldn't be parsed, and the user is given the option to edit it.
+ boolean lastSourceAccepted = true; // This indicates whether the last
- // attempt
- // at parsing the source was successful. It is used to determine whether the
- // dialog should close; it should stay open if the user received an error
- // message about the source, whatever he or she chose to do about it.
- String lastSourceStringAccepted = null; // This is used to prevent double
+ // attempt
+ // at parsing the source was successful. It is used to determine whether the
+ // dialog should close; it should stay open if the user received an error
+ // message about the source, whatever he or she chose to do about it.
+ String lastSourceStringAccepted = null; // This is used to prevent double
- // fields.
- // These values can be used to calculate the preferred height for the form.
- // reqW starts at 1 because it needs room for the bibtex key field.
- private int sourceIndex = -1; // The index the source panel has in tabbed.
+ // fields.
+ // These values can be used to calculate the preferred height for the form.
+ // reqW starts at 1 because it needs room for the bibtex key field.
+ private int sourceIndex = -1; // The index the source panel has in tabbed.
- JabRefPreferences prefs;
+ JabRefPreferences prefs;
- HelpAction helpAction;
+ HelpAction helpAction;
- UndoAction undoAction = new UndoAction();
+ UndoAction undoAction = new UndoAction();
- RedoAction redoAction = new RedoAction();
+ RedoAction redoAction = new RedoAction();
- TabListener tabListener = new TabListener();
+ TabListener tabListener = new TabListener();
- public EntryEditor(JabRefFrame frame_, BasePanel panel_, BibtexEntry entry_) {
+ public EntryEditor(JabRefFrame frame_, BasePanel panel_, BibtexEntry entry_) {
- frame = frame_;
- panel = panel_;
- entry = entry_;
- prefs = Globals.prefs;
- type = entry.getType();
+ frame = frame_;
+ panel = panel_;
+ entry = entry_;
+ prefs = Globals.prefs;
+ type = entry.getType();
- entry.addPropertyChangeListener(this);
+ entry.addPropertyChangeListener(this);
- helpAction = new HelpAction(frame.helpDiag, GUIGlobals.entryEditorHelp, "Help");
- closeAction = new CloseAction();
- copyKeyAction = new CopyKeyAction();
- generateKeyAction = new GenerateKeyAction(frame);
- storeFieldAction = new StoreFieldAction();
+ helpAction = new HelpAction(frame.helpDiag, GUIGlobals.entryEditorHelp, "Help");
+ closeAction = new CloseAction();
+ copyKeyAction = new CopyKeyAction();
+ generateKeyAction = new GenerateKeyAction(frame);
+ storeFieldAction = new StoreFieldAction();
- BorderLayout bl = new BorderLayout();
- setLayout(bl);
- setupToolBar();
- setupFieldPanels();
- setupSourcePanel();
- add(tabbed, BorderLayout.CENTER);
- tabbed.addChangeListener(tabListener);
- if (prefs.getBoolean("showSource") && prefs.getBoolean("defaultShowSource"))
- tabbed.setSelectedIndex(sourceIndex);
+ BorderLayout bl = new BorderLayout();
+ setLayout(bl);
+ setupToolBar();
+ setupFieldPanels();
+ setupSourcePanel();
+ add(tabbed, BorderLayout.CENTER);
+ tabbed.addChangeListener(tabListener);
+ if (prefs.getBoolean("showSource") && prefs.getBoolean("defaultShowSource"))
+ tabbed.setSelectedIndex(sourceIndex);
- updateAllFields();
- }
+ updateAllFields();
+ }
+
+ private void setupFieldPanels() {
+ tabbed.removeAll();
+ tabs.clear();
+ String[] fields = entry.getRequiredFields();
+
+ List fieldList = null;
+ if (fields != null)
+ fieldList = java.util.Arrays.asList(fields);
+ reqPan = new EntryEditorTab(frame, panel, fieldList, this, true, Globals.lang("Required fields"));
+ tabbed.addTab(Globals.lang("Required fields"), GUIGlobals.getImage("required"), reqPan
+ .getPane(), Globals.lang("Show required fields"));
+ tabs.add(reqPan);
+
+ if ((entry.getOptionalFields() != null) && (entry.getOptionalFields().length >= 1)) {
+ optPan = new EntryEditorTab(frame, panel, java.util.Arrays.asList(entry.getOptionalFields()), this,
+ false, Globals.lang("Optional fields"));
+ tabbed.addTab(Globals.lang("Optional fields"), GUIGlobals.getImage("optional"), optPan
+ .getPane(), Globals.lang("Show optional fields"));
+ tabs.add(optPan);
+ }
+
+ EntryEditorTabList tabList = Globals.prefs.getEntryEditorTabList();
+ for (int i = 0; i < tabList.getTabCount(); i++) {
+ EntryEditorTab newTab = new EntryEditorTab(frame, panel, tabList.getTabFields(i), this, false,
+ tabList.getTabName(i));
+ tabbed.addTab(tabList.getTabName(i), GUIGlobals.getImage("general"), newTab.getPane());
+ tabs.add(newTab);
+ }
+
+ srcPanel.setName(Globals.lang("BibTeX source"));
+ if (Globals.prefs.getBoolean("showSource")) {
+ tabbed.addTab(Globals.lang("BibTeX source"), GUIGlobals.getImage("source"), srcPanel,
+ Globals.lang("Show/edit BibTeX source"));
+ tabs.add(srcPanel);
+ }
+ sourceIndex = tabs.size() - 1; // Set the sourceIndex variable.
+ srcPanel.setFocusCycleRoot(true);
+ }
+
+ public BibtexEntryType getType() {
+ return type;
+ }
+
+ public BibtexEntry getEntry() {
+ return entry;
+ }
+
+ public BibtexDatabase getDatabase(){
+ return panel.getDatabase();
+ }
- private void setupFieldPanels() {
- tabbed.removeAll();
- tabs.clear();
- String[] fields = entry.getRequiredFields();
+ private void setupToolBar() {
+ tlb = new JToolBar(JToolBar.VERTICAL);
+
+ // tlb.setMargin(new Insets(2,2,2,2));
+ tlb.setMargin(new Insets(0, 0, 0, 2));
+
+ // The toolbar carries all the key bindings that are valid for the whole
+ // window.
+ // tlb.setBackground(GUIGlobals.lightGray);//Color.white);
+ ActionMap am = tlb.getActionMap();
+ InputMap im = tlb.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+
+ im.put(prefs.getKey("Close entry editor"), "close");
+ am.put("close", closeAction);
+ im.put(prefs.getKey("Entry editor, store field"), "store");
+ am.put("store", storeFieldAction);
+ im.put(prefs.getKey("Autogenerate BibTeX keys"), "generateKey");
+ am.put("generateKey", generateKeyAction);
+ /*
+ * im.put(prefs.getKey("Entry editor, previous panel"), "left");
+ * im.put(prefs.getKey("Entry editor, previous panel 2"), "left");
+ * am.put("left", switchLeftAction); im.put(prefs.getKey("Entry editor,
+ * next panel"), "right"); im.put(prefs.getKey("Entry editor, next panel
+ * 2"), "right"); am.put("right", switchRightAction);
+ */
+ im.put(prefs.getKey("Entry editor, previous entry"), "prev");
+ am.put("prev", prevEntryAction);
+ im.put(prefs.getKey("Entry editor, next entry"), "next");
+ am.put("next", nextEntryAction);
+ im.put(prefs.getKey("Undo"), "undo");
+ am.put("undo", undoAction);
+ im.put(prefs.getKey("Redo"), "redo");
+ am.put("redo", redoAction);
+ im.put(prefs.getKey("Help"), "help");
+ am.put("help", helpAction);
+
+ tlb.setFloatable(false);
+ tlb.add(closeAction);
+
+ setLabel();
+ tlb.add(typeLabel);
+
+ // tlb.addSeparator();
+ // tlb.add(copyKeyAction);
+ tlb.addSeparator();
+ tlb.add(generateKeyAction);
+ tlb.addSeparator();
+
+ // tlb.add(undoAction);
+ // tlb.add(redoAction);
+ tlb.add(deleteAction);
+ tlb.add(prevEntryAction);
+
+ tlb.add(nextEntryAction);
+ tlb.addSeparator();
+ tlb.add(helpAction);
+
+ Component[] comps = tlb.getComponents();
+
+ for (int i = 0; i < comps.length; i++)
+ ((JComponent) comps[i]).setOpaque(false);
+
+ add(tlb, BorderLayout.WEST);
+ }
+
+ private void setLabel() {
+ typeLabel = new TypeLabel(entry.getType().getName());
+ }
+
+ /**
+ * Rebuild the field tabs. This is called e.g. when a new content selector
+ * has been added.
+ */
+ public void rebuildPanels() {
+ // Remove change listener, because the rebuilding causes meaningless
+ // events and trouble:
+ tabbed.removeChangeListener(tabListener);
+
+ setupFieldPanels();
+ // Add the change listener again:
+ tabbed.addChangeListener(tabListener);
+ revalidate();
+ repaint();
+ }
+
+ /**
+ * getExtra checks the field name against BibtexFields.getFieldExtras(name).
+ * If the name has an entry, the proper component to be shown is created and
+ * returned. Otherwise, null is returned. In addition, e.g. listeners can be
+ * added to the field editor, even if no component is returned.
+ *
+ * @param string
+ * Field name
+ * @return Component to show, or null if none.
+ */
+ public JComponent getExtra(String string, FieldEditor editor) {
+ final FieldEditor ed = editor;
+
+ // fieldName and parameter string identically ????
+ final String fieldName = editor.getFieldName();
+
+ String s = BibtexFields.getFieldExtras(string);
+
+ // timestamp or a other field with datepicker command
+ if ((fieldName.equals(Globals.prefs.get("timeStampField")))
+ || ((s != null) && s.equals("datepicker"))) {
+ // double click AND datefield => insert the current date (today)
+ ((JTextArea) ed).addMouseListener(new MouseAdapter() {
+ public void mouseClicked(MouseEvent e) {
+ if (e.getClickCount() == 2) // double click
+ {
+ String date = Util.easyDateFormat();
+ ed.setText(date);
+ }
+ }
+ });
+
+ // insert a datepicker, if the extras field contains this command
+ if ((s != null) && s.equals("datepicker")) {
+ DatePickerButton datePicker = new DatePickerButton(ed);
+ return datePicker.getDatePicker();
+ }
+ }
+
+ if ((s != null) && s.equals("external")) {
+
+ // Add external viewer listener for "pdf" and "url" fields.
+ ((JComponent) editor).addMouseListener(new ExternalViewerListener());
+
+ return null;
+ } else if ((s != null) && s.equals("journalNames")) {
+ // Add controls for switching between abbreviated and full journal
+ // names.
+ // If this field also has a FieldContentSelector, we need to combine
+ // these.
+ JPanel controls = new JPanel();
+ controls.setLayout(new BorderLayout());
+ if (panel.metaData.getData(Globals.SELECTOR_META_PREFIX + editor.getFieldName()) != null) {
+ FieldContentSelector ws = new FieldContentSelector(frame, panel, frame, editor,
+ panel.metaData, storeFieldAction, false, ", ");
+ contentSelectors.add(ws);
+ controls.add(ws, BorderLayout.NORTH);
+ }
+ controls.add(JournalAbbreviations.getNameSwitcher(this, editor, panel.undoManager),
+ BorderLayout.SOUTH);
+ return controls;
+ } else if (panel.metaData.getData(Globals.SELECTOR_META_PREFIX + editor.getFieldName()) != null) {
+ FieldContentSelector ws = new FieldContentSelector(frame, panel, frame, editor,
+ panel.metaData, storeFieldAction, false,
+ (editor.getFieldName().equals("author") ? " and " : ", "));
+ contentSelectors.add(ws);
+
+ return ws;
+ } else if ((s != null) && s.equals("browse")) {
+ JButton but = new JButton(Globals.lang("Browse"));
+ ((JComponent) editor).addMouseListener(new ExternalViewerListener());
+
+ // but.setBackground(GUIGlobals.lightGray);
+ but.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ String dir = ed.getText();
+
+ if (dir.equals(""))
+ dir = prefs.get(fieldName + Globals.FILETYPE_PREFS_EXT, "");
+
+ String chosenFile = Globals.getNewFile(frame, new File(dir), "." + fieldName,
+ JFileChooser.OPEN_DIALOG, false);
+
+ if (chosenFile != null) {
+ File newFile = new File(chosenFile); // chooser.getSelectedFile();
+ ed.setText(newFile.getPath());
+ prefs.put(fieldName + Globals.FILETYPE_PREFS_EXT, newFile.getPath());
+ updateField(ed);
+ }
+ }
+ });
+
+ return but;
+ // } else if ((s != null) && s.equals("browsePdf")) {
+ } else if ((s != null) && (s.equals("browseDoc") || s.equals("browseDocZip"))) {
+
+ final String ext = "." + fieldName.toLowerCase();
+ final OpenFileFilter off;
+ if (s.equals("browseDocZip"))
+ off = new OpenFileFilter(new String[] { ext, ext + ".gz", ext + ".bz2" });
+ else
+ off = new OpenFileFilter(new String[] { ext });
+
+ ExternalFilePanel pan = new ExternalFilePanel(frame, panel.metaData(), this, fieldName,
+ off, ed);
+ return pan;
+ }
+ /*
+ * else if ((s != null) && s.equals("browsePs")) { ExternalFilePanel pan =
+ * new ExternalFilePanel(frame, this, "ps", off, ed); return pan; }
+ */
+ else if ((s != null) && s.equals("url")) {
+ ((JComponent) editor).setDropTarget(new DropTarget((Component) editor,
+ DnDConstants.ACTION_NONE, new SimpleUrlDragDrop(editor, storeFieldAction)));
+
+ return null;
+ }
+
+ else
+ return null;
+ }
- List fieldList = null;
- if (fields != null)
- fieldList = java.util.Arrays.asList(fields);
- reqPan = new EntryEditorTab(fieldList, this, true, Globals.lang("Required fields"));
- tabbed.addTab(Globals.lang("Required fields"), GUIGlobals.getImage("required"), reqPan
- .getPane(), Globals.lang("Show required fields"));
- tabs.add(reqPan);
+ private void setupSourcePanel() {
+ source = new JTextArea() {
+ private boolean antialias = Globals.prefs.getBoolean("antialias");
- if ((entry.getOptionalFields() != null) && (entry.getOptionalFields().length >= 1)) {
- optPan = new EntryEditorTab(java.util.Arrays.asList(entry.getOptionalFields()), this,
- false, Globals.lang("Optional fields"));
- tabbed.addTab(Globals.lang("Optional fields"), GUIGlobals.getImage("optional"), optPan
- .getPane(), Globals.lang("Show optional fields"));
- tabs.add(optPan);
- }
-
- EntryEditorTabList tabList = Globals.prefs.getEntryEditorTabList();
- for (int i = 0; i < tabList.getTabCount(); i++) {
- EntryEditorTab newTab = new EntryEditorTab(tabList.getTabFields(i), this, false,
- tabList.getTabName(i));
- tabbed.addTab(tabList.getTabName(i), GUIGlobals.getImage("general"), newTab.getPane());
- tabs.add(newTab);
- }
-
- srcPanel.setName(Globals.lang("BibTeX source"));
- if (Globals.prefs.getBoolean("showSource")) {
- tabbed.addTab(Globals.lang("BibTeX source"), GUIGlobals.getImage("source"), srcPanel,
- Globals.lang("Show/edit BibTeX source"));
- tabs.add(srcPanel);
- }
- sourceIndex = tabs.size() - 1; // Set the sourceIndex variable.
- srcPanel.setFocusCycleRoot(true);
- }
-
- public BibtexEntryType getType() {
- return type;
- }
-
- public BibtexEntry getEntry() {
- return entry;
- }
-
- private void setupToolBar() {
- tlb = new JToolBar(JToolBar.VERTICAL);
-
- // tlb.setMargin(new Insets(2,2,2,2));
- tlb.setMargin(new Insets(0, 0, 0, 2));
-
- // The toolbar carries all the key bindings that are valid for the whole
- // window.
- // tlb.setBackground(GUIGlobals.lightGray);//Color.white);
- ActionMap am = tlb.getActionMap();
- InputMap im = tlb.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-
- im.put(prefs.getKey("Close entry editor"), "close");
- am.put("close", closeAction);
- im.put(prefs.getKey("Entry editor, store field"), "store");
- am.put("store", storeFieldAction);
- im.put(prefs.getKey("Autogenerate BibTeX keys"), "generateKey");
- am.put("generateKey", generateKeyAction);
- /*
- * im.put(prefs.getKey("Entry editor, previous panel"), "left");
- * im.put(prefs.getKey("Entry editor, previous panel 2"), "left");
- * am.put("left", switchLeftAction); im.put(prefs.getKey("Entry editor,
- * next panel"), "right"); im.put(prefs.getKey("Entry editor, next panel
- * 2"), "right"); am.put("right", switchRightAction);
- */
- im.put(prefs.getKey("Entry editor, previous entry"), "prev");
- am.put("prev", prevEntryAction);
- im.put(prefs.getKey("Entry editor, next entry"), "next");
- am.put("next", nextEntryAction);
- im.put(prefs.getKey("Undo"), "undo");
- am.put("undo", undoAction);
- im.put(prefs.getKey("Redo"), "redo");
- am.put("redo", redoAction);
- im.put(prefs.getKey("Help"), "help");
- am.put("help", helpAction);
-
- tlb.setFloatable(false);
- tlb.add(closeAction);
-
- setLabel();
- tlb.add(typeLabel);
-
- // tlb.addSeparator();
- // tlb.add(copyKeyAction);
- tlb.addSeparator();
- tlb.add(generateKeyAction);
- tlb.addSeparator();
-
- // tlb.add(undoAction);
- // tlb.add(redoAction);
- tlb.add(deleteAction);
- tlb.add(prevEntryAction);
-
- tlb.add(nextEntryAction);
- tlb.addSeparator();
- tlb.add(helpAction);
-
- Component[] comps = tlb.getComponents();
-
- for (int i = 0; i < comps.length; i++)
- ((JComponent) comps[i]).setOpaque(false);
-
- add(tlb, BorderLayout.WEST);
- }
-
- private void setLabel() {
- typeLabel = new TypeLabel(entry.getType().getName());
- }
-
- /**
- * Rebuild the field tabs. This is called e.g. when a new content selector
- * has been added.
- */
- public void rebuildPanels() {
- // Remove change listener, because the rebuilding causes meaningless
- // events and trouble:
- tabbed.removeChangeListener(tabListener);
-
- setupFieldPanels();
- // Add the change listener again:
- tabbed.addChangeListener(tabListener);
- revalidate();
- repaint();
- }
-
- /**
- * getExtra checks the field name against BibtexFields.getFieldExtras(name).
- * If the name has an entry, the proper component to be shown is created and
- * returned. Otherwise, null is returned. In addition, e.g. listeners can be
- * added to the field editor, even if no component is returned.
- *
- * @param string
- * Field name
- * @return Component to show, or null if none.
- */
- public JComponent getExtra(String string, FieldEditor editor) {
- final FieldEditor ed = editor;
-
- // fieldName and parameter string identically ????
- final String fieldName = editor.getFieldName();
-
- String s = BibtexFields.getFieldExtras(string);
-
- // timestamp or a other field with datepicker command
- if ((fieldName.equals(Globals.prefs.get("timeStampField")))
- || ((s != null) && s.equals("datepicker"))) {
- // double click AND datefield => insert the current date (today)
- ((JTextArea) ed).addMouseListener(new MouseAdapter() {
- public void mouseClicked(MouseEvent e) {
- if (e.getClickCount() == 2) // double click
- {
- String date = Util.easyDateFormat();
- ed.setText(date);
- }
- }
- });
-
- // insert a datepicker, if the extras field contains this command
- if ((s != null) && s.equals("datepicker")) {
- DatePickerButton datePicker = new DatePickerButton(ed);
- return datePicker.getDatePicker();
- }
- }
-
- if ((s != null) && s.equals("external")) {
-
- // Add external viewer listener for "pdf" and "url" fields.
- ((JComponent) editor).addMouseListener(new ExternalViewerListener());
-
- return null;
- } else if ((s != null) && s.equals("journalNames")) {
- // Add controls for switching between abbreviated and full journal
- // names.
- // If this field also has a FieldContentSelector, we need to combine
- // these.
- JPanel controls = new JPanel();
- controls.setLayout(new BorderLayout());
- if (panel.metaData.getData(Globals.SELECTOR_META_PREFIX + editor.getFieldName()) != null) {
- FieldContentSelector ws = new FieldContentSelector(frame, panel, frame, editor,
- panel.metaData, storeFieldAction, false, ", ");
- contentSelectors.add(ws);
- controls.add(ws, BorderLayout.NORTH);
- }
- controls.add(JournalAbbreviations.getNameSwitcher(this, editor, panel.undoManager),
- BorderLayout.SOUTH);
- return controls;
- } else if (panel.metaData.getData(Globals.SELECTOR_META_PREFIX + editor.getFieldName()) != null) {
- FieldContentSelector ws = new FieldContentSelector(frame, panel, frame, editor,
- panel.metaData, storeFieldAction, false,
- (editor.getFieldName().equals("author") ? " and " : ", "));
- contentSelectors.add(ws);
-
- return ws;
- } else if ((s != null) && s.equals("browse")) {
- JButton but = new JButton(Globals.lang("Browse"));
- ((JComponent) editor).addMouseListener(new ExternalViewerListener());
-
- // but.setBackground(GUIGlobals.lightGray);
- but.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- String dir = ed.getText();
-
- if (dir.equals(""))
- dir = prefs.get(fieldName + Globals.FILETYPE_PREFS_EXT, "");
-
- String chosenFile = Globals.getNewFile(frame, new File(dir), "." + fieldName,
- JFileChooser.OPEN_DIALOG, false);
-
- if (chosenFile != null) {
- File newFile = new File(chosenFile); // chooser.getSelectedFile();
- ed.setText(newFile.getPath());
- prefs.put(fieldName + Globals.FILETYPE_PREFS_EXT, newFile.getPath());
- updateField(ed);
- }
- }
- });
-
- return but;
- // } else if ((s != null) && s.equals("browsePdf")) {
- } else if ((s != null) && (s.equals("browseDoc") || s.equals("browseDocZip"))) {
-
- final String ext = "." + fieldName.toLowerCase();
- final OpenFileFilter off;
- if (s.equals("browseDocZip"))
- off = new OpenFileFilter(new String[] { ext, ext + ".gz", ext + ".bz2" });
- else
- off = new OpenFileFilter(new String[] { ext });
-
- ExternalFilePanel pan = new ExternalFilePanel(frame, panel.metaData(), this, fieldName,
- off, ed);
- return pan;
- }
- /*
- * else if ((s != null) && s.equals("browsePs")) { ExternalFilePanel pan =
- * new ExternalFilePanel(frame, this, "ps", off, ed); return pan; }
- */
- else if ((s != null) && s.equals("url")) {
- ((JComponent) editor).setDropTarget(new DropTarget((Component) editor,
- DnDConstants.ACTION_NONE, new SimpleUrlDragDrop(editor, storeFieldAction)));
-
- return null;
- }
-
- else
- return null;
- }
-
- private void setupSourcePanel() {
- source = new JTextArea() {
- private boolean antialias = Globals.prefs.getBoolean("antialias");
-
- public void paint(Graphics g) {
- Graphics2D g2 = (Graphics2D) g;
- if (antialias)
- g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
- RenderingHints.VALUE_ANTIALIAS_ON);
- super.paint(g2);
- }
- };
+ public void paint(Graphics g) {
+ Graphics2D g2 = (Graphics2D) g;
+ if (antialias)
+ g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+ RenderingHints.VALUE_ANTIALIAS_ON);
+ super.paint(g2);
+ }
+ };
//DefaultFormBuilder builder = new DefaultFormBuilder
// (srcPanel, new FormLayout( "fill:pref:grow", "fill:pref:grow"));
source.setEditable(true); // prefs.getBoolean("enableSourceEditing"));
- source.setLineWrap(true);
- source.setTabSize(GUIGlobals.INDENT);
- source.addFocusListener(new FieldEditorFocusListener());
- // Add the global focus listener, so a menu item can see if this field
- // was focused when
- // an action was called.
- source.addFocusListener(Globals.focusListener);
- source.setFont(new Font("Monospaced", Font.PLAIN, Globals.prefs.getInt("fontSize")));
- setupJTextComponent(source);
- updateSource();
-
- JScrollPane sp = new JScrollPane(source, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
- JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
- //builder.append(sp);
+ source.setLineWrap(true);
+ source.setTabSize(GUIGlobals.INDENT);
+ source.addFocusListener(new FieldEditorFocusListener());
+ // Add the global focus listener, so a menu item can see if this field
+ // was focused when
+ // an action was called.
+ source.addFocusListener(Globals.focusListener);
+ source.setFont(new Font("Monospaced", Font.PLAIN, Globals.prefs.getInt("fontSize")));
+ setupJTextComponent(source);
+ updateSource();
+
+ JScrollPane sp = new JScrollPane(source, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+ JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+ //builder.append(sp);
srcPanel.setLayout(new BorderLayout());
srcPanel.add(sp, BorderLayout.CENTER);
}
- public void updateSource() {
- if (updateSource) {
- StringWriter sw = new StringWriter(200);
+ public void updateSource() {
+ if (updateSource) {
+ StringWriter sw = new StringWriter(200);
- try {
- entry.write(sw, new net.sf.jabref.export.LatexFieldFormatter(), false);
+ try {
+ entry.write(sw, new net.sf.jabref.export.LatexFieldFormatter(), false);
- String srcString = sw.getBuffer().toString();
- source.setText(srcString);
- lastSourceStringAccepted = srcString;
- } catch (IOException ex) {
- source.setText(ex.getMessage() + "\n\n" +
+ String srcString = sw.getBuffer().toString();
+ source.setText(srcString);
+ lastSourceStringAccepted = srcString;
+ } catch (IOException ex) {
+ source.setText(ex.getMessage() + "\n\n" +
Globals.lang("Correct the entry, and "
- + "reopen editor to display/edit source."));
- source.setEditable(false);
- }
+ + "reopen editor to display/edit source."));
+ source.setEditable(false);
+ }
+
+
+ }
+ }
+
+ /**
+ * NOTE: This method is only used for the source panel, not for the
+ * other tabs. Look at EntryEditorTab for the setup of text components
+ * in the other tabs.
+ */
+ public void setupJTextComponent(JTextComponent ta) {
+
+
+ // Set up key bindings and focus listener for the FieldEditor.
+ InputMap im = ta.getInputMap(JComponent.WHEN_FOCUSED);
+ ActionMap am = ta.getActionMap();
+
+ // im.put(KeyStroke.getKeyStroke(GUIGlobals.closeKey), "close");
+ // am.put("close", closeAction);
+ im.put(prefs.getKey("Entry editor, store field"), "store");
+ am.put("store", storeFieldAction);
+
+ im.put(prefs.getKey("Entry editor, next panel"), "right");
+ im.put(prefs.getKey("Entry editor, next panel 2"), "right");
+ am.put("right", switchRightAction);
+
+ im.put(prefs.getKey("Entry editor, previous panel"), "left");
+ im.put(prefs.getKey("Entry editor, previous panel 2"), "left");
+ am.put("left", switchLeftAction);
+
+ im.put(prefs.getKey("Help"), "help");
+ am.put("help", helpAction);
+ im.put(prefs.getKey("Save database"), "save");
+ am.put("save", saveDatabaseAction);
+
+ im.put(Globals.prefs.getKey("Next tab"), "nexttab");
+ am.put("nexttab", frame.nextTab);
+ im.put(Globals.prefs.getKey("Previous tab"), "prevtab");
+ am.put("prevtab", frame.prevTab);
+ try {
+ HashSet keys = new HashSet(ta
+ .getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
+ keys.clear();
+ keys.add(AWTKeyStroke.getAWTKeyStroke("pressed TAB"));
+ ta.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, keys);
+ keys = new HashSet(ta
+ .getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
+ keys.clear();
+ keys.add(KeyStroke.getKeyStroke("shift pressed TAB"));
+ ta.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, keys);
+ } catch (Throwable t) {
+ System.err.println(t);
+ }
+
+ ta.addFocusListener(new FieldListener());
+ }
+
+ public void requestFocus() {
+ activateVisible();
+ }
+
+ private void activateVisible() {
+ Object activeTab = tabs.get(tabbed.getSelectedIndex());
+
+ if (activeTab instanceof EntryEditorTab)
+ ((EntryEditorTab) activeTab).activate();
+ else
+ new FocusRequester(source);
+ // ((JComponent)activeTab).requestFocus();
+ }
+
+ /**
+ * Reports the enabled status of the editor, as set by setEnabled()
+ */
+ public boolean isEnabled() {
+ return source.isEnabled();
+ }
+
+ /**
+ * Sets the enabled status of all text fields of the entry editor.
+ */
+ public void setEnabled(boolean enabled) {
+ for (Iterator i = tabs.iterator(); i.hasNext();) {
+ Object o = i.next();
+ if (o instanceof EntryEditorTab) {
+ ((EntryEditorTab) o).setEnabled(enabled);
+ }
+ }
+ source.setEnabled(enabled);
+
+ }
+
+ /**
+ * Centers the given row, and highlights it.
+ *
+ * @param row
+ * an <code>int</code> value
+ */
+ private void scrollTo(int row) {
+ panel.mainTable.setRowSelectionInterval(row, row);
+ panel.mainTable.ensureVisible(row);
+ }
+
+ /**
+ * Makes sure the current edit is stored.
+ */
+ public void storeCurrentEdit() {
+ Component comp = Globals.focusListener.getFocused();
+ if ((comp instanceof FieldEditor) && this.isAncestorOf(comp)) {
+ storeFieldAction.actionPerformed(new ActionEvent(comp, 0, ""));
+ }
+ }
+
+ /**
+ * Returns the index of the active (visible) panel.
+ *
+ * @return an <code>int</code> value
+ */
+ public int getVisiblePanel() {
+ return tabbed.getSelectedIndex();
+ }
+
+ /** Returns the name of the currently selected component. */
+ public String getVisiblePanelName() {
+ return tabbed.getSelectedComponent().getName();
+ }
+
+ /**
+ * Sets the panel with the given index visible.
+ *
+ * @param i
+ * an <code>int</code> value
+ */
+ public void setVisiblePanel(int i) {
+ tabbed.setSelectedIndex(Math.min(i, tabbed.getTabCount() - 1));
+ }
+
+ public void setVisiblePanel(String name) {
+ for (int i = 0; i < tabbed.getTabCount(); ++i) {
+ if (name.equals(tabbed.getComponent(i).getName())) {
+ tabbed.setSelectedIndex(i);
+ return;
+ }
+ }
+ if (tabbed.getTabCount() > 0)
+ tabbed.setSelectedIndex(0);
+ }
+
+ /**
+ * Updates this editor to show the given entry, regardless of type
+ * correspondence.
+ *
+ * @param be
+ * a <code>BibtexEntry</code> value
+ */
+ public synchronized void switchTo(BibtexEntry be) {
+ if (entry == be)
+ return;
+
+ // Util.pr("EntryEditor.switchTo(BibtexEntry): "+entry.getCiteKey());
+ // Util.pr("::EntryEditor.switchTo(BibtexEntry): "+this.type.getName());
+ storeCurrentEdit();
+
+ // Remove this instance as property listener for the entry:
+ entry.removePropertyChangeListener(this);
+
+ // Register as property listener for the new entry:
+ be.addPropertyChangeListener(this);
+
+ entry = be;
+
+ updateAllFields();
+ validateAllFields();
+ updateSource();
+ panel.showing = be;
+
+ }
+
+ /**
+ * Returns false if the contents of the source panel has not been validated,
+ * true othervise.
+ */
+ public boolean lastSourceAccepted() {
+ if (tabbed.getSelectedComponent() == srcPanel)
+ storeSource(false);
+
+ return lastSourceAccepted;
+ }
+
+ /*
+ * public boolean storeSourceIfNeeded() { if (tabbed.getSelectedIndex() ==
+ * sourceIndex) return storeSource(); else return true; }
+ */
+ public boolean storeSource(boolean showError) {
+ // Store edited bibtex code.
+ BibtexParser bp = new BibtexParser(new java.io.StringReader(source.getText()));
+
+ try {
+ BibtexDatabase db = bp.parse().getDatabase();
+
+ if (db.getEntryCount() > 1)
+ throw new Exception("More than one entry found.");
+
+ if (db.getEntryCount() < 1)
+ throw new Exception("No entries found.");
+
+ NamedCompound compound = new NamedCompound(Globals.lang("source edit"));
+ BibtexEntry nu = db.getEntryById((String) db.getKeySet().iterator().next());
+ String id = entry.getId();
+ String
+ // oldKey = entry.getCiteKey(),
+ newKey = nu.getCiteKey();
+ boolean anyChanged = false;
+ boolean duplicateWarning = false;
+ boolean emptyWarning = newKey == null || newKey.equals("");
+
+ if (panel.database.setCiteKeyForEntry(id, newKey)) {
+ duplicateWarning = true;
+
+ // First, remove fields that the user have removed.
+ }
+
+ Object[] fields = entry.getAllFields();
+
+ for (int i = 0; i < fields.length; i++) {
+ if (BibtexFields.isDisplayableField(fields[i].toString())) {
+ if (nu.getField(fields[i].toString()) == null) {
+ compound.addEdit(new UndoableFieldChange(entry, fields[i].toString(), entry
+ .getField(fields[i].toString()), (Object) null));
+ entry.clearField(fields[i].toString());
+ anyChanged = true;
+ }
+ }
+ }
+
+ // Then set all fields that have been set by the user.
+ fields = nu.getAllFields();
+
+ for (int i = 0; i < fields.length; i++) {
+ if (entry.getField(fields[i].toString()) != nu.getField(fields[i].toString())) {
+ String toSet = (String) nu.getField(fields[i].toString());
+
+ // Test if the field is legally set.
+ (new LatexFieldFormatter()).format(toSet, fields[i].toString());
+
+ compound.addEdit(new UndoableFieldChange(entry, fields[i].toString(), entry
+ .getField(fields[i].toString()), toSet));
+ entry.setField(fields[i].toString(), toSet);
+ anyChanged = true;
+ }
+ }
+
+ compound.end();
+
+ if (!anyChanged)
+ return true;
+
+ panel.undoManager.addEdit(compound);
+
+ /*
+ * if (((oldKey == null) && (newKey != null)) || ((oldKey != null) &&
+ * (newKey == null)) || ((oldKey != null) && (newKey != null) &&
+ * !oldKey.equals(newKey))) { }
+ */
+ if (duplicateWarning) {
+ warnDuplicateBibtexkey();
+ } else if (emptyWarning && showError) {
+ warnEmptyBibtexkey();
+ } else {
+ panel.output(Globals.lang("Stored entry") + ".");
+ }
+
+ lastSourceStringAccepted = source.getText();
+ updateAllFields();
+ lastSourceAccepted = true;
+ updateSource = true;
+
+ // TODO: does updating work properly after source stored?
+ // panel.tableModel.remap();
+ // panel.entryTable.repaint();
+ // panel.refreshTable();
+ panel.markBaseChanged();
+
+ return true;
+ } catch (Throwable ex) {
+ // ex.printStackTrace();
+ // The source couldn't be parsed, so the user is given an
+ // error message, and the choice to keep or revert the contents
+ // of the source text field.
+ updateSource = false;
+ lastSourceAccepted = false;
+ tabbed.setSelectedComponent(srcPanel);
+
+ if (showError) {
+ Object[] options = { Globals.lang("Edit"),
+ Globals.lang("Revert to original source") };
+
+ int answer = JOptionPane.showOptionDialog(frame, Globals.lang("Error: ") + ex.getMessage(),
+ Globals.lang("Problem with parsing entry"), JOptionPane.YES_NO_OPTION,
+ JOptionPane.ERROR_MESSAGE, null, options, options[0]);
+
+ if (answer != 0) {
+ updateSource = true;
+ updateSource();
+ }
+ }
+
+ return false;
+ }
+ }
+
+ public void setField(String fieldName, String newFieldData) {
+
+ for (Iterator i = tabs.iterator(); i.hasNext();) {
+ Object o = i.next();
+ if (o instanceof EntryEditorTab) {
+ ((EntryEditorTab) o).updateField(fieldName, newFieldData);
+ }
+ }
+
+ }
+
+ /**
+ * Sets all the text areas according to the shown entry.
+ */
+ public void updateAllFields() {
+ for (Iterator i = tabs.iterator(); i.hasNext();) {
+ Object o = i.next();
+ if (o instanceof EntryEditorTab) {
+ ((EntryEditorTab) o).setEntry(entry);
+ }
+ }
+ }
+
+ /**
+ * Removes the "invalid field" color from all text areas.
+ */
+ public void validateAllFields() {
+ for (Iterator i = tabs.iterator(); i.hasNext();) {
+ Object o = i.next();
+ if (o instanceof EntryEditorTab) {
+ ((EntryEditorTab) o).validateAllFields();
+ }
+ }
+ }
+
+ public void updateAllContentSelectors() {
+ if (contentSelectors.size() > 0) {
+ for (Iterator i = contentSelectors.iterator(); i.hasNext();)
+ ((FieldContentSelector) i.next()).rebuildComboBox();
+ }
+ }
+
+ /*
+ * Update the JTextArea when a field has changed.
+ *
+ * (non-Javadoc)
+ *
+ * @see java.beans.VetoableChangeListener#vetoableChange(java.beans.PropertyChangeEvent)
+ */
+ public void vetoableChange(PropertyChangeEvent e) {
+ String newValue = ((e.getNewValue() != null) ? e.getNewValue().toString() : "");
+ setField(e.getPropertyName(), newValue);
+ }
+
+ public void updateField(final Object source) {
+ storeFieldAction.actionPerformed(new ActionEvent(source, 0, ""));
+ }
+
+ private class TypeLabel extends JPanel {
+ private String label;
+
+ public TypeLabel(String type) {
+ label = type;
+ addMouseListener(new MouseAdapter() {
+ public void mouseClicked(MouseEvent e) {
+ boolean ctrlClick = prefs.getBoolean("ctrlClick");
+
+ if ((e.getButton() == MouseEvent.BUTTON3)
+ || (ctrlClick && (e.getButton() == MouseEvent.BUTTON1) && e.isControlDown())) {
+ JPopupMenu typeMenu = new JPopupMenu();
+
+ // typeMenu.addSeparator();
+ for (Iterator i = BibtexEntryType.ALL_TYPES.keySet().iterator(); i
+ .hasNext();)
+ typeMenu.add(new ChangeTypeAction(BibtexEntryType.getType((String) i
+ .next()), panel));
+
+ typeMenu.show(ths, e.getX(), e.getY());
+ }
+ }
+ });
+ }
+
+ public void paint(Graphics g) {
+ Graphics2D g2 = (Graphics2D) g;
+ g2.setColor(GUIGlobals.validFieldColor);
+ g2.setFont(GUIGlobals.typeNameFont);
+
+ FontMetrics fm = g2.getFontMetrics();
+ int width = fm.stringWidth(label);
+ g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+ g2.rotate(-Math.PI / 2, 0, 0);
+ g2.drawString(label, -width - 7, 28);
+ }
+ }
+
+ class FieldListener extends FocusAdapter {
+ /*
+ * Focus listener that fires the storeFieldAction when a FieldTextArea
+ * loses focus.
+ */
+ public void focusGained(FocusEvent e) {
+ }
+
+ public void focusLost(FocusEvent e) {
+ // Util.pr("Lost focus "+e.getSource().toString().substring(0,30));
+ if (!e.isTemporary())
+ updateField(e.getSource());
+ }
+ }
+
+ class TabListener implements ChangeListener {
+ public void stateChanged(ChangeEvent e) {
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ activateVisible();
+ }
+ });
+
+ // After the initial event train has finished, we tell the editor
+ // tab to update all
+ // its fields. This makes sure they are updated even if the tab we
+ // just left contained one
+ // or more of the same fields as this one:
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ Object activeTab = tabs.get(tabbed.getSelectedIndex());
+ if (activeTab instanceof EntryEditorTab)
+ ((EntryEditorTab) activeTab).updateAll();
+ }
+ });
+
+ }
+ }
+
+ class DeleteAction extends AbstractAction {
+ public DeleteAction() {
+ super(Globals.lang("Delete"), GUIGlobals.getImage("delete"));
+ putValue(SHORT_DESCRIPTION, Globals.lang("Delete entry"));
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ // Show confirmation dialog if not disabled:
+ boolean goOn = panel.showDeleteConfirmationDialog(1);
+
+ if (!goOn)
+ return;
+
+ panel.entryEditorClosing(EntryEditor.this);
+ panel.database.removeEntry(entry.getId());
+ panel.markBaseChanged();
+ panel.undoManager.addEdit(new UndoableRemoveEntry(panel.database, entry, panel));
+ panel.output(Globals.lang("Deleted") + " " + Globals.lang("entry"));
+ }
+ }
+
+ class CloseAction extends AbstractAction {
+ public CloseAction() {
+ super(Globals.lang("Close window"), GUIGlobals.getImage("close"));
+ putValue(SHORT_DESCRIPTION, Globals.lang("Close window"));
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ if (tabbed.getSelectedComponent() == srcPanel) {
+ updateField(source);
+ if (lastSourceAccepted)
+ panel.entryEditorClosing(EntryEditor.this);
+ } else
+ panel.entryEditorClosing(EntryEditor.this);
+ }
+ }
+
+ class CopyKeyAction extends AbstractAction {
+ public CopyKeyAction() {
+ super("Copy BibTeX key to clipboard");
+ putValue(SHORT_DESCRIPTION, "Copy BibTeX key to clipboard (Ctrl-K)");
+ // putValue(MNEMONIC_KEY, GUIGlobals.copyKeyCode);
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ String s = (String) (entry.getField(BibtexFields.KEY_FIELD));
+ StringSelection ss = new StringSelection(s);
+
+ if (s != null)
+ Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, ss);
+ }
+ }
+
+ public class StoreFieldAction extends AbstractAction {
+ public StoreFieldAction() {
+ super("Store field value");
+ putValue(SHORT_DESCRIPTION, "Store field value");
+ }
+
+ public void actionPerformed(ActionEvent e) {
+
+ if (e.getSource() instanceof FieldTextField) {
+ // Storage from bibtex key field.
+ FieldTextField fe = (FieldTextField) e.getSource();
+ String oldValue = entry.getCiteKey();
+ String newValue = fe.getText();
+
+ if (newValue.equals(""))
+ newValue = null;
+
+ if (((oldValue == null) && (newValue == null))
+ || ((oldValue != null) && (newValue != null) && oldValue.equals(newValue)))
+ return; // No change.
+
+ // Make sure the key is legal:
+ String cleaned = Util.checkLegalKey(newValue);
+ if ((cleaned != null) && !cleaned.equals(newValue)) {
+ JOptionPane.showMessageDialog(frame, Globals.lang("Invalid BibTeX key"),
+ Globals.lang("Error setting field"), JOptionPane.ERROR_MESSAGE);
+ fe.setBackground(GUIGlobals.invalidFieldBackground);
+ return;
+ } else {
+ fe.setBackground(/*
+ &nb