[svn-upgrade] Integrating new upstream version, jabref (2.3~beta1) upstream/2.3_beta1
authorgregor herrmann <gregoa@debian.org>
Sat, 30 Jun 2007 14:23:24 +0000 (14:23 -0000)
committergregor herrmann <gregoa@debian.org>
Sat, 30 Jun 2007 14:23:24 +0000 (14:23 -0000)
197 files changed:
build.number
build.xml
lib/forms-1.0.5.jar [new file with mode: 0644]
lib/glazedlists-1.7.0_java14.jar [deleted file]
lib/glazedlists-1.7.0_java15.jar [new file with mode: 0644]
lib/log4j-1.2.6.jar [new file with mode: 0755]
lib/log4j-1.2.9.jar [new file with mode: 0644]
src/help/About.html
src/help/BibtexHelp.html
src/help/Contents.html
src/help/CustomExports.html
src/help/EndNoteFilters.html
src/help/ExternalFiles.html
src/help/FileLinks.html [new file with mode: 0644]
src/help/LabelPatterns.html
src/help/StringEditorHelp.html
src/help/credits.txt
src/help/de/About.html
src/help/de/BibtexHelp.html
src/help/de/Contents.html
src/help/de/CustomExports.html
src/help/de/EndNoteFilters.html
src/help/de/EntryEditorHelp.html
src/help/de/ExternalFiles.html
src/help/de/FileLinks.html [new file with mode: 0644]
src/help/de/JabRef-UserManual_de.bib
src/help/de/JabRef-UserManual_de.tex
src/help/de/LabelPatterns.html
src/help/de/StringEditorHelp.html
src/help/fr/About.html
src/help/fr/BibtexHelp.html
src/help/fr/CustomExports.html
src/help/fr/EndNoteFilters.html
src/help/fr/LabelPatterns.html
src/help/fr/StringEditorHelp.html
src/images/JabRef-icon.png [new file with mode: 0644]
src/images/crystal_16/Icons.properties
src/images/crystal_16/colors.png [new file with mode: 0755]
src/images/crystal_16/openoffice.png [new file with mode: 0755]
src/images/crystal_16/save_all.png [new file with mode: 0755]
src/images/crystal_16/vim.png [new file with mode: 0644]
src/images/splash.png
src/java/net/sf/jabref/AdvancedTab.java
src/java/net/sf/jabref/AuthorList.java
src/java/net/sf/jabref/BasePanel.java
src/java/net/sf/jabref/BibtexDatabase.java
src/java/net/sf/jabref/BibtexEntry.java
src/java/net/sf/jabref/BibtexFields.java
src/java/net/sf/jabref/ContentSelectorDialog2.java
src/java/net/sf/jabref/DuplicateResolverDialog.java
src/java/net/sf/jabref/DuplicateSearch.java
src/java/net/sf/jabref/EntryEditor.java
src/java/net/sf/jabref/EntryEditorPrefsTab.java [new file with mode: 0644]
src/java/net/sf/jabref/EntryEditorTab.java
src/java/net/sf/jabref/ExternalProgramsTab.java [deleted file]
src/java/net/sf/jabref/ExternalTab.java
src/java/net/sf/jabref/FieldEditor.java
src/java/net/sf/jabref/FieldTextArea.java
src/java/net/sf/jabref/FieldTextField.java
src/java/net/sf/jabref/FieldTextMenu.java
src/java/net/sf/jabref/GUIGlobals.java
src/java/net/sf/jabref/GeneralTab.java
src/java/net/sf/jabref/Globals.java
src/java/net/sf/jabref/JabRef.java
src/java/net/sf/jabref/JabRefFileChooser.java
src/java/net/sf/jabref/JabRefFrame.java
src/java/net/sf/jabref/JabRefPreferences.java
src/java/net/sf/jabref/PrefsDialog2.java
src/java/net/sf/jabref/PrefsDialog3.java
src/java/net/sf/jabref/PreviewPanel.java
src/java/net/sf/jabref/RightClickMenu.java
src/java/net/sf/jabref/SidePaneManager.java
src/java/net/sf/jabref/TablePrefsTab.java
src/java/net/sf/jabref/Util.java
src/java/net/sf/jabref/XmpPrefsTab.java
src/java/net/sf/jabref/export/ExportFormats.java
src/java/net/sf/jabref/export/FileActions.java
src/java/net/sf/jabref/export/LatexFieldFormatter.java
src/java/net/sf/jabref/export/MSBibExportFormat.java [new file with mode: 0644]
src/java/net/sf/jabref/export/ModsExportFormat.java
src/java/net/sf/jabref/export/SaveAllAction.java [new file with mode: 0644]
src/java/net/sf/jabref/export/layout/LayoutEntry.java
src/java/net/sf/jabref/export/layout/format/AuthorFirstFirstCommas.java [new file with mode: 0644]
src/java/net/sf/jabref/export/layout/format/AuthorNatBib.java [new file with mode: 0644]
src/java/net/sf/jabref/export/layout/format/RemoveLatexCommands.java
src/java/net/sf/jabref/export/layout/format/RemoveTilde.java [new file with mode: 0644]
src/java/net/sf/jabref/external/AccessLinksForEntries.java [new file with mode: 0644]
src/java/net/sf/jabref/external/AutoSetExternalFileForEntries.java
src/java/net/sf/jabref/external/ConfirmCloseFileListEntryEditor.java [new file with mode: 0644]
src/java/net/sf/jabref/external/DownloadExternalFile.java [new file with mode: 0644]
src/java/net/sf/jabref/external/DroppedFileHandler.java
src/java/net/sf/jabref/external/ExternalFileMenuItem.java
src/java/net/sf/jabref/external/ExternalFilePanel.java
src/java/net/sf/jabref/external/ExternalFileType.java
src/java/net/sf/jabref/external/ExternalFileTypeEditor.java [new file with mode: 0644]
src/java/net/sf/jabref/external/ExternalFileTypeEntryEditor.java [new file with mode: 0644]
src/java/net/sf/jabref/external/FileLinksUpgradeWarning.java [new file with mode: 0644]
src/java/net/sf/jabref/external/PushToApplicationButton.java
src/java/net/sf/jabref/external/PushToLatexEditor.java
src/java/net/sf/jabref/external/PushToVim.java [new file with mode: 0644]
src/java/net/sf/jabref/external/PushToWinEdt.java
src/java/net/sf/jabref/external/SynchronizeFileField.java [new file with mode: 0644]
src/java/net/sf/jabref/external/UnknownExternalFileType.java [new file with mode: 0644]
src/java/net/sf/jabref/external/UpgradeExternalLinks.java [new file with mode: 0644]
src/java/net/sf/jabref/external/WriteXMPAction.java
src/java/net/sf/jabref/groups/EntryTableTransferHandler.java
src/java/net/sf/jabref/gui/AutoCompleteListener.java [new file with mode: 0644]
src/java/net/sf/jabref/gui/AutoCompleter.java [new file with mode: 0644]
src/java/net/sf/jabref/gui/CheckBoxFileChooser.java [new file with mode: 0644]
src/java/net/sf/jabref/gui/DatabasePropertiesDialog.java
src/java/net/sf/jabref/gui/FileListEditor.java [new file with mode: 0644]
src/java/net/sf/jabref/gui/FileListEntry.java [new file with mode: 0644]
src/java/net/sf/jabref/gui/FileListEntryEditor.java [new file with mode: 0644]
src/java/net/sf/jabref/gui/FileListTableModel.java [new file with mode: 0644]
src/java/net/sf/jabref/gui/GlazedEntrySorter.java
src/java/net/sf/jabref/gui/ImportInspectionDialog.java
src/java/net/sf/jabref/gui/MainTableFormat.java
src/java/net/sf/jabref/gui/MainTableSelectionListener.java
src/java/net/sf/jabref/imports/BibtexParser.java
src/java/net/sf/jabref/imports/CheckForNewEntryTypesAction.java [new file with mode: 0644]
src/java/net/sf/jabref/imports/CopacImporter.java [new file with mode: 0644]
src/java/net/sf/jabref/imports/EndnoteImporter.java
src/java/net/sf/jabref/imports/EntryFetcher.java
src/java/net/sf/jabref/imports/FieldContentParser.java
src/java/net/sf/jabref/imports/IEEEXploreFetcher.java
src/java/net/sf/jabref/imports/ImportFormatReader.java
src/java/net/sf/jabref/imports/ImportMenuItem.java
src/java/net/sf/jabref/imports/MedlineHandler.java
src/java/net/sf/jabref/imports/MsBibImporter.java [new file with mode: 0644]
src/java/net/sf/jabref/imports/OAI2Fetcher.java
src/java/net/sf/jabref/imports/OAI2Handler.java
src/java/net/sf/jabref/imports/OpenDatabaseAction.java
src/java/net/sf/jabref/imports/ParserResult.java
src/java/net/sf/jabref/imports/PostOpenAction.java [new file with mode: 0644]
src/java/net/sf/jabref/imports/RisImporter.java
src/java/net/sf/jabref/labelPattern/LabelPatternUtil.java
src/java/net/sf/jabref/mods/MODSEntry.java
src/java/net/sf/jabref/mods/PageNumbers.java
src/java/net/sf/jabref/mods/PersonName.java
src/java/net/sf/jabref/msbib/MSBibDatabase.java [new file with mode: 0644]
src/java/net/sf/jabref/msbib/MSBibEntry.java [new file with mode: 0644]
src/java/net/sf/jabref/util/ResourceExtractor.java
src/java/net/sf/jabref/util/XMPSchemaBibtex.java
src/java/net/sf/jabref/util/XMPUtil.java
src/java/tests/net/sf/jabref/AllTests.java
src/java/tests/net/sf/jabref/BibtexDatabaseTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/FileBasedTestCase.java
src/java/tests/net/sf/jabref/UtilFindFileTest.java
src/java/tests/net/sf/jabref/UtilTest.java
src/java/tests/net/sf/jabref/export/layout/AllTests.java
src/java/tests/net/sf/jabref/export/layout/format/AllTests.java
src/java/tests/net/sf/jabref/export/layout/format/BibtexNameLayoutFormatterTest.java
src/java/tests/net/sf/jabref/export/layout/format/RemoveTildeTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/imports/AllTests.java
src/java/tests/net/sf/jabref/imports/BibtexParserTest.java
src/java/tests/net/sf/jabref/imports/CopacImporterTest.java [new file with mode: 0644]
src/java/tests/net/sf/jabref/imports/CopacImporterTest1.txt [new file with mode: 0644]
src/java/tests/net/sf/jabref/imports/CopacImporterTest2.txt [new file with mode: 0644]
src/java/tests/net/sf/jabref/imports/IsiImporterTest.java
src/java/tests/net/sf/jabref/imports/OAI2ImportTest.java
src/java/tests/net/sf/jabref/imports/oai2.xml
src/java/tests/net/sf/jabref/imports/oai23.xml [new file with mode: 0644]
src/java/tests/net/sf/jabref/util/XMPSchemaBibtexTest.java
src/java/tests/net/sf/jabref/util/XMPUtilTest.java
src/resource/JabRef_de.properties
src/resource/JabRef_du.properties
src/resource/JabRef_en.properties
src/resource/JabRef_fr.properties
src/resource/JabRef_it.properties
src/resource/JabRef_no.properties
src/resource/Menu_de.properties
src/resource/Menu_du.properties
src/resource/Menu_en.properties
src/resource/Menu_fr.properties
src/resource/Menu_it.properties
src/resource/Menu_no.properties
src/resource/build.properties
src/resource/layout/harvard/harvard.article.layout
src/resource/layout/harvard/harvard.incollection.layout
src/resource/layout/harvard/harvard.inproceedings.layout
src/resource/layout/harvard/harvard.layout
src/resource/layout/harvard/harvard.mastersthesis.layout
src/resource/layout/harvard/harvard.phdthesis.layout
src/resource/layout/misq/misq.article.layout [new file with mode: 0644]
src/resource/layout/misq/misq.begin.layout [new file with mode: 0644]
src/resource/layout/misq/misq.book.layout [new file with mode: 0644]
src/resource/layout/misq/misq.end.layout [new file with mode: 0644]
src/resource/layout/misq/misq.layout [new file with mode: 0644]
src/resource/layout/misq/readme.txt [new file with mode: 0644]
src/txt/README
src/txt/TODO
src/windows/nsis/README.txt
src/windows/nsis/installer_languages/english.nsh [new file with mode: 0644]
src/windows/nsis/installer_languages/french.nsh [new file with mode: 0644]
src/windows/nsis/installer_languages/german.nsh [new file with mode: 0644]
src/windows/nsis/installer_languages/italian.nsh [new file with mode: 0644]
src/windows/nsis/setup.nsi

