classification
Title: Printing the 'The Python Tutorial'
Type: behavior Stage:
Components: Documentation Versions: Python 2.6
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: georg.brandl Nosy List: brimac, ezio.melotti, georg.brandl, jnoller
Priority: low Keywords:

Created on 2009-08-08 19:50 by brimac, last changed 2009-10-23 08:24 by brimac. This issue is now closed.

Files
File name Uploaded Description Edit
unnamed brimac, 2009-10-07 13:11
unnamed brimac, 2009-10-07 19:09
unnamed brimac, 2009-10-23 08:24
Messages (9)
msg91422 - (view) Author: (brimac) Date: 2009-08-08 19:50
I am having a problem when printing 'The Python Tutorial' at
http://docs.python.org/tutorial/
I am using XP and Firefox and an HP Laserjet.
The page displays OK but the printout has a 68 mm margin on the left.
The margin on the right is 18 mm but the text is cut off, sometimes
mid-letter. The other 14 pages in the tutorial have the same problem.
I've tried changing from Portrait to Landscape. The text gets wider, the
margins are the same size, and the text is still cut off.
I have not noticed this with any other documents, on this website or
elsewhere. I'm sure if you print/preview you will see the problem.
My guess is that there is a fault with the printout file at python.org
msg91442 - (view) Author: Ezio Melotti (ezio.melotti) * (Python committer) Date: 2009-08-10 12:30
I can reproduce the issue using the "Print preview" on Firefox and on
IE, on the tutorial and on other pages as well.
The Doc has a couple of print rules at the end of
http://docs.python.org/_static/basic.css and they look correct (and they
are also W3C valid). While I was trying to debug the problem using the
Web Developer plug-in of Firefox and the "Edit CSS" option the problem
disappeared without changing anything.
This is quite weird and lead me to think that there could be a priority
problem (even if I can't see any other rule that overrides the print rules).

Possible solutions could be:
1) add a couple of !important in the print rules;
2) move the print rules somewhere else;
3) create a distinct print CSS where to put all the print rules.
msg93653 - (view) Author: Ezio Melotti (ezio.melotti) * (Python committer) Date: 2009-10-06 15:20
To fix this problem is enough to add an !important to the margin: 0;
rule in the @media print {} at the end of basic.css (line 408).

I'll try to explain why the !important is necessary.
In default.css @import url("basic.css"); (correctly) appears at the
beginning, and imports the rules from basic.css, including the @media
print {}. A few lines later, in default.css, there's the rule
div.bodywrapper { margin: 0 0 0 230px; }, and with no @media specified
it defaults on 'all'.

In default.css we then end up with something equivalent to:

/* This is defined in basic.css and imported
   at the beginning of default.css */
@media print {
    /* some rules omitted for clarity */
    div.bodywrapper { margin: 0; }
}

/* This is defined later in default.css */
@media all { /* This is implicit */
    div.bodywrapper { margin: 0 0 0 230px; }
}

When the file is printed both the rules are applied, because 'all' also
includes 'print'.
Since both the media have the same priority (i.e. the specific @media
print does NOT have higher priority than the implicit @media all) and
both the rules have the same priority too, the latter wins.
The !important is then needed to raise the priority of the first rule.

Note that adding the !important is not a really good solution IMHO: the
problem could appear again if other rules with the same priority of the
ones in @media print {} are specified elsewhere.
A good solution would be to move the print rules after the normal ones,
so in case the print media is used these rules will have higher priority.
The @import can only appear at the beginning of a file so the two
possible solutions are:

1) put the rules with media all in, for example, all.css and the ones
with media print in print.css and then, in default.css, write only:
@import url('all.css');
@import url('print.css') print;

2) like 1) but importing the print.css separately using <link> in the
html pages:
<link href="default.css" type="text/css" rel="stylesheet">
<link href="print.css" type="text/css" rel="stylesheet" media="print">

A third solution might be to specify the media of the normal rules to
'screen', but some rules are probably common to both the media.

More information here: http://www.w3.org/TR/CSS2/cascade.html
msg93665 - (view) Author: Jesse Noller (jnoller) * (Python committer) Date: 2009-10-06 21:53
I posted to the wrong bug, apologies
msg93696 - (view) Author: (brimac) Date: 2009-10-07 13:11
Hi Ezio

Many thanks for all your effort with this problem.
Thanks also for the full explanation and link.
I'm not sure what happens now. Will somebody fix it?
I think it's important for Python's image because
it might be the first page a new user tries to print.

brimac

2009/10/6 Ezio Melotti <report@bugs.python.org>

