diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/impnattypo/impnattypo.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/impnattypo/impnattypo.dtx | 162 |
1 files changed, 156 insertions, 6 deletions
diff --git a/Master/texmf-dist/source/latex/impnattypo/impnattypo.dtx b/Master/texmf-dist/source/latex/impnattypo/impnattypo.dtx index 4efb58dffc6..16644e211fd 100644 --- a/Master/texmf-dist/source/latex/impnattypo/impnattypo.dtx +++ b/Master/texmf-dist/source/latex/impnattypo/impnattypo.dtx @@ -26,15 +26,17 @@ %<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01] %<package>\ProvidesPackage{impnattypo} %<*package> - [2011/09/11 0.1 Recommendations typographiques de l'Imprimerie Nationale Française] + [2011/09/13 0.3 Recommendations typographiques de l'Imprimerie Nationale Française] %</package> % %<*driver> \documentclass{ltxdoc} -\usepackage{impnattypo}[2011/09/11] +\usepackage[hyphenation,nosingleletter,parindent,lastparline]{impnattypo}[2011/09/13] \usepackage[french]{babel} -\usepackage[utf8]{inputenc} -\usepackage[T1]{fontenc} +\usepackage{fontspec} +\setmainfont{Linux Libertine O} +\usepackage{metalogo} +\usepackage[all]{nowidow} \EnableCrossrefs \CodelineIndex \RecordChanges @@ -46,7 +48,7 @@ %</driver> % \fi % -% \CheckSum{26} +% \CheckSum{66} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -65,6 +67,8 @@ % Right brace \} Tilde \~} % % +% \changes{0.3}{2011/09/13}{Add parindent and lastparline options} +% \changes{0.2}{2011/09/13}{Add nosingleletter option} % \changes{0.1}{2011/09/11}{First version} % % \DoNotIndex{\newcommand,\newenvironment} @@ -90,7 +94,7 @@ % % C'est le but de ce paquet, qui implémente plusieurs règles % édictées dans ce lexique afin de les rendre plus facilement applicables -% aux textes édités avec \LaTeX +% aux textes édités avec \LaTeX. % % \section{Utilisation} % @@ -104,6 +108,7 @@ % % \subsection{Césures} % +% \DescribeMacro{hyphenation} % En dehors des règles générales de coupure des mots, le lexique indique % qu'il faut \og [éviter] les coupures de mots sur plus de trois lignes % consécutives \fg{}. @@ -118,8 +123,52 @@ % \usepackage[hyphenation]{impnattypo} % \end{verbatim} % +% +% \subsection{Formatage des paragraphes} +% +% \DescribeMacro{parindent} +% Le lexique conseille une indentation des paragraphes de 1em. +% Ce réglage de |\parindent| peut être obtenu par l'utilisation +% de l'option \texttt{parindent}: +% +% \begin{verbatim} +% \usepackage[parindent]{impnattypo} +% \end{verbatim} +% +% \DescribeMacro{lastparline} +% De plus, il est indiqué dans la section \og Coupure des mots \fg{} +% que \og la dernière ligne d'un alinéa doit comporter un mot ou +% une fin de mot de longueur au moins égale au double du renfoncement +% de l'alinéa suivant. \fg{} À défaut d'implémenter exactement cette +% solution, l'option \texttt{lastparline} s'assure que la dernière +% ligne d'un alinéa est au moins aussi longue que le double +% de la valeur de |\parindent|.\footnote{\url{http://tex.stackexchange.com/questions/28357/ensure-minimal-length-of-last-line}} +% +% Lorsque \LuaTeX est utilisé, la solution de Patrick Gundlach\footnote{\url{http://tex.stackexchange.com/questions/28357/ensure-minimal-length-of-last-line/28361\#28361}} +% est utilisée. Avec les autres moteurs de rendu, c'est la solution native de +% Enrico Gregorio\footnote{\url{http://tex.stackexchange.com/questions/28357/ensure-minimal-length-of-last-line/28358\#28358}} +% qui fait office d'implémentation: +% +% \begin{verbatim} +% \usepackage[lastparline]{impnattypo} +% \end{verbatim} +% +% \DescribeMacro{nosingleletter} +% Il est également recommendé d'éviter les coupures isolant une lettre. +% La solution proposée par Patrick Gundlach\footnote{\url{http://tex.stackexchange.com/questions/27780/one-letter-word-at-the-end-of-line}} +% permet de remédier à cela en utilisant \LuaTeX. Pour activer cette +% fonctionalité, il faut utiliser l'option \texttt{nosingleletter}: +% +% \begin{verbatim} +% \usepackage[nosingleletter]{impnattypo} +% \end{verbatim} +% +% Lorsque cette option est activée, seul \LuaTeX{} (via la commande |lualatex|) +% pourra effectuer le rendu du document. +% % \subsection{Numérotation des chapitres} % +% \DescribeMacro{frenchchapters} % Concernant la numérotation des chapitres, le lexique indique: % \og Dans un titre, on compose en chiffres romains grandes capitales % les numéros de chapitres, à l'exception de l'ordinal \og premier \fg{} @@ -142,6 +191,18 @@ % \end{verbatim} % % +% \subsection{Lignes orphelines} +% +% Il est fortement recommendé de ne pas laisser de lignes orphelines +% dans un document. Pour cela, nous vous conseillons d'utiliser le paquet +% |nowidow|: +% +% \begin{verbatim} +% \usepackage[all]{nowidow} +% \end{verbatim} +% +% Voir la documentation de ce paquet pour plus d'options. +% % % \StopEventually{} % @@ -153,10 +214,17 @@ % % \begin{macrocode} \ProvidesPackage{impnattypo} +\usepackage{ifluatex} \newif\if@impnattypo@frenchchapters \DeclareOption{frenchchapters}{\@impnattypo@frenchchapterstrue} \newif\if@impnattypo@hyphenation \DeclareOption{hyphenation}{\@impnattypo@hyphenationtrue} +\newif\if@impnattypo@nosingleletter +\DeclareOption{nosingleletter}{\@impnattypo@nosinglelettertrue} +\newif\if@impnattypo@parindent +\DeclareOption{parindent}{\@impnattypo@parindenttrue} +\newif\if@impnattypo@lastparline +\DeclareOption{lastparline}{\@impnattypo@lastparlinetrue} \ProcessOptions \if@impnattypo@hyphenation % \end{macrocode} @@ -187,6 +255,88 @@ \fi % \end{macrocode} % +% \marginpar{No single letter} +% +% \begin{macrocode} +\if@impnattypo@nosingleletter + \ifluatex + \usepackage{luatexbase,luacode} + \begin{luacode} + + local prevent_single_letter = function (head) + while head do + if head.id == 37 then -- glyph + if head.prev.id == 10 and head.next.id == 10 then -- only if we are at a one letter word + + local p = node.new("penalty") + p.penalty = 10000 + + -- Uncomment the next lines to show the position of the ~'s + -- local p = node.new("rule") + -- p.width = 2* 2^16 + -- p.height = 2^16 + -- p.depth = 2^16 + + p.next = head.next + head.next.prev = p + head.next = p + + end + end + head = head.next + end + return true + end + + luatexbase.add_to_callback("pre_linebreak_filter",prevent_single_letter,"~") + \end{luacode} + \else + \PackageError{The nosingleletter option only works with LuaTeX} + \fi +\fi +% \end{macrocode} +% +% \marginpar{Paragraph indentation} +% +% \begin{macrocode} +\if@impnattypo@parindent +\setlength{\parindent}{1em} +\fi +% \end{macrocode} +% +% \marginpar{Last line of paragraph} +% +% \begin{macrocode} +\if@impnattypo@lastparline + \ifluatex + \usepackage{luatexbase,luacode} + \begin{luacode} + last_line_twice_parindent = function (head) + while head do + local _w,_h,_d = node.dimensions(head) + if head.id == 10 and head.subtype ~= 15 and (_w < 2 * tex.parindent) then + + -- we are at a glue and have less then 2*\parindent to go + local p = node.new("penalty") + p.penalty = 10000 + p.next = head + head.prev.next = p + p.prev = head.prev + head.prev = p + end + + head = head.next + end + return true + end + + luatexbase.add_to_callback("pre_linebreak_filter",last_line_twice_parindent,"lastparline") + \end{luacode} + \else + \setlength{\parfillskip}{0pt plus\dimexpr\textwidth-2\parindent} + \fi +\fi +% \end{macrocode} % % \iffalse %</package> |