diff --git a/rendercv/data_model.py b/rendercv/data_model.py index b4e9925c..7270c50f 100644 --- a/rendercv/data_model.py +++ b/rendercv/data_model.py @@ -138,14 +138,19 @@ def escape_latex_characters(sentence: str) -> str: "~": r"\textasciitilde{}", "_": r"\_", "^": r"\textasciicircum{}", - "{": r"\{", - "}": r"\}", - "\\": r"\textbackslash{}", } + # Handle backslash and curly braces separately because the other characters are + # escaped with backslash and curly braces: + sentence = sentence.replace("{", ">>{") + sentence = sentence.replace("}", ">>}") + sentence = sentence.replace("\\", "\\textbackslash{}") + sentence = sentence.replace(">>{", "\\{") + sentence = sentence.replace(">>}", "\\}") # Loop through the letters of the sentence and if you find an escape character, # replace it with its LaTeX equivalent: - for character in sentence: + copy_of_the_sentence = sentence + for character in copy_of_the_sentence: if character in escape_characters: sentence = sentence.replace(character, escape_characters[character]) diff --git a/tests/test_data_model.py b/tests/test_data_model.py index 53a74a07..c26b36ba 100644 --- a/tests/test_data_model.py +++ b/tests/test_data_model.py @@ -27,10 +27,10 @@ def test_escape_latex_characters(self): result = data_model.escape_latex_characters(str_without_latex_characters) self.assertEqual(result, expected) - str_with_latex_characers = r"asdf#asdf$asdf%asdf& ~ fd_ \ ^aa aa{ bb} " + str_with_latex_characers = r"asdf#asdf$asdf%asdf& ~ fd_ \ ^aa aa{ bb}" expected = ( - r"asdf\#asdf\$asdf\%asdf\& \textasciitilde{}\ fd\_ \textbackslash{}" - r" \textasciicircum{}aa aa\{ bb\} " + r"asdf\#asdf\$asdf\%asdf\& \textasciitilde{} fd\_ \textbackslash{}" + r" \textasciicircum{}aa aa\{ bb\}" ) with self.subTest(msg="string with LaTeX characters"): result = data_model.escape_latex_characters(str_with_latex_characers)