@@ -1332,9 +1332,6 @@ noneOfUnlessEscaped cs =
13321332textualCite :: GenParser Char ParserState [Citation]
13331333textualCite = try $ do
13341334 (_, key) <- citeKey
1335− st <- getState
1336− unless (key `elem` stateCitations st) $
1337− fail "not a citation"
13381335 let first = Citation{ citationId = key
13391336 , citationPrefix = []
13401337 , citationSuffix = []
@@ -1368,13 +1365,16 @@ normalCite = try $ do
13681365 char ']'
13691366 return citations
13701367
1371−citeKey :: GenParser Char st (Bool, String)
1368+citeKey :: GenParser Char ParserState (Bool, String)
13721369citeKey = try $ do
13731370 suppress_author <- option False (char '-' >> return True)
13741371 char '@'
13751372 first <- letter
13761373 rest <- many $ (noneOf ",;]@ \t\n")
1377− return (suppress_author, first:rest)
1374+ let key = first:rest
1375+ st <- getState
1376+ guard $ key `elem` stateCitations st
1377+ return (suppress_author, key)
13781378
13791379locator :: GenParser Char st String
13801380locator = try $ do