>
> Ezio Melotti <ezio.melotti@gmail.com> added the comment:
>
> To fix this problem is enough to add an !important to the margin: 0;
> rule in the @media print {} at the end of basic.css (line 408).
>
> I'll try to explain why the !important is necessary.
> In default.css @import url("basic.css"); (correctly) appears at the
> beginning, and imports the rules from basic.css, including the @media
> print {}. A few lines later, in default.css, there's the rule
> div.bodywrapper { margin: 0 0 0 230px; }, and with no @media specified
> it defaults on 'all'.
>
> In default.css we then end up with something equivalent to:
>
> /* This is defined in basic.css and imported
>   at the beginning of default.css */
> @media print {
>    /* some rules omitted for clarity */
>    div.bodywrapper { margin: 0; }
> }
>
> /* This is defined later in default.css */
> @media all { /* This is implicit */
>    div.bodywrapper { margin: 0 0 0 230px; }
> }
>
> When the file is printed both the rules are applied, because 'all' also
> includes 'print'.
> Since both the media have the same priority (i.e. the specific @media
> print does NOT have higher priority than the implicit @media all) and
> both the rules have the same priority too, the latter wins.
> The !important is then needed to raise the priority of the first rule.
>
> Note that adding the !important is not a really good solution IMHO: the
> problem could appear again if other rules with the same priority of the
> ones in @media print {} are specified elsewhere.
> A good solution would be to move the print rules after the normal ones,
> so in case the print media is used these rules will have higher priority.
> The @import can only appear at the beginning of a file so the two
> possible solutions are:
>
> 1) put the rules with media all in, for example, all.css and the ones
> with media print in print.css and then, in default.css, write only:
> @import url('all.css');
> @import url('print.css') print;
>
> 2) like 1) but importing the print.css separately using <link> in the
> html pages:
> <link href="default.css" type="text/css" rel="stylesheet">
> <link href="print.css" type="text/css" rel="stylesheet" media="print">
>
> A third solution might be to specify the media of the normal rules to
> 'screen', but some rules are probably common to both the media.
>
> More information here: http://www.w3.org/TR/CSS2/cascade.html
>
> ----------
>
> _______________________________________
> Python tracker <report@bugs.python.org>
> <http://bugs.python.org/issue6670>
> _______________________________________
>
msg93698 - (view) Author: Ezio Melotti (ezio.melotti) * (Python committer) Date: 2009-10-07 14:01
> I'm not sure what happens now. Will somebody fix it?

Now that the problem and the solution are known, Georg will probably fix
it at some point. The "!important" could be used as a temporary
workaround (e.g. for 2.6.4 and for the online doc), the css can be
reorganized later.
msg93714 - (view) Author: (brimac) Date: 2009-10-07 19:09
Hi Ezio

Thanks again.

Brimac

2009/10/7 Ezio Melotti <report@bugs.python.org>

>
> Ezio Melotti <ezio.melotti@gmail.com> added the comment:
>
> > I'm not sure what happens now. Will somebody fix it?
>
> Now that the problem and the solution are known, Georg will probably fix
> it at some point. The "!important" could be used as a temporary
> workaround (e.g. for 2.6.4 and for the online doc), the css can be
> reorganized later.
>
> ----------
>
> _______________________________________
> Python tracker <report@bugs.python.org>
> <http://bugs.python.org/issue6670>
> _______________________________________
>
msg94363 - (view) Author: Georg Brandl (georg.brandl) * (Python committer) Date: 2009-10-22 16:21
OK, fixed in Sphinx, and in the Python stylesheet in r75617.
msg94378 - (view) Author: (brimac) Date: 2009-10-23 08:24
Georg, Ezio
Many Thanks
brimac

2009/10/22 Georg Brandl <report@bugs.python.org>

>
> Georg Brandl <georg@python.org> added the comment:
>
> OK, fixed in Sphinx, and in the Python stylesheet in r75617.
>
> ----------
> resolution:  -> fixed
> status: open -> closed
>
> _______________________________________
> Python tracker <report@bugs.python.org>
> <http://bugs.python.org/issue6670>
> _______________________________________
>
History
Date User Action Args
2009-10-23 08:24:47brimacsetfiles: + unnamed

messages: + msg94378
2009-10-22 16:21:28georg.brandlsetstatus: open -> closed
resolution: fixed
messages: + msg94363
2009-10-07 19:09:47brimacsetfiles: + unnamed

messages: + msg93714
2009-10-07 14:01:36ezio.melottisetmessages: + msg93698
2009-10-07 13:11:43brimacsetfiles: + unnamed

messages: + msg93696
2009-10-06 21:53:11jnollersetnosy: georg.brandl, jnoller, ezio.melotti, brimac
messages: + msg93665
2009-10-06 21:52:48jnollersetmessages: - msg93664
2009-10-06 21:52:35jnollersetnosy: + jnoller
messages: + msg93664
2009-10-06 15:20:14ezio.melottisetmessages: + msg93653
2009-08-10 12:30:26ezio.melottisetmessages: + msg91442
2009-08-10 11:26:52ezio.melottisetpriority: low
nosy: + ezio.melotti
2009-08-08 19:50:04brimaccreate