index 0ed842d..208a056 100644 (file)
@@ -1,3 +1,3 @@
 #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
index 2c8a2ae..5b36cd7 100644 (file)
--- a/build.xml
+++ b/build.xml
                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
@@ -47,7 +47,7 @@
      ========================================================================================== -->
 
        <!-- 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>
 
@@ -362,7 +361,7 @@ version=${jabref.version}</echo>
                <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}" />
@@ -384,17 +383,19 @@ version=${jabref.version}</echo>
        <!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
 
        <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}"/>
                
@@ -417,6 +418,9 @@ version=${jabref.version}</echo>
                <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>
 
        <!--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
diff --git a/lib/forms-1.0.5.jar b/lib/forms-1.0.5.jar
new file mode 100644 (file)
index 0000000..ddd8acb
Binary files /dev/null and b/lib/forms-1.0.5.jar differ
diff --git a/lib/glazedlists-1.7.0_java14.jar b/lib/glazedlists-1.7.0_java14.jar
deleted file mode 100644 (file)
index 1d2611b..0000000
Binary files a/lib/glazedlists-1.7.0_java14.jar and /dev/null differ
diff --git a/lib/glazedlists-1.7.0_java15.jar b/lib/glazedlists-1.7.0_java15.jar
new file mode 100644 (file)
index 0000000..38fb8c1
Binary files /dev/null and b/lib/glazedlists-1.7.0_java15.jar differ
diff --git a/lib/log4j-1.2.6.jar b/lib/log4j-1.2.6.jar
new file mode 100755 (executable)
index 0000000..be4a917
Binary files /dev/null and b/lib/log4j-1.2.6.jar differ
diff --git a/lib/log4j-1.2.9.jar b/lib/log4j-1.2.9.jar
new file mode 100644 (file)
index 0000000..a6568b0
Binary files /dev/null and b/lib/log4j-1.2.9.jar differ
index 2726ab4..46d72ca 100755 (executable)
@@ -20,6 +20,7 @@ Nizar N. Batada,
 Michel Baylac,
 Guillaume Gardey,
 Cyrille d'Haese,
+S M Mahbub Murshed,
 Raik Nagel,
 Christopher Oezbek,
 Ellen Reitmayr,
@@ -36,13 +37,14 @@ J&ouml;rg Zieren
 <H2>Contributions from:</H2>
 
 Michael Beckmann,
-Oliver Böckmann, 
+Oliver Bckmann, 
 Kolja Brix,
 Fr&eacute;d&eacute;ric Darboux,
 Fabrice Dessaint,
 Nathan Dunn,
 Brian Van Essen,
 Alexis Gallagher,
+David Gleich,
 Sascha Hunold,
 Bernd Kalbfuss,
 Martin K&auml;hmer,
@@ -51,7 +53,9 @@ Krzysztof A. Ko&#347;ciuszkiewicz,
 Christian Kopf,
 Jeffrey Kuhn,
 Alex Montgomery,
+S. M. Mahbub Murshed,
 Ambrogio Oliva,
+Stephan Rave,
 John Relph,
 Hannes Restel,
 Moritz Ringler,
index bbe448f..e6156f5 100755 (executable)
@@ -22,7 +22,7 @@ program.
 
 
 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,
@@ -261,6 +261,17 @@ information.  Here is a list of some of the more common fields:
     </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>
@@ -366,4 +377,4 @@ information.  Here is a list of some of the more common fields:
 
 
 
-</body></html> 
\ No newline at end of file
+</body></html>
\ No newline at end of file
index dbaa422..d1f609b 100755 (executable)
@@ -17,6 +17,7 @@
     <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>
@@ -35,4 +36,4 @@
     <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>
index 29d4f69..02967fe 100644 (file)
@@ -17,7 +17,8 @@ The only requirement for a valid export filter is the existence of a file with
 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).
