Some enhancements to sphinx.sty, mostly by Gael Varoquaux.

This commit is contained in:
Georg Brandl 2008-04-27 16:21:04 +00:00
parent 5fa51aa5a0
commit bd50766a78
3 changed files with 76 additions and 347 deletions

View File

@ -75,7 +75,9 @@ Bugs fixed
* sphinx.htmlwriter: Don't use os.path for joining image HREFs. * sphinx.htmlwriter: Don't use os.path for joining image HREFs.
* sphinx.latexwriter: Implement option lists. * sphinx.latexwriter: Implement option lists. Also, some other changes
were made to ``sphinx.sty`` in order to enhance compatibility and
remove old unused stuff. Thanks to Gael Varoquaux for that!
* sphinx.roles: Fix referencing glossary terms with explicit targets. * sphinx.roles: Fix referencing glossary terms with explicit targets.

View File

@ -26,8 +26,6 @@ HEADER = r'''%% Generated by Sphinx.
\documentclass[%(papersize)s,%(pointsize)s]{%(docclass)s} \documentclass[%(papersize)s,%(pointsize)s]{%(docclass)s}
\usepackage[utf8]{inputenc} \usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc} \usepackage[T1]{fontenc}
\usepackage[colorlinks,breaklinks]{hyperref}
\usepackage{tabularx}
\title{%(title)s} \title{%(title)s}
\date{%(date)s} \date{%(date)s}
\release{%(release)s} \release{%(release)s}
@ -788,7 +786,6 @@ class LaTeXTranslator(nodes.NodeVisitor):
self.body.append('] ') self.body.append('] ')
def visit_option_list(self, node): def visit_option_list(self, node):
self.body.append('% [option list]\n')
self.body.append('\\begin{optionlist}{3cm}\n') self.body.append('\\begin{optionlist}{3cm}\n')
def depart_option_list(self, node): def depart_option_list(self, node):
self.body.append('\\end{optionlist}\n') self.body.append('\\end{optionlist}\n')
@ -826,11 +823,13 @@ class LaTeXTranslator(nodes.NodeVisitor):
(u"]", ur"{]}"), (u"]", ur"{]}"),
(u"", ur"\P{}"), (u"", ur"\P{}"),
(u"§", ur"\S{}"), (u"§", ur"\S{}"),
(u"", ur"$\infinity$"), (u"", ur"$\infty$"),
(u"±", ur"$\pm$"), (u"±", ur"$\pm$"),
(u"", ur"$\rightarrow$"), (u"", ur"$\rightarrow$"),
(u"", ur"$\Omega$"), (u"", ur"$\Omega$"),
(u"Ω", ur"$\Omega$"), (u"Ω", ur"$\Omega$"),
(u"φ", ur"$\phi$"),
(u"π", ur"$\pi$"),
(u"~", ur"\textasciitilde{}"), (u"~", ur"\textasciitilde{}"),
(u"", ur"\texteuro{}"), (u"", ur"\texteuro{}"),
(u"<", ur"\textless{}"), (u"<", ur"\textless{}"),

View File

@ -6,14 +6,34 @@
% %
\NeedsTeXFormat{LaTeX2e}[1995/12/01] \NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{sphinx} \ProvidesPackage{sphinx}[2007/12/30 LaTeX package (Sphinx markup)]
[2007/12/30 LaTeX package (Sphinx markup)]
\RequirePackage{textcomp} \RequirePackage{textcomp}
\RequirePackage{longtable} \RequirePackage{longtable}
\RequirePackage{times} \RequirePackage{times}
\RequirePackage{fancyvrb} \RequirePackage{fancyvrb}
\renewcommand{\sfdefault}{cmbr} \RequirePackage{titlesec}
\RequirePackage{color}
\definecolor{py@InnerLinkColor}{rgb}{0.208,0.374,0.486}
\definecolor{py@OuterLinkColor}{rgb}{0.216,0.439,0.388}
\RequirePackage[colorlinks,
breaklinks,
linkcolor=py@InnerLinkColor,
filecolor=py@OuterLinkColor,
menucolor=py@OuterLinkColor,
pagecolor=py@OuterLinkColor,
urlcolor=py@OuterLinkColor,
]{hyperref}
\RequirePackage{framed}
\ifx\pdftexversion\undefined
\RequirePackage{graphicx}
\else
\RequirePackage[pdftex]{graphicx}
\fi
% Uncomment these two lines to ignore the paper size and make the page % Uncomment these two lines to ignore the paper size and make the page
% size more like a typical published manual. % size more like a typical published manual.
@ -21,12 +41,6 @@
%\renewcommand{\paperwidth}{8.5in} % typical squarish manual %\renewcommand{\paperwidth}{8.5in} % typical squarish manual
%\renewcommand{\paperwidth}{7in} % O'Reilly ``Programmming Python'' %\renewcommand{\paperwidth}{7in} % O'Reilly ``Programmming Python''
% These packages can be used to add marginal annotations which indicate
% index entries and labels; useful for reviewing this messy documentation!
%
%\RequirePackage{showkeys}
%\RequirePackage{showidx}
% If we ever want to indent paragraphs, this needs to be changed. % If we ever want to indent paragraphs, this needs to be changed.
% This is used inside the macros defined here instead of coding % This is used inside the macros defined here instead of coding
% \noindent directly. % \noindent directly.
@ -40,11 +54,15 @@
\newif\ifpdf\pdffalse \newif\ifpdf\pdffalse
\ifx\pdfoutput\undefined\else\ifcase\pdfoutput \ifx\pdfoutput\undefined\else\ifcase\pdfoutput
\let\py@NormalColor\relax
\let\py@TitleColor\relax
\else \else
\pdftrue \pdftrue
\input{pdfcolor} \input{pdfcolor}
\let\py@LinkColor=\NavyBlue \let\py@LinkColor=\NavyBlue
\let\py@NormalColor=\Black \let\py@NormalColor=\Black
\definecolor{MyDarkBlue}{rgb}{0.126,0.263,0.361}
\def\py@TitleColor{\color{MyDarkBlue}}
\pdfcompresslevel=9 \pdfcompresslevel=9
\pdfpagewidth=\paperwidth % page width of PDF output \pdfpagewidth=\paperwidth % page width of PDF output
\pdfpageheight=\paperheight % page height of PDF output \pdfpageheight=\paperheight % page height of PDF output
@ -152,7 +170,7 @@
\pagenumbering{roman} % ToC & chapters \pagenumbering{roman} % ToC & chapters
% Use this to set the font family for headers and other decor: % Use this to set the font family for headers and other decor:
\newcommand{\py@HeaderFamily}{\sffamily} \newcommand{\py@HeaderFamily}{\sffamily\bfseries}
% Set up abstract ways to get the normal and smaller font sizes that % Set up abstract ways to get the normal and smaller font sizes that
% work even in footnote context. % work even in footnote context.
@ -206,73 +224,16 @@
} }
} }
% This sets up the {verbatim} environment to be indented and a minipage, % Some custom font markup commands.
% and to have all the other mostly nice properties that we want for %
% code samples. \newcommand{\strong}[1]{{\bf #1}}
\newcommand{\code}[1]{\texttt{#1}}
\let\py@OldVerbatim=\verbatim \newcommand{\bfcode}[1]{\code{\bfseries#1}}
\let\py@OldEndVerbatim=\endverbatim \newcommand{\samp}[1]{`\code{#1}'}
\RequirePackage{verbatim} \newcommand{\email}[1]{{\py@smallsize\textsf{#1}}}
\let\py@OldVerbatimInput=\verbatiminput
% Variable used by begin code command
\newlength{\py@codewidth}
\renewcommand{\verbatim}{%
\setlength{\parindent}{1cm}%
% Calculate the text width for the minipage:
\setlength{\py@codewidth}{\linewidth}%
\addtolength{\py@codewidth}{-\parindent}%
%
\par\indent%
\begin{minipage}[t]{\py@codewidth}%
\small%
\py@OldVerbatim%
}
\renewcommand{\endverbatim}{%
\py@OldEndVerbatim%
\end{minipage}%
}
\renewcommand{\verbatiminput}[1]{%
{\setlength{\parindent}{1cm}%
% Calculate the text width for the minipage:
\setlength{\py@codewidth}{\linewidth}%
\addtolength{\py@codewidth}{-\parindent}%
%
\small%
\begin{list}{}{\setlength{\leftmargin}{1cm}}
\item%
\py@OldVerbatimInput{#1}%
\end{list}
}%
}
% This does a similar thing for the {alltt} environment:
\RequirePackage{alltt}
\let\py@OldAllTT=\alltt
\let\py@OldEndAllTT=\endalltt
\renewcommand{\alltt}{%
\setlength{\parindent}{1cm}%
% Calculate the text width for the minipage:
\setlength{\py@codewidth}{\linewidth}%
\addtolength{\py@codewidth}{-\parindent}%
\let\e=\textbackslash%
%
\par\indent%
\begin{minipage}[t]{\py@codewidth}%
\small%
\py@OldAllTT%
}
\renewcommand{\endalltt}{%
\py@OldEndAllTT%
\end{minipage}%
}
\newcommand{\py@modulebadkey}{{--just-some-junk--}} \newcommand{\py@modulebadkey}{{--just-some-junk--}}
%% Lots of index-entry generation support. %% Lots of index-entry generation support.
% Command to wrap around stuff that refers to function / module / % Command to wrap around stuff that refers to function / module /
@ -331,7 +292,6 @@
% Add the defining entry for a module % Add the defining entry for a module
\newcommand{\py@modindex}[2]{% \newcommand{\py@modindex}[2]{%
\renewcommand{\py@thismodule}{#1} \renewcommand{\py@thismodule}{#1}
\setindexsubitem{(in module #1)}%
\index{#1@{\py@idxcode{#1}} (#2module)|textbf}% \index{#1@{\py@idxcode{#1}} (#2module)|textbf}%
\ifpy@UseModuleIndex% \ifpy@UseModuleIndex%
\@ifundefined{py@modplat@\py@thismodulekey}{ \@ifundefined{py@modplat@\py@thismodulekey}{
@ -342,39 +302,6 @@
\fi% \fi%
} }
% *** XXX *** THE NEXT FOUR MACROS ARE NOW OBSOLETE !!! ***
% built-in & Python modules in the main distribution
\newcommand{\bimodindex}[1]{\py@modindex{#1}{built-in }%
\typeout{*** MACRO bimodindex IS OBSOLETE -- USE declaremodule INSTEAD!}}
\newcommand{\stmodindex}[1]{\py@modindex{#1}{standard }%
\typeout{*** MACRO stmodindex IS OBSOLETE -- USE declaremodule INSTEAD!}}
% Python & extension modules outside the main distribution
\newcommand{\modindex}[1]{\py@modindex{#1}{}%
\typeout{*** MACRO modindex IS OBSOLETE -- USE declaremodule INSTEAD!}}
\newcommand{\exmodindex}[1]{\py@modindex{#1}{extension }%
\typeout{*** MACRO exmodindex IS OBSOLETE -- USE declaremodule INSTEAD!}}
% Additional string for an index entry
\newif\ifpy@usingsubitem\py@usingsubitemfalse
\newcommand{\py@indexsubitem}{}
\newcommand{\setindexsubitem}[1]{\renewcommand{\py@indexsubitem}{ #1}%
\py@usingsubitemtrue}
\newcommand{\ttindex}[1]{%
\ifpy@usingsubitem
\index{#1@{\py@idxcode{#1}}\py@indexsubitem}%
\else%
\index{#1@{\py@idxcode{#1}}}%
\fi%
}
\newcommand{\withsubitem}[2]{%
\begingroup%
\def\ttindex##1{\index{##1@{\py@idxcode{##1}} #1}}%
#2%
\endgroup%
}
% Module synopsis processing ----------------------------------------------- % Module synopsis processing -----------------------------------------------
% %
@ -509,7 +436,6 @@
\newcommand{\py@reset}{ \newcommand{\py@reset}{
\py@usingsubitemfalse
\py@ProcessModSynopsis \py@ProcessModSynopsis
\renewcommand{\py@thisclass}{} \renewcommand{\py@thisclass}{}
\renewcommand{\py@thismodule}{} \renewcommand{\py@thismodule}{}
@ -519,27 +445,14 @@
% Augment the sectioning commands used to get our own font family in place, % Augment the sectioning commands used to get our own font family in place,
% and reset some internal data items: % and reset some internal data items:
\renewcommand{\section}{\py@reset% \titleformat{\section}{\Large\py@HeaderFamily\py@TitleColor}%
\@startsection{section}{1}{\z@}% {\thesection}{-1em}{\py@reset}{\py@NormalColor}
{-3.5ex \@plus -1ex \@minus -.2ex}% \titleformat{\subsection}{\large\py@HeaderFamily\py@TitleColor}%
{2.3ex \@plus.2ex}% {\thesubsection}{0.5em}{}{\py@NormalColor}
{\reset@font\Large\py@HeaderFamily}} \titleformat{\subsubsection}{\py@HeaderFamily\py@TitleColor}%
\renewcommand{\subsection}{\@startsection{subsection}{2}{\z@}% {\thesubsubsection}{0.5em}{}{\py@NormalColor}
{-3.25ex\@plus -1ex \@minus -.2ex}% \titleformat{\paragraph}{\large\py@HeaderFamily\py@TitleColor}%
{1.5ex \@plus .2ex}% {}{0em}{}{\py@NormalColor}
{\reset@font\large\py@HeaderFamily}}
\renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\reset@font\normalsize\py@HeaderFamily}}
\renewcommand{\paragraph}{\@startsection{paragraph}{4}{\z@}%
{3.25ex \@plus1ex \@minus.2ex}%
{-1em}%
{\reset@font\normalsize\py@HeaderFamily}}
\renewcommand{\subparagraph}{\@startsection{subparagraph}{5}{\parindent}%
{3.25ex \@plus1ex \@minus .2ex}%
{-1em}%
{\reset@font\normalsize\py@HeaderFamily}}
% Now for a lot of semantically-loaded environments that do a ton of magical % Now for a lot of semantically-loaded environments that do a ton of magical
@ -591,6 +504,10 @@
% something else. % something else.
\newcommand{\py@unspecified}{...} \newcommand{\py@unspecified}{...}
\newcommand{\py@varvars}[1]{{%
{\let\unspecified=\py@unspecified%
\let\moreargs=\py@moreargs%
\emph{#1}}}}
\newlength{\py@argswidth} \newlength{\py@argswidth}
\newcommand{\py@sigparams}[1]{% \newcommand{\py@sigparams}[1]{%
@ -807,7 +724,7 @@
% -- {var} may be {} % -- {var} may be {}
\newenvironment{opcodedesc}[2]{ \newenvironment{opcodedesc}[2]{
\begin{fulllineitems} \begin{fulllineitems}
\item[\bfcode{#1}\quad\var{#2}] \item[\bfcode{#1}\quad\emph{#2}]
}{\end{fulllineitems}} }{\end{fulllineitems}}
% generic description ---------------------------------------------------- % generic description ----------------------------------------------------
@ -819,116 +736,6 @@
\descline{#1} \descline{#1}
}{\end{fulllineitems}} }{\end{fulllineitems}}
\newcommand{\nodename}[1]{\label{#1}}
% For these commands, use \command{} to get the typography right, not
% {\command}. This works better with the texinfo translation.
\newcommand{\ABC}{{\sc abc}}
\newcommand{\UNIX}{{\sc Unix}}
\newcommand{\POSIX}{POSIX}
\newcommand{\ASCII}{{\sc ascii}}
\newcommand{\Cpp}{C\protect\raisebox{.18ex}{++}}
\newcommand{\C}{C}
\newcommand{\EOF}{{\sc eof}}
\newcommand{\NULL}{\constant{NULL}}
\newcommand{\infinity}{\ensuremath{\infty}}
\newcommand{\plusminus}{\ensuremath{\pm}}
% \guilabel{Start}
\newcommand{\guilabel}[1]{\textsf{#1}}
% \menuselection{Start \sub Programs \sub Python}
\newcommand{\menuselection}[1]{\guilabel{{\def\sub{ \ensuremath{>} }#1}}}
% Also for consistency: spell Python "Python", not "python"!
\newcommand{\code}[1]{\texttt{#1}}
\newcommand{\bfcode}[1]{\code{\bfseries#1}} % bold-faced code font
\newcommand{\csimplemacro}[1]{\code{#1}}
\newcommand{\kbd}[1]{\code{#1}}
\newcommand{\samp}[1]{`\code{#1}'}
\newcommand{\var}[1]{%
\ifmmode%
\hbox{\py@defaultsize\textrm{\textit{#1\/}}}%
\else%
\py@defaultsize\textrm{\textit{#1\/}}%
\fi%
}
\renewcommand{\emph}[1]{{\em #1}}
\newcommand{\dfn}[1]{\emph{#1}}
\newcommand{\strong}[1]{{\bf #1}}
% let's experiment with a new font:
\newcommand{\file}[1]{`\filenq{#1}'}
\newcommand{\filenq}[1]{{\py@smallsize\textsf{\let\e=\textbackslash#1}}}
\newcommand{\email}[1]{{\py@smallsize\textsf{#1}}}
\newcommand{\newsgroup}[1]{{\py@smallsize\textsf{#1}}}
\newcommand{\py@varvars}[1]{{%
{\let\unspecified=\py@unspecified%
\let\moreargs=\py@moreargs%
\var{#1}}}}
% These should be used for all references to identifiers which are
% used to refer to instances of specific language constructs. See the
% names for specific semantic assignments.
%
% For now, don't do anything really fancy with them; just use them as
% logical markup. This might change in the future.
%
\newcommand{\module}[1]{\texttt{#1}}
\newcommand{\keyword}[1]{\texttt{#1}}
\newcommand{\exception}[1]{\texttt{#1}}
\newcommand{\class}[1]{\texttt{#1}}
\newcommand{\function}[1]{\texttt{#1}}
\newcommand{\member}[1]{\texttt{#1}}
\newcommand{\method}[1]{\texttt{#1}}
\newcommand{\pytype}[1]{#1} % built-in Python type
\newcommand{\cfunction}[1]{\texttt{#1}}
\newcommand{\ctype}[1]{\texttt{#1}} % C struct or typedef name
\newcommand{\cdata}[1]{\texttt{#1}} % C variable, typically global
\newcommand{\mailheader}[1]{{\py@smallsize\textsf{#1:}}}
\newcommand{\mimetype}[1]{{\py@smallsize\textsf{#1}}}
% The \! is a "negative thin space" in math mode.
\newcommand{\regexp}[1]{%
{\tiny$^{^\lceil}\!\!$%
{\py@defaultsize\code{#1}}%
$\!\rfloor\!$%
}}
\newcommand{\envvar}[1]{%
#1%
\index{#1}%
\index{environment variables!{#1}}%
}
\newcommand{\makevar}[1]{#1} % variable in a Makefile
\newcommand{\character}[1]{\samp{#1}}
% constants defined in Python modules or C headers, not language constants:
\newcommand{\constant}[1]{\code{#1}} % manifest constant, not syntactic
\newcommand{\manpage}[2]{{\emph{#1}(#2)}}
\newcommand{\pep}[1]{PEP #1\index{Python Enhancement Proposals!PEP #1}}
\newcommand{\rfc}[1]{RFC #1\index{RFC!RFC #1}}
\newcommand{\program}[1]{\strong{#1}}
\newcommand{\programopt}[1]{\strong{#1}}
% Note that \longprogramopt provides the '--'!
\newcommand{\longprogramopt}[1]{\strong{-{}-#1}}
% cited titles: \citetitle{Title of Work}
% online: \citetitle[url-to-resource]{Title of Work}
\ifpdf
\newcommand{\citetitle}[2][\py@modulebadkey]{%
\ifx\py@modulebadkey#1\emph{#2}\else\ulink{\emph{#2}}{#1}\fi%
}
\else
\newcommand{\citetitle}[2][URL]{\emph{#2}}
\fi
% This version is being checked in for the historical record; it shows % This version is being checked in for the historical record; it shows
% how I've managed to get some aspects of this to work. It will not % how I've managed to get some aspects of this to work. It will not
% be used in practice, so a subsequent revision will change things % be used in practice, so a subsequent revision will change things
@ -1107,111 +914,16 @@
\end{center}% \end{center}%
} }
% Cross-referencing (AMK, new impl. FLD) % See-also environment
% Sample usage:
% \begin{seealso}
% \seemodule{rand}{Uniform random number generator.}; % Module xref
% \seetext{\emph{Encyclopedia Britannica}}. % Ref to a book
%
% % A funky case: module name contains '_'; have to supply an optional key
% \seemodule[copyreg]{copy_reg}{Interface constructor registration for
% \module{pickle}.}
% \end{seealso}
%
% Note that the last parameter for \seemodule and \seetext should be complete
% sentences and be terminated with the proper punctuation.
\ifpdf
\newcommand{\py@seemodule}[3][\py@modulebadkey]{%
\par%
\ifx\py@modulebadkey#1\def\py@modulekey{#2}\else\def\py@modulekey{#1}\fi%
\begin{fulllineitems}
\item[\py@linkToName{label-module-\py@modulekey}{Module \module{#2}}
(section \ref{module-\py@modulekey}):]
#3
\end{fulllineitems}
}
\else
\newcommand{\py@seemodule}[3][\py@modulebadkey]{%
\par%
\ifx\py@modulebadkey#1\def\py@modulekey{#2}\else\def\py@modulekey{#1}\fi%
\begin{fulllineitems}
\item[Module \module{#2} (section \ref{module-\py@modulekey}):]
#3
\end{fulllineitems}
}
\fi
% \seelink{url}{link text}{why it's interesting}
\newcommand{\py@seelink}[3]{%
\par
\begin{fulllineitems}
\item[\ulink{#2}{#1}]
#3
\end{fulllineitems}
}
% \seetitle[url]{title}{why it's interesting}
\newcommand{\py@seetitle}[3][\py@modulebadkey]{%
\par
\begin{fulllineitems}
\item[\citetitle{#2}]
\ifx\py@modulebadkey#1\else
\item[{\small{(\url{#1})}}]
\fi
#3
\end{fulllineitems}
}
% \seepep{number}{title}{why it's interesting}
\newcommand{\py@seepep}[3]{%
\par%
\begin{fulllineitems}
\item[\pep{#1}, ``\emph{#2}'']
#3
\end{fulllineitems}
}
% \seerfc{number}{title}{why it's interesting}
\newcommand{\py@seerfc}[3]{%
\par%
\begin{fulllineitems}
\item[\rfc{#1}, ``\emph{#2}'']
#3
\end{fulllineitems}
}
% \seeurl{url}{why it's interesting}
\newcommand{\py@seeurl}[2]{%
\par%
\begin{fulllineitems}
\item[\url{#1}]
#2
\end{fulllineitems}
}
\newenvironment{seealso*}{
\par
\def\seetext##1{\par{##1}}
\let\seemodule=\py@seemodule
\let\seepep=\py@seepep
\let\seerfc=\py@seerfc
\let\seetitle=\py@seetitle
\let\seeurl=\py@seeurl
\let\seelink=\py@seelink
}{\par}
\newenvironment{seealso}{ \newenvironment{seealso}{
\par \par
\strong{See Also:} \strong{See Also:}
\par \par
\def\seetext##1{\par{##1}}
\let\seemodule=\py@seemodule
\let\seepep=\py@seepep
\let\seerfc=\py@seerfc
\let\seetitle=\py@seetitle
\let\seeurl=\py@seeurl
\let\seelink=\py@seelink
}{\par} }{\par}
% Allow the Python release number to be specified independently of the % Allow the release number to be specified independently of the
% \date{}. This allows the date to reflect the document's date and % \date{}. This allows the date to reflect the document's date and
% release to specify the Python release that is documented. % release to specify the release that is documented.
% %
\newcommand{\py@release}{} \newcommand{\py@release}{}
\newcommand{\version}{} \newcommand{\version}{}
@ -1232,9 +944,6 @@
% %
\newcommand{\py@authoraddress}{} \newcommand{\py@authoraddress}{}
\newcommand{\authoraddress}[1]{\renewcommand{\py@authoraddress}{#1}} \newcommand{\authoraddress}[1]{\renewcommand{\py@authoraddress}{#1}}
\let\developersaddress=\authoraddress
\let\developer=\author
\let\developers=\author
% This sets up the fancy chapter headings that make the documents look % This sets up the fancy chapter headings that make the documents look
% at least a little better than the usual LaTeX output. % at least a little better than the usual LaTeX output.
@ -1293,3 +1002,22 @@
\leftmargin#1} \leftmargin#1}
\raggedright} \raggedright}
{\end{list}} {\end{list}}
% Redefine includgraphics for avoiding images larger than the screen size
% If the size is not specified.
\let\py@Oldincludegraphics\includegraphics
\newbox\image@box%
\newdimen\image@width%
\renewcommand\includegraphics[2][\@empty]{%
\ifx#1\@empty%
\setbox\image@box=\hbox{\py@Oldincludegraphics{#2}}%
\image@width\wd\image@box%
\ifdim \image@width>\linewidth%
\setbox\image@box=\hbox{\py@Oldincludegraphics[width=\linewidth]{#2}}%
\fi%
\box\image@box%
\else%
\py@Oldincludegraphics[#1]{#2}%
\fi%
}