---
parent: Decision Records
nav_order: 24
---
# Use `#` as indicator for BibTeX string constants

## Context and Problem Statement

Bibtex supports string constants. The entry editor should support that, too.
Affected code is (at least) `org.jabref.logic.importer.fileformat.BibtexParser#parseFieldContent` and `org.jabref.logic.bibtex.FieldWriter#formatAndResolveStrings`

## Decision Drivers

* Full BibTeX compatibility
* Intuitive for the user
* UI backwards compatible

## Considered Options

* Wrap string constants in `#`
* Replace the internal `#` in JabRef by the non-used character `§`
* Replace the internal `#` in JabRef by the non-used character `%`
* Replace the internal `#` in JabRef by the non-used character `&`
* Replace the internal `#` in JabRef by a single `&`
* Change the data type of a field value
* Wrap plan # in curly braces: `{#}`

## Decision Outcome

Chosen option: "Wrap string constants in #", because already existing behavior.

## Pros and Cons of the Options

### Wrap string constants in `#`

When BibTeX on the disk contains `field = value`, it is rendered as `field = #value#` in the entry editor. The user then knows that `value` is a BibTeX string.

Example:

left: BibTeX; right: Entry Editor

```text
@String{ value = "example" }

field1 = value     -> #value#
field2 = {value}   -> value

field1 = value # value --> #value# # #value#
```

* Good, because In place in JabRef since more than 10 years
* Bad, because `#` is used in BibTeX for string concatenation
* Bad, because `#` is used in Markdown to indicate headings. When using Markdown in fields such as comments, this causes writing errors
* Bad, because `#` could appear in URLs

### Replace the internal `#` in JabRef by the non-used character `§`

When BibTeX on the disk contains `field = value`, it is rendered as `field = §value§` in the entry editor. The user then knows that `value` is a BibTeX string.

Example:

left: BibTeX; right: Entry Editor

```text
field1 = value     -> §value§
field2 = {value}   -> value

field1 = value # value --> §value§ # §value§
```

* Good, because easy to implement
* Good, because no conflict with BibTeX's `#` sign
* Bad, because documentation needs to be updated
* Bad, because `§` is not available on a US keyboard

### Replace the internal `#` in JabRef by the non-used character `%`

Similar to "Replace the internal # in JabRef by the non-used character §"

Example:

left: BibTeX; right: Entry Editor

```text
field1 = value     -> %value%
field2 = {value}   -> value

field1 = value # value --> %value% # %value%
```

* Good, because a user does not write LaTeX comments inside a string
* Bad, because `%` could be used in Markdown, too
* Bad, because `%` is used for comments in LaTeX and thus migtht cause confusion
* Bad, because `%` could appear in URLs: There is [url percent encoding](https://www.w3schools.com/tags/ref_urlencode.asp)

### Replace the internal `#` in JabRef by the non-used character `&`

Similar to "Replace the internal `#` in JabRef by the non-used character `§`"

Example:

left: BibTeX; right: Entry Editor

```text
field1 = value     -> &value&
field2 = {value}   -> value

field1 = value # value --> &value& # &value&
```

* Good, because Users do not write LaTeX tables
* Bad, because `&` is a LaTeX command for tables

### Replace the internal `#` in JabRef by a single `&`

Prefix strings with `&`

Example:

left: BibTeX; right: Entry Editor

```text
field1 = value     -> &value
field2 = {value}   -> value

field1 = value # value --> &value # &value
```

* Good, because near to C syntax
* Bad, because `&` is a LaTeX command for tables
* Bad, because `&` could appear in URLs

### Change the data type of a field value

`org.jabref.model.entry.BibEntry#setField(org.jabref.model.entry.field.Field, java.lang.String)` changes to `org.jabref.model.entry.BibEntry#setField(org.jabref.model.entry.field.Field, org.jabref.model.entry.field.Value)` (org.jabref.model.entry.BibEntry#setField(org.jabref.model.entry.field.Field, java.lang.String)). This would bring JabRef's internal data model even more close to BibTeX

* Good, because more object-orientated design of BibTeX field storage
* Good, because eases implementation of an advanced field editor
* Bad, because high effort to implement
