From: Uwe Stöhr Date: Mon, 5 Dec 2011 01:12:41 +0000 (+0000) Subject: tex2lyx: support for pdfpages X-Git-Tag: 2.0.3~158 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=fd2ff50b6965656ff39e42667d619aa5c8beb1a8;p=features.git tex2lyx: support for pdfpages git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_2_0_X@40370 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/tex2lyx/Preamble.cpp b/src/tex2lyx/Preamble.cpp index ff1d0419ba..f5d0f4e412 100644 --- a/src/tex2lyx/Preamble.cpp +++ b/src/tex2lyx/Preamble.cpp @@ -718,6 +718,9 @@ void Preamble::handle_package(Parser &p, string const & name, else if (name == "textcomp") ; // ignore this FIXME: Use the package separator mechanism instead + else if (name == "pdfpages") + ; // ignore this + else if (name == "lyxskak") { // ignore this and its options if (!options.empty()) diff --git a/src/tex2lyx/TODO.txt b/src/tex2lyx/TODO.txt index 7a4b2e30ce..658220fd5d 100644 --- a/src/tex2lyx/TODO.txt +++ b/src/tex2lyx/TODO.txt @@ -13,9 +13,8 @@ Format LaTeX feature LyX feature 224 external insets defined in InsetExternal lib/external_templates. (Date and RasterImage cannot be supported - (Chess diagram and Spreadsheet are supported) + (Chess diagram, PDF pages and Spreadsheet are supported) (Xfig figure, Lilypond, Dia diagram can be supported by looking at the file extension) - (for PDFpages work is in progress by uwestoehr) 226 nothing (impossible to import) InsetBranch, \branch...\end_branch 226 transformations InsetExternal 228 draft InsetExternal diff --git a/src/tex2lyx/text.cpp b/src/tex2lyx/text.cpp index 8a3d8fb943..0838fb8ee9 100644 --- a/src/tex2lyx/text.cpp +++ b/src/tex2lyx/text.cpp @@ -3910,6 +3910,74 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer, end_inset(os); } + else if (t.cs() == "includepdf") { + p.skip_spaces(); + string const arg = p.getArg('[', ']'); + map opts; + vector keys; + split_map(arg, opts, keys); + string name = normalize_filename(p.verbatim_item()); + string const path = getMasterFilePath(); + // We want to preserve relative / absolute filenames, + // therefore path is only used for testing + if (!makeAbsPath(name, path).exists()) { + // The file extension is probably missing. + // Now try to find it out. + char const * const pdfpages_format[] = {"pdf", 0}; + string const pdftex_name = + find_file(name, path, pdfpages_format); + if (!pdftex_name.empty()) { + name = pdftex_name; + pdflatex = true; + } + } + if (makeAbsPath(name, path).exists()) + fix_relative_filename(name); + else + cerr << "Warning: Could not find file '" + << name << "'." << endl; + // write output + context.check_layout(os); + begin_inset(os, "External\n\ttemplate "); + os << "PDFPages\n\tfilename " + << name << "\n"; + // parse the options + if (opts.find("pages") != opts.end()) + os << "\textra LaTeX \"pages=" + << opts["pages"] << "\"\n"; + if (opts.find("angle") != opts.end()) + os << "\trotateAngle " + << opts["angle"] << '\n'; + if (opts.find("origin") != opts.end()) { + ostringstream ss; + string const opt = opts["origin"]; + if (opt == "tl") ss << "topleft"; + if (opt == "bl") ss << "bottomleft"; + if (opt == "Bl") ss << "baselineleft"; + if (opt == "c") ss << "center"; + if (opt == "tc") ss << "topcenter"; + if (opt == "bc") ss << "bottomcenter"; + if (opt == "Bc") ss << "baselinecenter"; + if (opt == "tr") ss << "topright"; + if (opt == "br") ss << "bottomright"; + if (opt == "Br") ss << "baselineright"; + if (!ss.str().empty()) + os << "\trotateOrigin " << ss.str() << '\n'; + else + cerr << "Warning: Ignoring unknown includegraphics origin argument '" << opt << "'\n"; + } + if (opts.find("width") != opts.end()) + os << "\twidth " + << translate_len(opts["width"]) << '\n'; + if (opts.find("height") != opts.end()) + os << "\theight " + << translate_len(opts["height"]) << '\n'; + if (opts.find("keepaspectratio") != opts.end()) + os << "\tkeepAspectRatio\n"; + end_inset(os); + context.check_layout(os); + } + else if (t.cs() == "loadgame") { p.skip_spaces(); string name = normalize_filename(p.verbatim_item());