@@ -128,8 +129,10 @@ to have been run earlier.
 <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.
@@ -139,6 +142,8 @@ to have been run earlier.
 <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.
@@ -161,7 +166,7 @@ to have been run earlier.
 <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>
   &lt;case1&gt;@&lt;range11&gt;@&lt;format&gt;@&lt;range12&gt;@&lt;format&gt;@&lt;range13&gt;...@@<br>
index 75ff8e1..01737d0 100644 (file)
@@ -8,7 +8,7 @@
 <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>
@@ -78,8 +78,7 @@ and therefore will be improperly formatted.
 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>
@@ -94,12 +93,12 @@ appear in the entry window. To modify the EndNote Reference Types,
 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
index 61ea300..f4af9c0 100644 (file)
@@ -5,6 +5,8 @@
 
 <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.
 
diff --git a/src/help/FileLinks.html b/src/help/FileLinks.html
new file mode 100644 (file)
index 0000000..a2e9792
--- /dev/null
@@ -0,0 +1,50 @@
+<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
index cee6fd0..c4330c9 100644 (file)
@@ -32,6 +32,8 @@ no more than N characters.<BR>
 <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>.
index 411d8da..e869da1 100755 (executable)
@@ -22,10 +22,15 @@ name in each entry, the characters '#JTB#' (without quotes) are put into the
 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
@@ -38,4 +43,4 @@ in alphabetical order in the string editor, and stored in the same order, except
 a different ordering is required by BibTeX.
 
 </BODY>
-</HTML> 
\ No newline at end of file
+</HTML>
\ No newline at end of file
index f60fac9..5b28037 100644 (file)
@@ -33,6 +33,7 @@ Rudolf Seemann
 Mike Smoot
 Ulrich Stärk
 Martin Stolle
+Matthias Stuermer
 David Weitzman
 Seb Wills
 
index 44c95ac..b47ff1d 100644 (file)
@@ -43,6 +43,7 @@ Fabrice Dessaint,
 Nathan Dunn,
 Brian Van Essen,
 Alexis Gallagher,
+David Gleich,
 Sascha Hunold,
 Bernd Kalbfuss,
 Martin K&auml;hmer,
@@ -51,7 +52,9 @@ Krzysztof A. Ko&#347;ciuszkiewicz,
 Christian Kopf,
 Jeffrey Kuhn,
 Alex Montgomery,
+S. M. Mahbub Murshed,
 Ambrogio Oliva,
+Stephan Rave,
 John Relph,
 Hannes Restel,
 Moritz Ringler,
index 28d27cf..4cfabf0 100644 (file)
@@ -191,6 +191,18 @@ Feldnamen, die mit einem Stern* versehen sind, werden nicht direkt von JabRef un
     </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&uuml;r elektronische Zeitschriften benutzt, die auch im Druck erscheinen. Mit dieser Nummer, die die Seitenzahlen ersetzt, l&auml;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>
index 1fd0a95..c12d472 100644 (file)
@@ -28,7 +28,8 @@
 <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>
index 857ed29..df92a23 100644 (file)
@@ -16,7 +16,8 @@ Die einzige Voraussetzung f&uuml;r einen Exportfilter ist, da&szlig; eine Datei
 Endung <b>.layout</b> vorhanden ist. Um einen neuen, eigenen Exportfilter hinzuzuf&uuml;gen,
 &ouml;ffnen Sie das Dialogfenster <b>Optionen -> Verwalte externe Exportfilter</b> und klicken
 auf die Schaltfl&auml;che <b>Neu</b>. Es &ouml;ffnet sich ein neues Fenster, in dem Sie einen
-Namen (der im Men&uuml; <b>Datei -> Externe Exportfilter</b> angezeigt wird), eine Pfadangabe
+Namen (der als Auswahl im Dateityp-Dropdownmen&uuml; erscheint, wenn man <b>Datei -> Exportieren</b>
+im JabRef-Hauptfenster w&auml;hlt), eine Pfadangabe
 zur <b>.layout</b>-Datei und die gew&uuml;nschte Dateiendung f&uuml;r den Exportfilter angeben
 k&ouml;nnen. Wenn Sie den Exportfilter benutzen, wird diese Endung im Datei-Dialog automatisch
 vorgeschlagen.
@@ -101,24 +102,52 @@ Formatierern auflisten.
 <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&uuml;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&uuml;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 "&amp;".
 <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&uuml;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&uuml;rzten Vornamen werden gel&ouml;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&uuml;gbaren Formatierer das Ergebnis erzielt, das Sie erreichen m&ouml;chten,
index 7201c0e..f2482ed 100644 (file)
@@ -8,8 +8,7 @@
 <h2>Exportieren aus JabRef</h2>
 
 JabRef kann Dateien so exportieren, dass EndNote sie lesen kann.
-Um diese Funktion zu nutzen, w&auml;hlen Sie <b>Extras -> Endnote</b>
-und w&auml;hlen dann den Namen der Export-Datei.
+Um diese Funktion zu nutzen, w&auml;hlen Sie <b>Datei -> Exportieren</b>, w&auml;hlen als Dateityp <b>Endnote (txt)</b> und dann den Namen der Export-Datei.
 
 <h2>Importieren in EndNote</h2>
 
@@ -77,8 +76,8 @@ und demzufolge unpassend formatiert.
 Der vorgegebene EndNote-Importfilter kann das Feld author nicht richtig analysieren.
 Der EndNote Import from JabRef Filter kann dies. Au&szlig;erdem erkennt dieser Filter
 ein Feld <code>endnotereftype</code>, das die vorgegebene Zuordnung &uuml;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>&Auml;ndern der EndNote Referenztypen</h3>
 
@@ -95,7 +94,7 @@ Datei <code>readme.txt</code> folgen.
 
 EndNote hat einen Export-Stil BibTeX, der allerdings nicht alle Eintragstypen und Felder von BibTeX
 und auch nicht die zus&auml;tzlich von JabRef genutzten Allgemeinen Felder (<i>pdf, owner, key</i>
-usw.) unterst&uuml;tzt. Falls Sie diese Felder nutzen wollen, extrahieren Sie die EndNote Extras
+usw.) unterst&uuml;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
index 29cca8c..4fa71f9 100644 (file)
@@ -6,7 +6,7 @@
 <H1>Der Eintrags-Editor</H1>
 
 <em>Ge&ouml;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&auml;hlt ist), oder durch Dr&uuml;cken auf ENTER. Der
+auf die Zeile eines Eintrags oder durch Dr&uuml;cken auf ENTER. Der
 Eintrags-Editor wird geschlossen, indem man auf ESC dr&uuml;ckt.</em>
 <P>
 Im Eintrags-Editor k&ouml;nnen Sie alle relevanten Informationen eines Eintrags festlegen.
index f40ead6..b4d58ed 100644 (file)
@@ -3,8 +3,10 @@
 <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&uuml;r Links zu externen Dateien</a>.
+<p>
 Mit JabRef k&ouml;nnen Sie Ihre Eintr&auml;ge mit den entsprechenden PDF- oder PS-Dateien,
 die sich auf Ihrem Computer befinden, verlinken. Ebenso ist es m&ouml;glich, Dateien
 im Internet &uuml;ber ein URL oder DOI zu verlinken.
