lyxpreamble += oss.str();
}
- // only add \makeatletter and \makeatother when actually needed
- bool makeatletter = false;
+ // Will be surrounded by \makeatletter and \makeatother when needed
+ docstring atlyxpreamble;
// Some macros LyX will need
docstring tmppreamble(from_ascii(features.getMacros()));
- if (!tmppreamble.empty()) {
- if (!makeatletter) {
- lyxpreamble += "\n\\makeatletter\n";
- makeatletter = true;
- }
- lyxpreamble += "\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "
+ if (!tmppreamble.empty())
+ atlyxpreamble += "\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "
"LyX specific LaTeX commands.\n"
+ tmppreamble + '\n';
- }
// the text class specific preamble
tmppreamble = features.getTClassPreamble();
- if (!tmppreamble.empty()) {
- if (!makeatletter) {
- lyxpreamble += "\n\\makeatletter\n";
- makeatletter = true;
- }
- lyxpreamble += "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "
+ if (!tmppreamble.empty())
+ atlyxpreamble += "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "
"Textclass specific LaTeX commands.\n"
+ tmppreamble + '\n';
- }
/* the user-defined preamble */
- if (!preamble.empty()) {
- if (!makeatletter) {
- lyxpreamble += "\n\\makeatletter\n";
- makeatletter = true;
- }
+ if (!preamble.empty())
// FIXME UNICODE
- lyxpreamble += "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "
+ atlyxpreamble += "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "
"User specified LaTeX commands.\n"
+ from_utf8(preamble) + '\n';
+
+ // subfig loads internally the LaTeX package "caption". As caption is a very
+ // popular package, users will load it in the preamble. Therefore we must load
+ // subfig behind the user-defined preamble and check if the caption package
+ // was loaded or not.
+ // For the case that caption is loaded before subfig, there is the subfig
+ // option "caption=false". This option also works when a koma-script class is
+ // used and koma's own caption commands are used instead of caption.
+ // We use \PassOptionsToPackage here because the user could have already
+ // loaded subfig in the preamble.
+ if (features.isRequired("subfig")) {
+ atlyxpreamble += "\\@ifundefined{showcaptionsetup}{}{%\n"
+ " \\PassOptionsToPackage{caption=false}{subfig}}\n"
+ "\\usepackage{subfig}\n";
}
// Itemize bullet settings need to be last in case the user
}
}
- if (!bullets_def.empty()) {
- if (!makeatletter) {
- lyxpreamble += "\n\\makeatletter\n";
- makeatletter = true;
- }
- lyxpreamble += bullets_def + "}\n\n";
- }
+ if (!bullets_def.empty())
+ atlyxpreamble += bullets_def + "}\n\n";
- if (makeatletter)
- lyxpreamble += "\\makeatother\n\n";
+ if (atlyxpreamble.find(from_ascii("@")) != docstring::npos)
+ lyxpreamble += "\n\\makeatletter\n"
+ + atlyxpreamble + "\\makeatother\n\n";
+ else
+ lyxpreamble += '\n' + atlyxpreamble;
int const nlines =
int(count(lyxpreamble.begin(), lyxpreamble.end(), '\n'));