From c2a324e2422880c3125f61487b10f2fb0c98759a Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Mon, 19 Dec 2022 08:00:06 +0100 Subject: [PATCH] Amend 9716e79624a4d If the main language does not require the inputenc package, but a secondary language does, inputenc needs to be loaded as well (without options) Also simplify the code a bit. --- src/BufferParams.cpp | 58 ++++++++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index 71390d7479..d94af3a410 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -3388,28 +3388,44 @@ void BufferParams::writeEncodingPreamble(otexstream & os, if (useNonTeXFonts) return; - if (inputenc == "auto-legacy") { - string const doc_encoding = - language->encoding()->latexName(); - Encoding::Package const package = - language->encoding()->package(); + string const doc_encoding = encoding().latexName(); + Encoding::Package const package = encoding().package(); + // (dvi)lualatex uses luainputenc rather than inputenc + string const inputenc_package = + (features.runparams().flavor == Flavor::LuaTeX + || features.runparams().flavor == Flavor::DviLuaTeX) + ? "luainputenc" : "inputenc"; - // The "japanese" babel-language requires the pLaTeX engine + if (inputenc == "auto-legacy") { + // The "japanese" babel language requires the pLaTeX engine // which conflicts with "inputenc". // See http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg129680.html - if (package == Encoding::inputenc - && !features.isRequired("japanese") + if (!features.isRequired("japanese") && !features.isProvided("inputenc")) { - os << "\\usepackage[" - << from_ascii(doc_encoding); - if (features.runparams().flavor == Flavor::LuaTeX - || features.runparams().flavor == Flavor::DviLuaTeX) - os << "]{luainputenc}\n"; - else - os << "]{inputenc}\n"; + if (package == Encoding::inputenc) { + // Main language requires (lua)inputenc + os << "\\usepackage[" + << from_ascii(doc_encoding); + os << "]{" << inputenc_package << "}\n"; + } else { + // We might have an additional language that requires inputenc + set encoding_set = features.getEncodingSet(doc_encoding); + bool inputenc = false; + for (auto const & enc : encoding_set) { + if (encodings.fromLaTeXName(enc) + && encodings.fromLaTeXName(enc)->package() == Encoding::inputenc) { + inputenc = true; + break; + } + } + if (inputenc) + // load (lua)inputenc without options + // (the encoding is loaded later) + os << "\\usepackage{" << inputenc_package << "}\n"; + } } } else if (inputenc != "auto-legacy-plain") { - switch (encoding().package()) { + switch (package) { case Encoding::none: case Encoding::CJK: case Encoding::japanese: @@ -3425,7 +3441,6 @@ void BufferParams::writeEncodingPreamble(otexstream & os, if (features.isRequired("japanese") || features.isProvided("inputenc")) break; - string const doc_encoding = encoding().latexName(); // The 2022 release of ucs.sty uses the default utf8 // inputenc encoding with 'utf8x' inputenc if the ucs // package is not loaded before inputenc. @@ -3437,12 +3452,9 @@ void BufferParams::writeEncodingPreamble(otexstream & os, && features.isAvailable("ucs-2022/08/07") && !features.isProvided("ucs")) os << "\\usepackage{ucs}\n"; - os << "\\usepackage[" << from_ascii(doc_encoding); - if (features.runparams().flavor == Flavor::LuaTeX - || features.runparams().flavor == Flavor::DviLuaTeX) - os << "]{luainputenc}\n"; - else - os << "]{inputenc}\n"; + os << "\\usepackage[" + << from_ascii(doc_encoding) + << "]{" << inputenc_package << "}\n"; break; } }