diff --git a/src/help/de/FileLinks.html b/src/help/de/FileLinks.html
new file mode 100644 (file)
index 0000000..f7f8074
--- /dev/null
@@ -0,0 +1,36 @@
+<HTML>
+
+<BODY text="#275856">
+<basefont size="4" color="#2F4958" face="arial">
+
+<H1>Datei-Links in JabRef</H1>
+
+JabRef l&auml;sst Sie Ihre Eintr&auml;ge mit Dateien jeden Typs verlinken, die Sie auf Ihrem System gespeichert haben. Au&szlig;erdem sind Links zu Dokumenten im Internet in der Form eines URL oder eines DOI m&ouml;glich. Jedem Eintrag kann eine beliebige Anzahl von Datei-Links zugeordnet werden und jede verlinkte Datei kann schnell aus JabRef heraus ge&ouml;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&auml;nglich sind.
+
+<H2>Einrichten der Dateitypen</H2>
+
+F&uuml;r jeden Datei-Link muss ein Dateityp gew&auml;hlt werden, damit das richtige Programm zum &Ouml;ffnen der Datei und das entsprechende Icon gefunden werden. Die Liste der Dateitypen k&ouml;nnen Sie einsehen und bearbeiten, indem Sie <b>Optionen -> Externe Dateitypen verwalten</b> w&auml;hlen oder auf die Schaltfl&auml;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 &Ouml;ffnen der Dateien. Wenn Sie Windows benutzen, k&ouml;nnen Sie den Namen der Anwendung weglassen, wenn Sie das Standardprogramm verwenden wollen.
+
+<h2>Datei-Links zu einem Eintrag hinzuf&uuml;gen</h2>
+
+Wenn bei den <a href="GeneralFields.html">Allgemeinen Feldern</a> das Feld "file" eingetragen ist,
+k&ouml;nnen Sie die Liste der externen Links im <a href="EntryEditorHelp.html">Eintrags-Editor</a> bearbeiten.
+Der Editor hat dann Schaltfl&auml;chen zum Einf&uuml;gen, Bearbeiten, L&ouml;schen und Sortieren der Links.
+
+<p>
+Eine Datei kann mit Hilfe der <b>Auto</b>-Schaltfl&auml;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 &uuml;bereinstimmt. Die Regeln, nach denen Dateinamen mit BibTeX-Keys automatisch verkn&uuml;pft werden, k&ouml;nnen eingestellt werden unter <b>Einstellungen -> Externe Programme -> Links zu externen Dateien -> Suche mit regul&auml;rem Ausdruck benutzen</b>.
+
+<p>
+Um eine Datei herunterzuladen und mit einem Eintrag zu verlinken, benutzen Sie die Schaltfl&auml;che <b>Download</b> im Eintrags-Editor. Es erscheint ein Dialog, in dem Sie den URL eingeben m&uuml;ssen. Die Datei wird dann in Ihr Hauptverzeichnis gespeichert, anhand des BibTeX-Keys benannt und mit dem Eintrag verkn&uuml;pft.
+
+<h2>Externe Dateien &ouml;ffnen</h2>
+
+Es gibt mehrere M&ouml;glichkeiten, externe Dateien oder Internetseiten zu &ouml;ffnen. In der Tabellenansicht k&ouml;nnen Sie einen Eintrag ausw&auml;hlen und mit dem Men&uuml;, einem Tastenk&uuml;rzel oder dem Kontextmen&uuml; den ersten externen Link &ouml;ffnen. Falls in der Tabellenansicht die Spalte <b>file</b> angezeigt wird (<b>Einstellungen -> Tabellenansicht -> Spezielle Spalten -> Datei-Spalten anzeigen</b>), k&ouml;nnen Sie auch auf das Icon klicken, um den ersten Link eines Eintrags zu &ouml;ffnen. Um weitere Links zu &ouml;ffnen, klicken Sie mit der rechten Maustaste auf das Icon (Mac OS X: <b>Strg-Klick</b>); es erscheint dann ein Men&uuml; mit allen Links.
+
+</body>
+</html>
\ No newline at end of file
index 7dcf672..a8ffc89 100644 (file)
@@ -1,7 +1,7 @@
-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},
@@ -12,7 +12,6 @@ Encoding: ISO8859_1
        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,
@@ -25,46 +24,54 @@ Encoding: ISO8859_1
        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.}
+}
+
index 1a22acd..bdbe4f9 100644 (file)
@@ -1,12 +1,18 @@
-\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}
@@ -35,7 +38,7 @@
   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 %%%%%
@@ -174,11 +190,22 @@ pdfstartview=FitH,%
 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{}\\
@@ -189,28 +216,29 @@ Benutzerhandbuch}
 {\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}
@@ -228,14 +256,14 @@ Wa
 \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
@@ -252,23 +280,55 @@ mit dunkelblauer Schrift dargestellt. Hyperlinks sind ebenfalls dunkelblau
 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:
@@ -294,7 +354,7 @@ Die zweite Form sollte f
   \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.
@@ -303,11 +363,11 @@ Falls zus
   \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}\\
@@ -318,7 +378,7 @@ Die Nummer einer Zeitschrift, eines technischen Reports oder eines Bandes innerh
     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}\\
@@ -342,7 +402,7 @@ Falls die B
 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*}\\
@@ -353,18 +413,22 @@ Feldnamen, die mit einem Stern* versehen sind, werden nicht direkt von \jabref{}
     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*}\\
@@ -372,7 +436,7 @@ Feldnamen, die mit einem Stern* versehen sind, werden nicht direkt von \jabref{}
   \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}
@@ -383,14 +447,14 @@ Feldnamen, die mit einem Stern* versehen sind, werden nicht direkt von \jabref{}
 \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).
 
 
@@ -399,8 +463,8 @@ 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
@@ -412,11 +476,11 @@ ein Tool zum Kompilieren von MSI-Dateien aus einer XML-Spezifikation
 
 
 \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}
@@ -426,41 +490,43 @@ Diese Datei soll nur eine Zeile enthalten:
 \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 
@@ -468,28 +534,26 @@ unter \url{http://jabref.sourceforge.net} und in der Datei INSTALL
 \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.
@@ -498,7 +562,7 @@ alle Datens
 
 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
@@ -524,7 +588,7 @@ aber einen Querverweis enth
 \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}
@@ -548,37 +612,31 @@ f
 
 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}
@@ -590,15 +648,13 @@ genannt werden und f
 
 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
@@ -607,48 +663,49 @@ Tabs klicken. Mit den folgenden Tastaturk
 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
@@ -658,9 +715,10 @@ die 
 \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
@@ -676,7 +734,7 @@ Damit man sich in einem \LaTeX{}-Dokument auf einen Literaturverweis
 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.
 
@@ -690,10 +748,10 @@ oder mit dem Zauberstab-Button im Eintrags-Editor veranlassen k
 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}
@@ -702,14 +760,14 @@ und wie Sie dieses Aussehen ver
 \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
@@ -721,7 +779,7 @@ Sie ESC oder klicken Sie auf \menu{Zur
 
 \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}
 
@@ -735,8 +793,10 @@ anschlie
 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
@@ -744,12 +804,11 @@ Eintr
 \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"
@@ -792,7 +851,7 @@ Die beiden Hauptunterschiede sind:
 
 \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,
@@ -809,7 +868,7 @@ erl
 
 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.)
 
 
@@ -885,7 +944,7 @@ Eintr
 \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
@@ -897,7 +956,7 @@ anderen Gruppen sollten nun markiert sein.
 
 \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~--
@@ -982,8 +1041,8 @@ sein. Das obige Beispiel w
 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}.
@@ -1011,7 +1070,7 @@ Standardm
 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
@@ -1019,14 +1078,13 @@ sowie eine einbeziehende Untergruppe mit Eintr
 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.)
@@ -1088,7 +1146,7 @@ wenn Ihre Datei geeignete Stichworte f
 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
@@ -1103,22 +1161,23 @@ nach dem automatischen Erstellen von Hand l
 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}
@@ -1140,7 +1199,7 @@ oder wenn Sie sich merken wollen, welche Artikel oder B
 einmal genauer ansehen müssen.
 
 
-\subsection{String-Editor}
+\subsection{String"=Editor}
 \label{StringEditorHelp}
 
 \begin{quote}
@@ -1161,18 +1220,19 @@ gen
 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
@@ -1183,7 +1243,7 @@ wird.
 \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}
 
@@ -1193,35 +1253,35 @@ Die Abk
     \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}
 
@@ -1245,8 +1305,7 @@ Um ein neues Wort hinzuzuf
 \menu{Verwalten} können Sie hinzugefügte Wörter auch wieder löschen.
 
 
-\subsection{Import und Export}
-
+\subsection{Import}
 
 \subsubsection{Import-Kontrollfenster}
 
@@ -1263,16 +1322,26 @@ Eintr
 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:
 
@@ -1280,25 +1349,22 @@ 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
@@ -1347,47 +1413,34 @@ durch ein angeh
 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.
@@ -1407,7 +1460,7 @@ Anschlie
 \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.
@@ -1425,14 +1478,14 @@ oder die Tastenkombination STRG-SHIFT-N w
 \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
@@ -1444,7 +1497,7 @@ hervorgehoben. Um zu kontrollieren, welche Textbereiche Sie einem
 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
@@ -1452,22 +1505,21 @@ im Tab \menu{Hinweise und Warnungen} aufmerksam gemacht.
 
 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.
