http://www.lyx.org/trac/ticket/7459

This patch checks if, in a class that provides hyperref, hyperref is already 
loaded at the point where we want to insert \hypersetup.

This fixes #7459 while keeping #7048 fixed.

It furthermore strippes a trailing comma in the options list.

OK?
Jürgen
Index: src/PDFOptions.cpp
===================================================================
--- src/PDFOptions.cpp	(Revision 38399)
+++ src/PDFOptions.cpp	(Arbeitskopie)
@@ -169,7 +169,7 @@
 		// FIXME: rename in this case the PDF settings dialog checkbox
 		//  label from "Use Hyperref" to "Customize Hyperref Settings"
 		//  as discussd in bug #6293
-		opt = "\\hypersetup{" + opt + hyperset + "}\n";
+		opt = "\\hypersetup{" + rtrim(opt + hyperset, ",") + "}\n";
 	}
 
 	// hyperref expects utf8!
@@ -179,13 +179,19 @@
 		   << setEncoding("UTF-8");
 	}
 	// If hyperref is loaded by the document class, we output
-	// \hypersetup \AtBeginDocument, since the class might
-	// load hyperref late, see bug #7048.
-	if (hyperref_already_provided && !opt.empty())
-		os << "\\AtBeginDocument{%\n";
-	os << from_utf8(opt);
-	if (hyperref_already_provided && !opt.empty())
-		os << "}";
+	// \hypersetup \AtBeginDocument if hypersetup is not (yet)
+	// defined. In this case, the class loads hyperref late
+	// (see bug #7048).
+	if (hyperref_already_provided && !opt.empty()) {
+		os << "\\ifx\\hypersetup\\undefined\n"
+		   << "  \\AtBeginDocument{%\n    "
+		   << from_utf8(opt)
+		   << "  }\n"
+		   << "\\else\n  "
+		   << from_utf8(opt)
+		   << "\\fi\n";
+	} else
+		os << from_utf8(opt);
 
 	if (need_unicode && enc && enc->iconvName() != "UTF-8"
 	    &&!runparams.isFullUnicode()) {

Reply via email to