Currently, the function only knows LaTeX's default sizes, not the additional ones provided by geometry (for those, "letter" is returned).
This patch adds those sizes and makes the function differentiate its output for different purposes (xdvi, dvips, dvipdfm), each one from whom knows a different subset. Xdvi knows all sizes, so the patch fixes also this bug: http://bugzilla.lyx.org/show_bug.cgi?id=4432 I intend to apply to branch and trunk. Objections? Jürgen
Index: src/BufferParams.h =================================================================== --- src/BufferParams.h (Revision 22625) +++ src/BufferParams.h (Arbeitskopie) @@ -275,7 +275,7 @@ /// std::string const dvips_options() const; /// - std::string const paperSizeName() const; + std::string const paperSizeName(std::string const & purpose = std::string()) const; /// set up if and how babel is called std::string const babelCall(std::string const & lang_opts) const; /// handle inputenc etc. Index: src/Converter.cpp =================================================================== --- src/Converter.cpp (Revision 22625) +++ src/Converter.cpp (Arbeitskopie) @@ -65,8 +65,8 @@ string result; if (bp.papersize != PAPER_CUSTOM) { - string const paper_size = bp.paperSizeName(); - if (paper_size != "b5" && paper_size != "foolscap") + string const paper_size = bp.paperSizeName("dvipdfm"); + if (!paper_size.empty()) result = "-p "+ paper_size; if (bp.orientation == ORIENTATION_LANDSCAPE) Index: src/Format.cpp =================================================================== --- src/Format.cpp (Revision 22625) +++ src/Format.cpp (Arbeitskopie) @@ -279,13 +279,14 @@ if (format_name == "dvi" && !lyxrc.view_dvi_paper_option.empty()) { - command += ' ' + lyxrc.view_dvi_paper_option; - string paper_size = buffer.params().paperSizeName(); - if (paper_size == "letter") - paper_size = "us"; - command += ' ' + paper_size; - if (buffer.params().orientation == ORIENTATION_LANDSCAPE) - command += 'r'; + string paper_size = buffer.params().paperSizeName("xdvi"); + if (!paper_size.empty()) { + command += ' ' + lyxrc.view_dvi_paper_option; + command += ' ' + paper_size; + if (buffer.params().orientation == ORIENTATION_LANDSCAPE && + buffer.params().papersize != PAPER_CUSTOM) + command += 'r'; + } } if (!contains(command, token_from_format)) Index: src/BufferParams.cpp =================================================================== --- src/BufferParams.cpp (Revision 22629) +++ src/BufferParams.cpp (Arbeitskopie) @@ -1576,7 +1576,7 @@ } -string const BufferParams::paperSizeName() const +string const BufferParams::paperSizeName(string const & purpose) const { char real_papersize = papersize; if (real_papersize == PAPER_DEFAULT) @@ -1589,14 +1589,45 @@ return "a4"; case PAPER_A5: return "a5"; + case PAPER_B3: + // dvips and dvipdfm do not know this + if (purpose == "dvips" || purpose == "dvipdfm") + return string(); + return "b3"; + case PAPER_B4: + // dvipdfm does not know this + if (purpose == "dvipdfm") + return string(); + return "b4"; + case PAPER_CUSTOM: { + if (purpose == "xdvi" && !paperwidth.empty() && !paperheight.empty()) { + // heightxwidth<unit> + string first = paperwidth; + string second = paperheight; + if (orientation == ORIENTATION_LANDSCAPE) + first.swap(second); + // cut off unit. + return first.erase(first.length() - 2) + + "x" + second; + } + return string(); + } case PAPER_B5: + // dvipdfm does not know this + if (purpose == "dvipdfm") + return string(); return "b5"; case PAPER_USEXECUTIVE: + // dvipdfm does not know this + if (purpose == "dvipdfm") + return string(); return "foolscap"; case PAPER_USLEGAL: return "legal"; case PAPER_USLETTER: default: + if (purpose == "xdvi") + return "us"; return "letter"; } } @@ -1616,9 +1647,9 @@ result += ' ' + paperwidth; result += ',' + paperheight; } else { - string const paper_option = paperSizeName(); - if (paper_option != "letter" || - orientation != ORIENTATION_LANDSCAPE) { + string const paper_option = paperSizeName("dvips"); + if (!paper_option.empty() && (paper_option != "letter" || + orientation != ORIENTATION_LANDSCAPE)) { // dvips won't accept -t letter -t landscape. // In all other cases, include the paper size // explicitly.