@@ -1481,8 +1533,8 @@ Sie den Unterpunkt \menu{Externe Programme} im Dialog \menu{Optionen}}
 \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
@@ -1501,7 +1553,7 @@ URL oder DOI (nur URL, wenn beide vorhanden sind).
 
 \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}
@@ -1513,8 +1565,8 @@ oder mit mehreren Benutzern von verschiedenen Netzwerkarbeitspl
 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
@@ -1527,23 +1579,24 @@ nicht angezeigt wird, solange das PDF-Feld leer bleibt.
 
 \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.
@@ -1555,15 +1608,15 @@ Der Standard ist \lstinline{**/.*[bibtexkey].*\\.[extension]}. Damit wird in all
 
 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.
@@ -1571,7 +1624,7 @@ Um die XMP-Funktionen in \jabref{} zu nutzen, gehen Sie folgenderma
 
 \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}
@@ -1631,15 +1684,13 @@ Einige Links zu XMP und PDFs mit Anmerkungen (englisch):
   \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
@@ -1662,17 +1713,6 @@ CiteSeer-Felder herunterladen, indem Sie \menu{BibTeX} \msep{} \menu{Felder von
 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
@@ -1683,14 +1723,13 @@ beschriebenen Format entspricht. Sie k
 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:
 
@@ -1712,10 +1751,8 @@ Datei zugeordnet.
 \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
@@ -1727,7 +1764,7 @@ angezeigt.
 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}
@@ -1740,22 +1777,23 @@ sind dokumentiert unter \url{http://java.sun.com/j2se/1.4.2/docs/guide/net/prope
 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.
@@ -1773,17 +1811,15 @@ beziehen sich auf Mittwoch, den 14. September 2005, 17:45 Uhr):
 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
@@ -1794,9 +1830,9 @@ Der Name wird in dem Feld \emph{owner} eingetragen, das in der Standardeinstellu
 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.
@@ -1828,31 +1864,30 @@ vorgestellt.
 \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
@@ -1862,14 +1897,14 @@ Wenn Sie zus
 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,
@@ -1887,7 +1922,7 @@ Mit der Option \texttt{-h} k
 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
@@ -1895,21 +1930,21 @@ als Argument maximal eine Datei.
 
 \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
@@ -1920,15 +1955,15 @@ ist, auch nicht in die neue Datei geschrieben werden kann.
 \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}
@@ -1943,7 +1978,7 @@ Die erste \jabref{}-Instanz liest die Kommandozeilenoptionen und f
 \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.
 
@@ -1999,11 +2034,11 @@ Liste.
 
 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
@@ -2033,15 +2068,14 @@ enth
 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
@@ -2053,8 +2087,8 @@ Yared1998a
 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.
@@ -2069,7 +2103,7 @@ k
 
 \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
@@ -2084,15 +2118,16 @@ ersten Autors.
 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,
@@ -2125,22 +2160,22 @@ angewendet, in der sie angegeben wurden.
 \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:
 
@@ -2152,14 +2187,14 @@ Wa
 
 \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
@@ -2168,25 +2203,24 @@ Abschnitt~\ref{CustomExports}).
 
 \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.
 
 
@@ -2194,15 +2228,15 @@ 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.
 
@@ -2222,25 +2256,25 @@ aussehen:
 </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.
@@ -2255,6 +2289,7 @@ Feld ausgewertet, das dann direkt in die Ausgabe kopiert wird.
 
 
 \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,
@@ -2278,48 +2313,67 @@ ruft z.\,B. zun
 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.
 
 
@@ -2345,7 +2399,7 @@ verhindern:
 \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.
 
@@ -2376,45 +2430,43 @@ New Category: \format[HTMLChars]{\keywords}
 
 \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.}
@@ -2435,10 +2487,12 @@ Angenommen, wir wollen Dateien der folgenden Form importieren:
 
 \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.*;
@@ -2480,9 +2534,7 @@ public class SimpleCsvImporter extends ImportFormat {
 
 \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}
@@ -2492,25 +2544,25 @@ Nun sollte dort auch eine Datei \texttt{/mypath/SimpleCsvImporter.class} liegen.
 
 \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 
@@ -2542,7 +2594,7 @@ Sitzung speichern&
 F11\tabularnewline
 Sitzung laden&
 F12\tabularnewline
-\jabref{} beenden&
+\jabref beenden&
 STRG-Q\tabularnewline
 \end{longtable}
 
@@ -2627,7 +2679,7 @@ F9\tabularnewline
 \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
@@ -2668,32 +2720,39 @@ F1\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.
@@ -2710,7 +2769,7 @@ der dann f
 
 \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
@@ -2718,25 +2777,61 @@ geworden ist, was es ist. Wer zum Entwicklerteam geh
 
 \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}
@@ -2769,7 +2864,7 @@ geworden ist, was es ist. Wer zum Entwicklerteam geh
 \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
@@ -2787,4 +2882,4 @@ auf dem unver
 und den Hilfeseiten des Programms
 \end{revhist}
 
-\end{document}
\ No newline at end of file
+\end{document}
index 8ac7418..297a13f 100644 (file)
@@ -35,6 +35,7 @@ Spezielle Feldmarken:
 <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&auml;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&uuml;r die Label-Erstellung wie Autoren behandelt. Falls Sie dieses Verhalten nicht w&uuml;nschen und die Feldmarke stattdessen bei einem leeren author-Feld zu nichts expandieren soll, m&uuml;ssen Sie <b>pureauth</b> statt <b>auth</b> verwenden, z.B.: <b>[pureauth]</b> oder <b>[pureauthors3]</b>.
 <ul>
index 6f9d796..38db98a 100644 (file)
@@ -23,13 +23,14 @@ exakten Namen der Zeitschrift einzutragen, gen&uuml;gt die Zeichenfolge <code>#J
 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&uuml;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&ouml;nnen f&uuml;r alle Standard-BibTeX-Felder verwendet werden.
+Unter <b>Optionen -> Einstellungen -> Allgemein</b> k&ouml;nnen Sie im Bereich <b>Datei</b> festlegen, ob Strings auch in Nicht-Standard-Feldern benutzt werden d&uuml;rfen. In diesem Fall k&ouml;nnen Sie Felder bestimmen, die von der Aufl&ouml;sung der Strings ausgenommen werden; hierbei wird empfohlen, das Feld 'url' und andere Felder anzugeben, die das Zeichen '#' enthalten k&ouml;nnen und die von BibTeX/LaTeX abgearbeitet werden k&ouml;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&auml;hrend die Reihenfolge der Strings in Ihrer BibTeX-Datei in einigen F&auml;llen wichtig ist,
index 7d12cb2..da39854 100644 (file)
@@ -20,6 +20,7 @@ Nizar N. Batada,
 Michel Baylac,
 Guillaume Gardey,
 Cyrille d'Haese,
+S M Mahbub Murshed,
 Raik Nagel,
 Christopher Oezbek,
 Ellen Reitmayr,
@@ -35,13 +36,14 @@ J&ouml;rg Zieren
 
 <H2>Contributions de&nbsp;:</H2>
 Michael Beckmann,
-Oliver Böckmann,
+Oliver Bckmann,
 Kolja Brix,
 Fr&eacute;d&eacute;ric Darboux,
 Fabrice Dessaint,
 Nathan Dunn,
 Brian Van Essen,
 Alexis Gallagher,
+David Gleich,
 Sascha Hunold,
 Bernd Kalbfuss,
 Martin K&auml;hmer,
@@ -50,7 +52,9 @@ Krzysztof A. Ko&#347;ciuszkiewicz,
 Christian Kopf,
 Jeffrey Kuhn,
 Alex Montgomery,
+S. M. Mahbub Murshed,
 Ambrogio Oliva,
+Stephan Rave,
 John Relph,
 Hannes Restel,
 Moritz Ringler,
@@ -92,15 +96,15 @@ Pour la pr&eacute;sentation de la table et le filtrage, JabRef utilise la biblio
 JabRef utilise aussi la biblioth&egrave;que de threading Spin 1.3.1, qui est distribu&eacute;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 distribue sous les termes de la
 Lesser General Public License.
 
 <P>
