From 804e9129105be3c813ec275c25b8db0148490e18 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=BCrgen=20Spitzm=C3=BCller?= Date: Sat, 19 Jan 2008 11:17:12 +0000 Subject: [PATCH] Fix hyperref-soul conflict and sanitize hyperref management * src/BufferParams.cpp: - always require hyperref if it's used. - only call PDFOptions::writeLaTeX if hyperref is required (and not provided by textclass). * src/PDFOptions.{cpp,h}: - (writeLaTeX): remove unneeded hyper_required argument * src/LaTeXFeatures.cpp: - special definition for pdflatex ct markup when hyperref is used (fix bug 4504). git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22629 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/BufferParams.cpp | 17 ++++++++++++++--- src/LaTeXFeatures.cpp | 18 +++++++++++++++--- src/PDFOptions.cpp | 8 ++++---- src/PDFOptions.h | 2 +- 4 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index 9e2ff3c57e..5e884e638a 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -884,6 +884,9 @@ void BufferParams::validate(LaTeXFeatures & features) const features.require("pifont"); } } + + if (pdfoptions().use_hyperref) + features.require("hyperref"); } @@ -1243,10 +1246,18 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, // before hyperref. Then hyperref has a chance to detect babel. // * Has to be loaded before the "LyX specific LaTeX commands" to // avoid errors with algorithm floats. - odocstringstream oss; // use hyperref explicitely when it is required - pdfoptions().writeLaTeX(oss, features.isRequired("hyperref")); - lyxpreamble += oss.str(); + /** FIXME: If the textclass provides hyperref, the GUI is + non-functional. To fix this, we would need requires("hyperref") + below, pass getTextClass().provides("hyperref") to + pdfoptions().writeLaTeX(oss) and load the options via + \hypersetup instead of tha package's optional argument. + **/ + if (features.mustProvide("hyperref")) { + odocstringstream oss; + pdfoptions().writeLaTeX(oss); + lyxpreamble += oss.str(); + } // this might be useful... lyxpreamble += "\n\\makeatletter\n"; diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index 8340940ef9..7b2c2def96 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -173,6 +173,16 @@ static string const changetracking_dvipost_def = "\\newcommand{\\lyxdeleted}[3]{%\n" "\\changestart\\overstrikeon#3\\overstrikeoff\\changeend}\n"; +static string const changetracking_xcolor_soul_def = + "%% Change tracking with soul\n" + "\\newcommand{\\lyxadded}[3]{{\\color{lyxadded}#3}}\n" + "\\newcommand{\\lyxdeleted}[3]{{\\color{lyxdeleted}\\st{#3}}}\n"; + +static string const changetracking_xcolor_soul_hyperref_def = + "%% Change tracking with soul\n" + "\\newcommand{\\lyxadded}[3]{{\\texorpdfstring{\\color{lyxadded}}{}#3}}\n" + "\\newcommand{\\lyxdeleted}[3]{{\\texorpdfstring{\\color{lyxdeleted}\\st{#3}}{}}}\n"; + static string const changetracking_none_def = "\\newcommand{\\lyxadded}[3]{#3}\n" "\\newcommand{\\lyxdeleted}[3]{}\n"; @@ -810,9 +820,11 @@ string const LaTeXFeatures::getMacros() const << cdel.r / 255.0 << ',' << cdel.g / 255.0 << ',' << cdel.b / 255.0 << "}\n"; macros.precision(prec); - - macros << "\\newcommand{\\lyxadded}[3]{{\\color{lyxadded}#3}}\n" - << "\\newcommand{\\lyxdeleted}[3]{{\\color{lyxdeleted}\\st{#3}}}\n"; + + if (mustProvide("hyperref")) + macros << changetracking_xcolor_soul_hyperref_def; + else + macros << changetracking_xcolor_soul_def; } if (mustProvide("ct-none")) diff --git a/src/PDFOptions.cpp b/src/PDFOptions.cpp index 307c9b169f..62794946be 100644 --- a/src/PDFOptions.cpp +++ b/src/PDFOptions.cpp @@ -50,6 +50,7 @@ bool PDFOptions::empty() const && pdfusetitle == x.pdfusetitle; } + void PDFOptions::writeFile(ostream & os) const { os << "\\use_hyperref " << convert(use_hyperref) << '\n'; @@ -85,11 +86,9 @@ void PDFOptions::writeFile(ostream & os) const os << "\\pdf_quoted_options \"" << quoted_options << "\"\n"; } -void PDFOptions::writeLaTeX(odocstream & os, bool hyper_required) const + +void PDFOptions::writeLaTeX(odocstream & os) const { - if (!use_hyperref && !hyper_required) - return; - string opt; opt = "\\usepackage["; @@ -200,6 +199,7 @@ string PDFOptions::quoted_options_get() const return quoted_options; } + // set implicit settings for hyperref void PDFOptions::clear() { diff --git a/src/PDFOptions.h b/src/PDFOptions.h index 13f83b9436..366ce20ab8 100644 --- a/src/PDFOptions.h +++ b/src/PDFOptions.h @@ -30,7 +30,7 @@ public: /// output to lyx header void writeFile(std::ostream &) const; /// output to tex header - void writeLaTeX(odocstream &, bool hyper_required) const; + void writeLaTeX(odocstream &) const; /// read tokens from lyx header std::string readToken(Lexer &lex, std::string const & token); /// set implicit settings for hyperref -- 2.39.5