diff options
Diffstat (limited to 'biblio/citation-style-language/citeproc-output.lua')
-rw-r--r-- | biblio/citation-style-language/citeproc-output.lua | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/biblio/citation-style-language/citeproc-output.lua b/biblio/citation-style-language/citeproc-output.lua index f596a39e3a..617440e531 100644 --- a/biblio/citation-style-language/citeproc-output.lua +++ b/biblio/citation-style-language/citeproc-output.lua @@ -1742,18 +1742,25 @@ LatexWriter.markups = { -- ["@display/indent"] = '<div class="csl-indent">%s</div>\n ', } +local latex_escape_table = { + ["\\"] = "\\textbackslash{}", + ["{"] = "\\{", + ["}"] = "\\}", + ["$"] = "\\$", + ["&"] = "\\&", + ["#"] = "\\#", + ["^"] = "\\^", + ["_"] = "\\_", + ["%"] = "\\%", + ["~"] = "\\~", +} + +---@param str string +---@param context Context +---@return string function LatexWriter:write_escaped(str, context) -- TeXbook, p. 38 - str = str:gsub("\\", "\\textbackslash{}") - str = str:gsub("{", "\\{") - str = str:gsub("}", "\\}") - str = str:gsub("%$", "\\$") - str = str:gsub("&", "\\&") - str = str:gsub("#", "\\#") - str = str:gsub("%^", "\\^") - str = str:gsub("_", "\\_") - str = str:gsub("%%", "\\%%") - str = str:gsub("~", "\\~") + str = str:gsub("[\\{}$&#^_%%~]", latex_escape_table) str = str:gsub(util.unicode["em space"], "\\quad ") str = str:gsub(util.unicode["no-break space"], "~") for char, sub in pairs(util.superscripts) do |