-JabRef utilise les biblioth&egrave;ques JempBox et PDFBox pour g&eacute;rer manipuler les PDF, les deux &eacute;tant 
+JabRef utilise les biblioth&egrave;ques JempBox et PDFBox pour g&eacute;rer manipuler les PDF, les deux &eacute;tant
 &eacute;es sous une licence de style BSD.
 
 </CENTER>
index cfa527e..73eaed0 100644 (file)
@@ -242,6 +242,16 @@ des informations. Voici une liste de quelque uns des champs les plus communs&nbs
     <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>
index 68ae7a9..24f928f 100644 (file)
@@ -12,9 +12,10 @@ JabRef vous permet de d&eacute;finir et d'utiliser vos propres filtres d'exporta
 <h2>Ajout d'un filtre d'exportation personnalis&eacute; </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&eacute;rer les exportations personnalis&eacute;es</b>, et on clique sur <b>Ajouter nouvelle</b>. Une nouvelle boite de dialogue appara&icirc;t et vous permet de sp&eacute;cifier un nom du nouveau filtre d'exportation (ce nom appara&icirc;tra dans le menu <b>Fichier -> Exportation personnalis&eacute;e</b> de la fen&ecirc;tre JabRef), le chemin du fichier <b>.layout</b>, et l'extension de fichier pr&eacute;f&eacute;r&eacute;e par le filtre d'exportation (c'est cette extension qui sera sugg&eacute;r&eacute;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&eacute;rer les exportations personnalis&eacute;es</b>, et on clique sur <b>Ajouter nouvelle</b>. Une nouvelle boite de dialogue appara&icirc;t et vous permet de sp&eacute;cifier le nom du nouveau filtre d'exportation (ce nom appara&icirc;tra ensuite comme l'un des choix du menu d&eacute;roulant "Type de fichier" de la fen&ecirc;tre de dialogue affect&eacute;e au menu <b>Fichier -> Exporter</b> de la fen&ecirc;tre principale de JabRef), le chemin du fichier <b>.layout</b>, et l'extension de fichier pr&eacute;f&eacute;r&eacute;e par le filtre d'exportation (c'est cette extension qui sera sugg&eacute;r&eacute;e dans la boite de dialogue lorsque le filtre sera utilisé).
 </p>
 
+
 <h2>Cr&eacute;ation d'un filtre d'exportation</h2>
 
 <p>
@@ -117,11 +118,14 @@ JabRef fournit les formateurs suivants, certains d'entre eux d&eacute;pendant d'
 <li><code>AuthorLastFirstAbbreviator</code>&nbsp;: r&eacute;duit les pr&eacute;noms de tous les auteurs &agrave; leurs initiales. Ce formateur n&eacute;cessite d'avoir pr&eacute;alablement utilis&eacute; AuthorLastFirst.
 <li><code>AuthorAndsReplacer</code>&nbsp;: remplace "and" par ";" entre les premiers noms et par "&" entre les deux derniers.
 <li><code>AuthorAndsCommaReplacer</code>&nbsp;: remplace "and" entre les noms par une virgule (",") et "&" entre les deux derniers.
-<li><code>AuthorOrgSci</code>&nbsp;: 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>&nbsp;: premier auteur selon "nom, prénom" et tous les autres selon "pr&eacute;nom nom". Les prénoms sont abrégés.
+<li><code>AuthorAbbreviator</code>&nbsp;: A documenter.
+<li><code>AuthorNatBib</code>&nbsp;: Formats des noms d'auteurs dans le style NatBin, avec les noms propres s&eacute;par&eacute;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>&nbsp;: remplace "--" par "-".
   <li><code>FormatPagesForXML</code>&nbsp;: remplace "--" par un tiret XML.
 <li><code>RemoveBrackets</code>&nbsp;: supprime toutes les accolades "{" ou "}".
 <li><code>RemoveLatexCommands</code>&nbsp;: supprime toutes les commandes LaTeX comme <code>\em</code>, <code>\textbf</code>, etc. Lorsqu'il est utilis&eacute; avec <code>HTMLChars</code> ou <code>XMLChars</code>, ce formateur doit &ecirc;tre appel&eacute; en dernier.
+<li><code>RemoveTilde</code>&nbsp;: remplace le caract&egrave;re tilde (utilis&eacute; dans LaTeX comme un espace insécable) par un espace normal. Utile en combinaison avec NameFormatter comme discut&eacute; dans la prochaine section.
 <li><code>ToLowerCase</code>&nbsp;: bascule tous les caract&egrave;res en minuscules.
 </ul>
 
index 5d59364..4747782 100644 (file)
@@ -9,13 +9,13 @@
 
 JabRef peut exporter des bases de donn&eacute;es dans des fichiers
 lisibles par EndNote. Pour utiliser cette fonction,
-choisissez <b>Outils -> EndNote</b>, et
-sp&eacute;cifiez le nom du fichier d'exportation.
+choisissez <b>Fichier -> Export</b>, choisissez le type de fichier
+<b>Endnote (*.txt)</b> et sp&eacute;cifiez le nom du fichier d'exportation.
 
 <h2>Importer dans EndNote</h2>
 
 Le fichier par d&eacute;faut d'importation d'EndNote ne traite
-pas proprement les auteurs ou les &eacute;diteurs multiples. 
+pas proprement les auteurs ou les &eacute;diteurs multiples.
 Il y a deux fa&ccedil;ons de contourner cela&nbsp;:
 
 <ol>
@@ -25,13 +25,13 @@ Pour ouvrir le fichier dans EndNote, cr&eacute;ez une nouvelle base de
 donn&eacute;es ou ouvrez une ancienne base de donn&eacute;es dans EndNote.
 Ensuite, s&eacute;lectionnez <b>Fichier -> Importer</b>, cliquer
 sur <b>Choisir le filtre</b>, puis s&eacute;lectionnez le fichier
-export&eacute; et cliquez sur <b>Choisir</b>. Cliquez sur 
+export&eacute; et cliquez sur <b>Choisir</b>. Cliquez sur
 <b>Options d'importation</b> et s&eacute;lectionnez
 <b>Importation EndNote</b>.  Cliquez sur <b>Importer</b> pour
 d&eacute;marrer l'importation. Apr&egrave;s l'importation, s&eacute;lectionnez
 <b>Edition-> Changer le texte</b>. Changez <b>N'importe
 quel champ</b> en <b>Author</b>. Entrez " and " &agrave; l'int&eacute;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&eacute;p&eacute;tez avec le champ
@@ -45,7 +45,7 @@ Pour ouvrir le fichier dans EndNote, cr&eacute;ez une nouvelle base
 de donn&eacute;es ou ouvrez une ancienne base de donn&eacute;es dans EndNote.
 Ensuite, s&eacute;lectionnez <b>Fichier -> Importer</b>, cliquez
 sur <b>Choisir le filtre</b>, puis s&eacute;lectionnez le fichier
-export&eacute; et cliquez sur <b>Choisir</b>. Cliquez sur 
+export&eacute; et cliquez sur <b>Choisir</b>. Cliquez sur
 <b>Options d'importation</b> et s&eacute;lectionnez
 <b>Filtre d'importation d'EndNote depuis
 JabRef</b> (s'il n'est pas pr&eacute;sent, s&eacute;lectionnez Autres
@@ -78,7 +78,7 @@ mastersthesis, phdthesis -> Thesis
 
 <h2>Auteurs collectifs</h2>
 
-Par d&eacute;faut, le filtre d'exportation suppose que le contenu 
+Par d&eacute;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
@@ -90,12 +90,12 @@ format&eacute;s.
 
 <h3>Installation du filtre d'importation d'EndNote depuis JabRef</h3>
 
-Le filtre par d&eacute;faut d'importation d'EndNote ne traite pas 
+Le filtre par d&eacute;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&icirc;tra 
+JabRef le fait proprement. De plus, ce filtre reconna&icirc;tra
 un champ EndNotereftype qui supplantera la table des correspondances
 par d&eacute;faut. Pour installer ce filtre, extraire les suppl&eacute;ments
-pour EndNote (<b>Fichier ->  Exporter - > D&eacute;compacter la s&eacute;rie de
+pour EndNote (<b>Outils - > D&eacute;compacter la s&eacute;rie de
 filtres EndNote</b>) et d&eacute;compresser le fichier Zip qui est cr&eacute;e.
 Ensuite, suivez les instructions du fichier readme.txt.<p>
 
@@ -115,13 +115,14 @@ de nouvelles entr&eacute;es dans EndNote. Pour modifier les
 Types de R&eacute;f&eacute;rences d'EndNote, extrayez les Suppl&eacute;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&eacute;n&eacute;raux additionnels support&eacute;s
 par JabRef (<i>pdf, owner, key,</i> etc.). Si vous souhaitez
 que ces champs soient pris en compte, extrayez les Suppl&eacute;ments EndNote
+(<b>Outils - > D&eacute;compacter la s&eacute;rie de filtres EndNote</b>)
 et suivez les instructions du fichier readme.txt.<p>
 
 </HTML>
index cef308b..3045023 100644 (file)
@@ -32,6 +32,7 @@ Les marqueurs de champs sp&eacute;ciaux&nbsp;:
 <li><b>[<code>authN</code>]</b>&nbsp;: Les N premi&egrave;res lettres du premier auteur.<BR>
 <li><b>[<code>authN_M</code>]</b>&nbsp;: Les N premi&egrave;res lettres du nom des M premiers auteurs.<BR>
 <li><b>[<code>auth.auth.ea</code>]</b>&nbsp;: 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>&nbsp;: Le nom s'il n'y a qu'un seul auteur. Jusqu'&agrave; trois auteurs, le premier caract&egrave;re du nom de chacun d'eux. Au del&agrave; de trois auteurs, le caract&egrave;re plus (+) est ajout&eacute;.<BR>
 </ul>
 <b>Note&nbsp;:</b> S'il n'y a pas d'auteur (dans le cas d'un livre &eacute;dit&eacute;), alors tous les marqueurs <b><code>[auth...]</code></b> ci-dessus utiliseront l'&eacute;diteur(s) (s'il y en a) comme alternative. Ainsi l'&eacute;diteur(s) d'un livre sans auteur sera trait&eacute; comme l'auteur(s) pour la g&eacute;n&eacute;ration des clefs.
@@ -51,7 +52,7 @@ Si vous ne d&eacute;sirez pas ce comportement, c'est &agrave; dire si vous voule
 <li><b>[<code>shortyear</code>]</b>&nbsp;: Les 2 derniers chiffres de l'ann&eacute;e de publication<BR>
 <li><b>[<code>veryshorttitle</code>]</b>&nbsp;: 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&ccedil;on optionnelle, &ecirc;tre suivi par un ou plusieurs modificateurs. Les modificateurs sont appliqu&eacute;s dans l'ordre
 o&ugrave; ils sont sp&eacute;cifi&eacute;s.
@@ -64,17 +65,17 @@ o&ugrave; ils sont sp&eacute;cifi&eacute;s.
 <P>
 Si vous n'avez pas d&eacute;fini de mod&egrave;le de clef pour un type d'entr&eacute;es donn&eacute;, le <b>Mod&egrave;le de clef par
 d&eacute;faut</b> sera utilis&eacute;. Vous pouvez changer le mod&egrave;le par d&eacute;faut - son param&eacute;trage se
-trouve au-dessus de la liste des types d'entr&eacute;es dans la section 
+trouve au-dessus de la liste des types d'entr&eacute;es dans la section
 <b>Param&eacute;trage des clefs</b> de la fen&ecirc;tre <b>Pr&eacute;f&eacute;rences</b>.
 
 <P>
 La clef utilis&eacute;e par d&eacute;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&eacute;e, elle est modifi&eacute;e par l'ajout d'une des lettres de a &agrave; z et ceci jusqu'a ce quelle soit unique. De cette fa&ccedil;on, les &eacute;tiquettes ressemblent &agrave;&nbsp;:
 </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&eacute;guli&egrave;res</h2>
index a2d9726..be3e715 100644 (file)
@@ -8,8 +8,8 @@
 en appuyant sur un des ic&ocirc;nes de la barre d'outils.
 Le raccourci clavier est CTRL-T.</em>
 <P>
-Les <em>cha&icirc;nes</em> sont l'&eacute;quivalent <em>BibTeX</em> des constantes dans 
-un langage de programmation. Chaque cha&icirc;ne est d&eacute;finie par un <em>nom</em> 
+Les <em>cha&icirc;nes</em> sont l'&eacute;quivalent <em>BibTeX</em> des constantes dans
+un langage de programmation. Chaque cha&icirc;ne est d&eacute;finie par un <em>nom</em>
 unique et un <em>contenu</em>. Dans votre base de donn&eacute;es, ce nom peut &ecirc;tre
 utilis&eacute; pour repr&eacute;senter ce contenu.
 
@@ -23,17 +23,20 @@ dans le champ <em>journal</em> de chaque entr&eacute;e, assurant ainsi que le no
 du journal est &eacute;crit de la m&ecirc;me fa&ccedil;on &agrave; chaque fois.
 
 <P>
-Une telle cha&icirc;ne peut appara&icirc;tre n'importe o&ugrave;, dans n'importe quel
-champ, en incluant le nom de la cha&icirc;ne entre une paire de caract&egrave;res '#'.
-Cette syntaxe est sp&eacute;cifique &agrave; JabRef et diff&egrave;re l&eacute;g&egrave;rement de la notation
-<em>BibTeX</em> qui est utilis&eacute;e quand vous sauvez votre base de donn&eacute;es.
+Une telle cha&icirc;ne peut appara&icirc;tre n'importe o&ugrave; dans un champ en incluant
+le nom de la cha&icirc;ne entre une paire de caract&egrave;res '#'. Cette syntaxe est sp&eacute;cifique
+&agrave; JabRef et diff&egrave;re l&eacute;g&egrave;rement de la notation <em>BibTeX</em> qui
+est produite quand vous sauvez votre base de donn&eacute;es. Les cha&icirc;nes peuvent par d&eacute;faut &ecirc;tre utilis&eacute;es pour tous
+les champs BibTeX standard, et dans <b>Options -> Pr&eacute;f&eacute;rences -> G&eacute;n&eacute;ral-> Fichier</b>, vous pouvez choisir
+d'autoriser les cha&icirc;nes pour des champs non-standards. Dans ce dernier cas, vous pouvez sp&eacute;cifier une
+s&eacute;rie de champs o&ugrave; les cha&icirc;nes ne doivent pas &ecirc;tre recherch&eacute;es&nbsp;; il est recommand&eacute; d'y inclure le champ 'url' ainsi que les autres champs qui pourraient contenir des caract&egrave;res '#' que BibTeX/LaTeX est susceptible de traiter.
 
 <P>
 Une cha&icirc;ne peut &ecirc;tre incluse dans le contenu d'une autre cha&icirc;ne (cha&icirc;ne
 incluante), &agrave; la condition que la cha&icirc;ne incluse soit d&eacute;finie
