From 8bd65041f2e22bf4c37219c7008a7e4e2bda2799 Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Sun, 27 May 2018 11:54:07 +0200 Subject: [PATCH] Fix encoding problems in \input@path As of LaTeX2e 2018, characters are made active earlier, which results in new expansion problems. Following a suggestion of Markus Kohm (pc) and the TL mailing list [1], we embrace non-ASCII input paths in \detokenize. This relies on e-tex, but I think we can assume this is nowadays available everywhere. [1] http://tug.org/pipermail/tex-live/2018-May/041691.html Fixes: #11146 --- src/Buffer.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/Buffer.cpp b/src/Buffer.cpp index b436a0f8a5..e05c4d07bb 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -1898,8 +1898,7 @@ Buffer::ExportStatus Buffer::writeLaTeXSource(otexstream & os, "file path name."), inputpath, uncodable_glyphs)); } else { - string docdir = - latex_path(original_path); + string docdir = os::latex_path(original_path); if (contains(docdir, '#')) { docdir = subst(docdir, "#", "\\#"); os << "\\catcode`\\#=11" @@ -1910,9 +1909,20 @@ Buffer::ExportStatus Buffer::writeLaTeXSource(otexstream & os, os << "\\catcode`\\%=11" "\\def\\%{%}\\catcode`\\%=14\n"; } + bool const detokenize = !isAscii(from_utf8(docdir)); + bool const quote = contains(docdir, ' '); os << "\\makeatletter\n" - << "\\def\\input@path{{" - << docdir << "}}\n" + << "\\def\\input@path{{"; + if (detokenize) + os << "\\detokenize{"; + if (quote) + os << "\""; + os << docdir; + if (quote) + os << "\""; + if (detokenize) + os << "}"; + os << "}}\n" << "\\makeatother\n"; } }