Jürgen Spitzmüller wrote: > 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
Update: I think it is wrong to pass "letter" to dvips and friends for the default paper size, just because the standard classes happen to use that. Cf. http://bugzilla.lyx.org/show_bug.cgi?id=2098 The attached updated patch fixes this as well. 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,27 +1576,62 @@ } -string const BufferParams::paperSizeName() const +string const BufferParams::paperSizeName(string const & purpose) const { char real_papersize = papersize; if (real_papersize == PAPER_DEFAULT) real_papersize = lyxrc.default_papersize; switch (real_papersize) { + case PAPER_DEFAULT: + // could be anything, so don't guess + return string(); + 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_A3: return "a3"; case PAPER_A4: 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_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 +1651,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.