-<em>avant</em> la cha&icirc;ne incluante. 
+<em>avant</em> la cha&icirc;ne incluante.
 
-<p>Alors que l'ordre des cha&icirc;nes dans votre fichier BibTeX est important dans certains cas, 
+<p>Alors que l'ordre des cha&icirc;nes dans votre fichier BibTeX est important dans certains cas,
 vous n'avez pas &agrave; vous en pr&eacute;occuper quand vous utilisez JabRef. Dans l'&eacute;diteur de cha&icirc;nes,
 les cha&icirc;nes seront affich&eacute;es selon l'ordre alphab&eacute;tique et stock&eacute;e dans le m&ecirc;me ordre,
 except&eacute; quand BibTeX aura besoin d'un ordre diff&eacute;rent.
diff --git a/src/images/JabRef-icon.png b/src/images/JabRef-icon.png
new file mode 100644 (file)
index 0000000..6c58641
Binary files /dev/null and b/src/images/JabRef-icon.png differ
index f68961f..cd46611 100644 (file)
@@ -7,6 +7,7 @@ open=fileopen.png
 loadSession=fileimport.png
 save=filesave.png
 saveAs=filesaveas.png
+saveAll=save_all.png
 copy=editcopy.png
 paste=editpaste.png
 cut=editcut.png
@@ -33,6 +34,7 @@ makeKey=wizard.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
@@ -47,6 +49,9 @@ toggleGroups=queue.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
@@ -67,3 +72,4 @@ close2=fileclose2.png
 integrityCheck=integrity.png
 groupIncluding=groupIncluding.png
 groupRefining=groupRefining.png
