@@ -1811,9 +1811,10 @@ citeKey = try $ do
18111811 guard $ lastStrPos /= Just pos
18121812 suppress_author <- option False (char '-' >> return True)
18131813 char '@'
1814− first <- letter
1815− let internal p = try $ p >>~ lookAhead (letter <|> digit)
1816− rest <- many $ letter <|> digit <|> internal (oneOf ":.#$%&-_+?<>~/")
1814+ first <- letter <|> char '_'
1815+ let regchar = satisfy (\c -> isAlphaNum c || c == '_')
1816+ let internal p = try $ p >>~ lookAhead regchar
1817+ rest <- many $ regchar <|> internal (oneOf ":.#$%&-+?<>~/")
18171818 let key = first:rest
18181819 return (suppress_author, key)
18191820