+unknown=help.png
\ No newline at end of file
diff --git a/src/images/crystal_16/colors.png b/src/images/crystal_16/colors.png
new file mode 100755 (executable)
index 0000000..c0a67bb
Binary files /dev/null and b/src/images/crystal_16/colors.png differ
diff --git a/src/images/crystal_16/openoffice.png b/src/images/crystal_16/openoffice.png
new file mode 100755 (executable)
index 0000000..d9cd900
Binary files /dev/null and b/src/images/crystal_16/openoffice.png differ
diff --git a/src/images/crystal_16/save_all.png b/src/images/crystal_16/save_all.png
new file mode 100755 (executable)
index 0000000..772e3f6
Binary files /dev/null and b/src/images/crystal_16/save_all.png differ
diff --git a/src/images/crystal_16/vim.png b/src/images/crystal_16/vim.png
new file mode 100644 (file)
index 0000000..0368ee4
Binary files /dev/null and b/src/images/crystal_16/vim.png differ
index 56addd6..fdba5ad 100644 (file)
Binary files a/src/images/splash.png and b/src/images/splash.png differ
index 02279a5..5f43a2a 100644 (file)
@@ -90,13 +90,13 @@ public class AdvancedTab extends JPanel implements PrefsTab {
     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));
index fa5fd05..27d637b 100644 (file)
@@ -114,7 +114,7 @@ import java.util.WeakHashMap;
  */
 public class AuthorList {
 
-       private Vector authors; // of Author
+       private Vector<Author> authors; 
 
        // Variables for storing computed strings, so they only need be created
        // once:
@@ -148,7 +148,7 @@ public class AuthorList {
        // 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
 
@@ -189,24 +189,24 @@ public class AuthorList {
        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.
@@ -219,7 +219,7 @@ public class AuthorList {
         *            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
@@ -333,7 +333,7 @@ public class AuthorList {
         */
        private Author getAuthor() {
 
-               tokens = new Vector(); // initialization
+               tokens = new Vector<Object>(); // initialization
                von_start = -1;
                last_start = -1;
                comma_first = -1;
@@ -542,7 +542,7 @@ public class AuthorList {
                        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;
                                        }
@@ -724,6 +724,10 @@ public class AuthorList {
                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
@@ -813,7 +817,21 @@ public class AuthorList {
                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.
@@ -885,6 +903,7 @@ public class AuthorList {
         * all other methods are provided for completeness.
         */
        public static class Author {
+               
                private final String first_part;
 
                private final String first_abbr;
@@ -895,6 +914,23 @@ public class AuthorList {
 
                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.
index 76bfc09..99575d7 100644 (file)
@@ -42,29 +42,18 @@ import java.awt.datatransfer.UnsupportedFlavorException;
 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;
@@ -74,14 +63,10 @@ import net.sf.jabref.collab.ChangeScanner;
 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;
@@ -105,6 +90,8 @@ import com.jgoodies.forms.builder.DefaultFormBuilder;
 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;
@@ -136,7 +123,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
     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.
 
@@ -199,7 +186,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
 
     private boolean suppressOutput = false;
 
-    private HashMap actions = new HashMap();
+    private HashMap<String, Object> actions = new HashMap<String, Object>();
     private SidePaneManager sidePaneManager;
 
     /**
@@ -235,9 +222,6 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
       }
       setupActions();
       setupMainPanel();
-      /*if (Globals.prefs.getBoolean("autoComplete")) {
-            db.setCompleters(autoCompleters);
-            }*/
 
       metaData.setFile(file);
 
@@ -289,7 +273,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
     }
 
     private void setupActions() {
-
+        
         actions.put("undo", undoAction);
         actions.put("redo", redoAction);
 
@@ -331,22 +315,49 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         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();*/
                 }
             });
 
@@ -419,28 +430,9 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                 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");
@@ -470,38 +462,65 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
             }
         });
 
-        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 {
@@ -525,7 +544,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                     }
                 }
             });
-
+    
         // The action for copying selected entries.
         actions.put("copy", new BaseAction() {
                 public void action() {
@@ -1016,74 +1035,102 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
 
           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";
@@ -1144,12 +1191,12 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
                 }
               });
 
-              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()
@@ -1337,6 +1384,8 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         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));
 
     }
 
@@ -1723,26 +1772,38 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         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
@@ -2274,7 +2335,34 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
         } 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.
index 61a621b..0503361 100644 (file)
@@ -36,32 +36,47 @@ Modified for use in JabRef
 
 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()
         {
@@ -69,11 +84,11 @@ public class BibtexDatabase
                 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())
@@ -82,13 +97,13 @@ public class BibtexDatabase
                         // 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);
@@ -98,7 +113,7 @@ public class BibtexDatabase
                     _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());
                 }
@@ -146,7 +161,7 @@ public class BibtexDatabase
         return (BibtexEntry) _entries.get(id);
     }
 
-    public synchronized Collection getEntries() {
+    public synchronized Collection<BibtexEntry> getEntries() {
             return _entries.values();
     }
 
@@ -187,15 +202,15 @@ public class BibtexDatabase
     }
 
     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()]);
     }
 
     /**
@@ -214,16 +229,6 @@ public class BibtexDatabase
 
         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));
@@ -334,20 +339,79 @@ public class BibtexDatabase
     }
 
     /**
-     * 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());
 
@@ -385,10 +449,10 @@ public class BibtexDatabase
             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();
@@ -405,10 +469,9 @@ public class BibtexDatabase
                     // 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
@@ -498,6 +561,7 @@ public class BibtexDatabase
                         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
@@ -529,16 +593,42 @@ public class BibtexDatabase
         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;
+       }
 }
index 3833e17..c0f89b0 100644 (file)
@@ -228,10 +228,6 @@ public class BibtexEntry
                                                "' is reserved");
         }
 
-        // This mechanism is probably not really necessary.
-        //Object normalValue = FieldTypes.normalize(name, value);
-
-
         Object oldValue = _fields.get(name);
 
         try {
@@ -396,7 +392,6 @@ public class BibtexEntry
         return clone;
     }
 
-
     public String toString() {
         return getType().getName()+":"+getField(BibtexFields.KEY_FIELD);
     }
index c226ab6..acfac4d 100644 (file)
@@ -161,6 +161,12 @@ public class BibtexFields
     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 ) ) ;
 
 
@@ -283,6 +289,16 @@ public class BibtexFields
     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 ) ;
@@ -408,6 +424,8 @@ public class BibtexFields
     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 ;
@@ -600,6 +618,14 @@ public class BibtexFields
     {
       return extras ;
     }
+
+    public void setEditorType(int type) {
+        editorType = type;
+    }
+
+    public int getEditorType() {
+        return editorType;
+    }
     // -----------------------------------------------------------------------
 
     public void setWeight( double value )
index 38d2c8f..06c1005 100644 (file)
@@ -1,5 +1,8 @@
 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.*;
@@ -386,7 +389,7 @@ public class ContentSelectorDialog2 extends JDialog {
        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);
@@ -405,13 +408,16 @@ public class ContentSelectorDialog2 extends JDialog {
        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;
index eba1961..e0cce17 100644 (file)
@@ -26,13 +26,15 @@ public class DuplicateResolverDialog extends JDialog {
         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);
 
@@ -42,7 +44,8 @@ public class DuplicateResolverDialog extends JDialog {
     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();
@@ -74,6 +77,12 @@ public class DuplicateResolverDialog extends JDialog {
               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"));
@@ -129,6 +138,8 @@ public class DuplicateResolverDialog extends JDialog {
     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);
@@ -161,6 +172,15 @@ public class DuplicateResolverDialog extends JDialog {
       }
     });
 
+    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;
index 4e6d918..d120179 100644 (file)
@@ -33,23 +33,31 @@ http://www.gnu.org/copyleft/gpl.ja.html
 
 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))
@@ -79,8 +87,10 @@ public void run() {
   }
 */
 
+   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
@@ -95,57 +105,74 @@ public void run() {
       }
     } 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();
-  }
 }
 
 
@@ -191,4 +218,31 @@ class SearcherThread extends Thread {
   }
 }
 
+    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();
+        }
+    }
+
 }
index 6f95038..a5f4d0e 100644 (file)
@@ -46,6 +46,7 @@ import net.sf.jabref.undo.*;
 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;
 
@@ -57,1339 +58,1348 @@ 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)
+       &n