Sommaire
- intro au kilomètre
- replis sur bord de lignes
- ajustement des paragraphes à une largeur
- expansion au taquet
- paragraphes au large
- balle au centre et égalisation
- impressions standards
- impressions en rang et/ou partielles
- impressions de livrets
- chasse fixe
'jour 'nal.
Dans une enfilage sur le clavier, j'avais avoué ma passion pour l'histoire des systèmes et matériels informatiques ; et dans diverses autres discussion, ici et ailleurs, j'ai souvent évoqué l'influence des télescripteurs (en tant que périphériques d'entrée-sortie) sur le système Unix, un processeur de textes commandé textuellement…
C'est cet aspect que j'aimerais rappeler à travers quelques commandes oubliées.
intro au kilomètre
J'ai souvenir qu'on enseignait à une certaine époque (j'ai l'impression que ce n'est plus vrai quand je regarde autour de moi) que dans la création de documents textes (lettre, rédaction, roman, etc.) il y a deux étapes distinctes : la saisie (dite au kilomètre) d'une part, et la mise en forme d'autre part. Un éditeur comme Vi permet d'observer cette règle facilement : on est en mode insertion pour la partie de saisie, et en mode commandes pour la partie édition avant mise en forme…
Lors de cette phase de saisie brute, les traitements de texte moderne nécessitent de distinguer le simple saut de ligne du changement de paragraphe (qui est associé à la touche Entrée). Dans un éditeur de texte, que ce soit pour avec un balisage ou directement pour l'imprimante comme dans le cas présent, c'est plus simple : la touche Entrée permet de juste passer à la ligne (ce qui est rarement nécessaire), et il faut sauter au moins une ligne pour indiquer un nouveau paragraphe.
Une fois son texte saisi (input mode) et corrigé (command mode), il faut le mettre en forme pour l'impression (ou l'affichage sur le terminal…) Les systèmes Unix offrent quelques outils pour cela.
replis sur bord de lignes
Le premier, peu connu, est le filtre POSIX "fold
", apparu dans 1BSD en 1977 (sortie officielle de la distribution en mars 1978). On lui indique la largeur voulue avec l'option "-w
" (par défaut c'est du 80 caractères…) Il va être utile pour adapter la largeur du texte, en particulier lorsqu'on l'envoie vers une imprimante (sans retour de ligne, les lignes trop longues sont juste tronquées…) On peut l'utiliser aussi pour voir le résultat du même texte avec une largeur d'écran différente. Exemple :
$ echo "The _fold_ utility is a filter that shall fold lines from its\
input files, but breaking the lines to have a maximum of _width_\
column position (or bytes, if the *-b* option is specified)." | fold
The _fold_ utility is a filter that shall fold lines from its input files, but b
reaking the lines to have a maximum of _width_ column position (or bytes, if the
*-b* option is specified).
$ echo "The _fold_ utility is a filter that shall fold lines from its\
input files, but breaking the lines to have a maximum of _width_\
column position (or bytes, if the *-b* option is specified)." | fold -w 75
The _fold_ utility is a filter that shall fold lines from its input files,
but breaking the lines to have a maximum of _width_ column position (or byt
es, if the *-b* option is specified).
$ echo "The _fold_ utility is a filter that shall fold lines from its\
input files, but breaking the lines to have a maximum of _width_\
column position (or bytes, if the *-b* option is specified)." | fold -w 60
The _fold_ utility is a filter that shall fold lines from it
s input files, but breaking the lines to have a maximum of _
width_ column position (or bytes, if the *-b* option is spec
ified).
Le fonctionnement est un peu simplet : noter la coupe abrupt des mots …sauf si on utilise l'option "-s
" qui demande de couper aux espaces !
$ fold wrap.txt | tr ' ' '~'
The~_fold_~utility~is~a~filter~that~shall~fold~lines~from~its~input~files,~but~b
reaking~the~lines~to~have~a~maximum~of~_width_~column~position~(or~bytes,~if~the
~*-b*~option~is~specified).
Use~*-s*~option~to~split~at~latest~space~before~maximum~_width_.
The~_fmt_~utility~is~a~filter~that~shall~reformat~each~paragraph~from~its~input~
files,~but~break~the~lines~to~have~a~maximum~of~_width_~column~position.
$ fold -s wrap.txt | tr ' ' '~'
The~_fold_~utility~is~a~filter~that~shall~fold~lines~from~its~input~files,~but~
breaking~the~lines~to~have~a~maximum~of~_width_~column~position~(or~bytes,~if~
the~*-b*~option~is~specified).
Use~*-s*~option~to~split~at~latest~space~before~maximum~_width_.
The~_fmt_~utility~is~a~filter~that~shall~reformat~each~paragraph~from~its~input~
files,~but~break~the~lines~to~have~a~maximum~of~_width_~column~position.
$ fold -s -w 75 wrap.txt | tr ' ' '~'
The~_fold_~utility~is~a~filter~that~shall~fold~lines~from~its~input~files,~
but~breaking~the~lines~to~have~a~maximum~of~_width_~column~position~(or~
bytes,~if~the~*-b*~option~is~specified).
Use~*-s*~option~to~split~at~latest~space~before~maximum~_width_.
The~_fmt_~utility~is~a~filter~that~shall~reformat~each~paragraph~from~its~
input~~files,~but~break~the~lines~to~have~a~maximum~of~_width_~column~
position.
$ fold -w 60 -s wrap.txt | tr ' ' '~'
The~_fold_~utility~is~a~filter~that~shall~fold~lines~from~
its~input~files,~but~breaking~the~lines~to~have~a~maximum~
of~_width_~column~position~(or~bytes,~if~the~*-b*~option~is~
specified).
Use~*-s*~option~to~split~at~latest~space~before~maximum~
_width_.
The~_fmt_~utility~is~a~filter~that~shall~reformat~each~
paragraph~from~its~input~files,~but~break~the~lines~to~have~
a~maximum~of~_width_~column~position.
J'utilise cette commande dans mes scripts pour des traitements caractère par caractère :
# from variable
for char in $(echo "$var" | fold -w 1); do stuff; done
# from file
for char in $(fold -w 1 "$filepath"); do stuff; done
…chose qu'on peut faire aussi à l'aide de grep
:
# from variable
for char in $(echo "$var" | grep -os '.'); do stuff; done
# from file
for char in $(grep -os '.' "$filepath"); do stuff; done
ajustement des paragraphes à une largeur
Il existe un autre filtre, apparu dans 2BSD en 1978 et vite adopté par d'autres distributions. Il porte le nom de "fmt
" pour "ForMat Text"… (En dehors du système, c'est un sigle qui peut avoir plusieurs sens en français comme en anglais et ailleurs. Dans de nombreux langages de programmation, c'est souvent le nom de la bibliothèque pour faire du formatage de données —textes/nombres/etc., cousin de "printf
"/"sprintf
" anciennement connu sous le nom de "cppformat
" et est utilisé par exemple dans Go et dans Java EE en tant que JSTL etc.) On lui indique aussi la largeur voulue avec l'option "-w
" (qui est de 75 caractères par défaut …parce que conçu avec la nétiquette et les RFC du courriel en tête)
$ fmt wrap.txt | tr ' ' '~'
The~_fold_~utility~is~a~filter~that~shall~fold~lines~from~its~input~files,
but~breaking~the~lines~to~have~a~maximum~of~_width_~column~position~
(or~bytes,~if~the~*-b*~option~is~specified).~~Use~*-s*~option~to~split
at~latest~space~before~maximum~_width_.
The~_fmt_~utility~is~a~filter~that~shall~reformat~each~paragraph~from
its~input~ files,~but~break~the~lines~to~have~a~maximum~of~_width_
column~position.
$ fmt -w 80 wrap.txt | tr ' ' '~'
The~_fold_~utility~is~a~filter~that~shall~fold~lines~from~its~input~files,
but~breaking~the~lines~to~have~a~maximum~of~_width_~column~position~(or~bytes,
if~the~*-b*~option~is~specified).~~Use~*-s*~option~to~split~at~latest~space
before~maximum~_width_.
The~_fmt_~utility~is~a~filter~that~shall~reformat~each~paragraph~from~its
input~files,~but~break~the~lines~to~have~a~maximum~of~_width_~column~position.
$ fmt -w 60 wrap.txt | tr ' ' '~'
The~_fold_~utility~is~a~filter~that~shall~fold~lines~from
its~input~files,~but~breaking~the~lines~to~have~a~maximum
of~_width_~column~position~(or~bytes,~if~the~*-b*~option
is~specified).~~Use~*-s*~option~to~split~at~latest~space
before~maximum~_width_.
The~_fmt_~utility~is~a~filter~that~shall~reformat~each
paragraph~from~its~input~files,~but~break~the~lines~to
have~a~maximum~of~_width_~column~position.
Il met en œuvre la notion de mots comme suite de caractères séparés par des blancs, et reconnait la notion de paragraphe comme étant séparés par une ou plusieurs lignes vides (comme vi
hé hé). Du coup, il peut appliquer un retrait à la première ligne du paragraphe (option "-p
" de l'implémentation BSD) …ou carrément l'inverse (option "-t
" de l'implémentation GNU). Eh oui, la typographie n'a pas attendu les traitements de texte… (voir ci et là ou là par exemple.)
On notera qu'il connait aussi la notion de phrase comme étant terminées par une ponctuation de fin (point… final, d'interrogation, d'exclamation, en fait comme dans vi
hé hé) et peuvent alors appliquer la règle typographique anglophone d'espacement (datant de l'époque des machines à écrire et devant faciliter la lecture) : un seul espace entre les mots et deux espaces entre les phrases. (BSD "-s
" ou GNU "-u
") Noter que la commande "J
" de Ed/Ex/Vi procède normalement ainsi…
D'autres implémentations peuvent offrir de centrer le texte sur la ligne ou d'autres options sympathiques, comme de conserver les lignes dans les paragraphes (GNU "-s
")
OpenBSD/FreeBSD | GNU/Linux | Sun Solaris | Plan 9 | IBM AIX | |
---|---|---|---|---|---|
-w Ⅰ |
-w Ⅰ |
-w Ⅰ |
-w Ⅰ |
-w Ⅰ |
use Ⅰ width output (default goal is around 93% of width) |
-Ⅰ |
-Ⅰ |
-Ⅰ |
-l Ⅰ |
-Ⅰ |
use Ⅰ width output |
Ⅰ |
-g Ⅰ |
goal is Ⅰ (and max width is Ⅰ+10 unless specified) |
|||
Ⅰ Ⅼ |
-g Ⅰ -w Ⅼ |
goal is Ⅰ and max width is Ⅼ
|
|||
-c |
Center | ||||
-d Ⅹ |
sentence ending Delimiters are Ⅹ
|
||||
-l Ⅰ |
replace Ⅰ spaces with tabs at beginning of line |
||||
-m |
try to format Mail headers too | ||||
-n |
disable Nroff compatibility so not skip lines starting with '.' | ||||
-p |
indent Paragraph first line | ||||
-t |
Tagged paragraph (indent lines but first) | ||||
-s |
-u |
Uniformize white spaces by Single one/two between words/sentences | |||
-t Ⅰ |
replace Tabs with Ⅰ spaces instead of 1 |
||||
-p Ⅹ |
reformat only lines beginning with Ⅹ Prefix |
||||
-c |
-c |
preserve indentation of first two lines = Crown margin | |||
-s |
-s |
-j |
Split/fold only long lines but do not refill (i.e. Join short lines) | ||
-i Ⅰ |
Indent each line with Ⅰ spaces |
Ceci dit, il ne faut se limiter qu'à une option, "-w…
" (voire même juste "-…
" puisque d'anciennes implémentation AIX ne connaissent que ce dernier mais que cette dernière forme n'est pas reconnue sur Plan 9…)
Pour le travail de base, "fmt
" est quasiment équivalent à "fold -s
". Ainsi, fold
reste intéressant quand il faut respecter les sauts de lignes, tandis que fmt
va formater un paragraphe en essayant d'avoir un texte homogène…
expansion au taquet
Pour les tabulations, il existe des filtres POSIX qu'il vaut mieux utiliser en amont ; ça rend les scripts plus portables.
BSD fmt
|
alternative POSIX |
---|---|
-t _ |
expand -t _ |
-l _ |
unexpand -t _ |
Les filtres dédiés permettent d'ailleurs de faire beaucoup plus…
$ cat -T taquets.txt
Fournitures^IQuantité^IPrix
Crayons^I12^I15,76
Feuilles A4^I1000^I137,5
Correcteurs^I10^I18
$ # par défaut on positionne en colonne modulo 8...
$ echo "1------.-1-------.-2-------.-3" ; cat taquets.txt
1------.-1-------.-2-------.-3-------.-
Fournitures Quantité Prix
Crayons 12 15,76
Feuilles A4 1000 137,5
Correcteurs 10 18
$ echo "1------.-1-------.-2-------.-3" ; cut -f 1-3 taquets.txt
1------.-1-------.-2-------.-3-------.-
Fournitures Quantité Prix
Crayons 12 15,76
Feuilles A4 1000 137,5
Correcteurs 10 18
$ # cas par défaut de la commande qui remplace TAB par 8
$ echo "1------.-1-------.-2-------.-3" ; expand taquets.txt
1------.-1-------.-2-------.-3-------.-
Fournitures Quantité Prix
Crayons 12 15,76
Feuilles A4 1000 137,5
Correcteurs 10 18
$ # mais on peut spécifier une autre largeur de TAB comme 7
$ echo "1------.-1-------.-2-------.-3" ; expand -t 7 taquets.txt
1------.-1-------.-2-------.-3-------.-
Fournitures Quantité Prix
Crayons 12 15,76
Feuilles A4 1000 137,5
Correcteurs 10 18
$ # On peut mettre des Taquets par exemple en colonnes 17 et 33
$ echo "1------.-1-------.-2-------.-3" ; expand -t 17,33 taquets.txt
1------.-1-------.-2-------.-3-------.-
Fournitures Quantité Prix
Crayons 12 15,76
Feuilles A4 1000 137,5
Correcteurs 10 18
$ # On peut mettre des Taquets par exemple en colonnes 13 et 23
$ echo "1------.-1-------.-2-------.-3" ; expand -t 13,23 taquets.txt
1------.-1-------.-2-------.-3-------.-
Fournitures Quantité Prix
Crayons 12 15,76
Feuilles A4 1000 137,5
Correcteurs 10 18
$ # On peut redefinir les taquets pour le terminal
$ # (profite à tous les programmes)
$ tabs 13,23 ; echo "1------.-1-------.-2-------.-3" ; cat taquets.txt ; tabs -8
1------.-1-------.-2-------.-3-------.-
Fournitures Quantité Prix
Crayons 12 15,76
Feuilles A4 1000 137,5
Correcteurs 10 18
On savait déjà faire tout cela en ligne de commande dans ces années là (pour la petite histoire, expand
est apparue avec 1BSD en mars 1978, et tabs
est apparu dans PWB/UNIX publié en juillet 1977.) Encore une fois, pas eu besoin d'attendre la machinerie moderne (voir ici et là ou là par exemple.)
$ # attention a bien les enchaîner....
$ fold -w 60 taquets.txt
Fournitures Quantité Prix
Crayons 12 15,76
Feuilles A4 1000 137,5
Correcteurs 10 18
$ fmt -w60 taquets.txt
Fournitures Quantité Prix Crayons 12 15,76
Feuilles A4 1000 137,5 Correcteurs 10 18
$ fmt -s -w 60 taquets.txt
Fournitures Quantité Prix
Crayons 12 15,76
Feuilles A4 1000 137,5
Correcteurs 10 18
$ expand -t 13,23 taquets.txt | fmt -s -w 60
Fournitures Quantité Prix
Crayons 12 15,76
Feuilles A4 1000 137,5
Correcteurs 10 18
Pour la route, si on n'est pas préoccupé par la portabilité, il y a d'autres alternatives à expand
:
-
tab2space
du projet HTML Tidy et qui a la particularité de combiner l'équivalent deexpand
(une seule largeur de tabulation) avec l'équivalent dedos2unix
oufromdos
. C'est présent dans Mac OS X et Solaris entre autres. - la commande
retab
dans Vim et peut être vite implémenté dans Emacs et dans VSC - etc.
paragraphes au large
Il semble qu'il y a matière à améliorations, surtout dans le cadre du courriel, ce qui a conduit Adam M. Costello à produire "par
" en 1993 (juste l'abréviation de « PARagraph » je crois, mais c'aurait pu être le sigle de « Paragraphs Alternative Reformater » aussi.) Je ne maitrise pas sa syntaxe peu évidente ; mais il sait traiter :
- les mails (option "
q
" ajustable avec "Q...
" et combinable avec "i
" et "e
") - les marges (options "
p
" et "s
" pouvant être combiné avec "t
" ou "f
") - les imbrications de commentaires et messages cités (options "
d
") - la préservation des espaces initiaux (option "
r
") - les justification (option "
j
") et la dernière ligne (option "l
") - le remplissage quasi complet (option "
f
") sans justification - l'expansion de la tabulation (option "
T...
") - et le retrait des lignes superflues (option "
e
") - et d'autres choses (options "
c
" et "h
" et "g
" par exemple)
le tout en gérant l'Unicode (en UTF-8) ! La largeur est aussi indiquée avec "-w ...
" (on peut utiliser juste "w...
" ou "...
") et est par défaut 72
…
$ # attention par n'opère que comme filtre...
$ par -w 60 wrap.txt
par error:
bad argument: wrap.txt
options for par:
help print option summary ---------- Boolean parameters. ---------
version print version number b<body> let non-trailing body chars in
B<op><set> as <op> is =/+/- prefix, non-leading in suffix
replace/augment/diminish c<cap> count all words as capitalized
body chars by <set> d<div> use indentation as a delimiter
P<op><set> ditto for protective chars E<Err> send messages to stderr
Q<op><set> ditto for quote chars e<expel> discard superfious lines
-------- Integer parameters: -------- f<fit> narrow paragraph for best fit
h<hang> skip IP's 1st <hang> lines g<guess> preserve wide sentence breaks
in scan for common affixes i<invis> hide lines inserted by <quote>
p<prefix> prefix length j<just> justify paragraphs
r<repeat> if not 0, force bodiless l<last> treat last lines like others
lines to length <width> q<quote> supply vacant lines between
s<suffix> suffix length different quote nesting levels
T<tab> tab stops every <tab> cols R<report> print error for too-long words
w<width> max output line length t<touch> move suffixes left
See par.doc or par.1 (the man page) for more information.
$ # ...il lit l'entrée standard et écrit sur la sortie standard
$ echo "_par_ is a filter which reformates each paragraph from its input
to its output" | par
_par_ is a which reformates each paragraph from its input to its
output
$ # donc envoyer d'abord le fichier sur l'entrée standard...
$ cat wrap.txt | par -w 60 | tr ' ' '~'
The~_fold_~utility~is~a~filter~that~shall~fold~lines~from~~.
its~input~files,~but~breaking~the~lines~to~have~a~maximum~~.
of~_width_~column~position~(or~bytes,~if~the~*-b*~option~is.
specified)~Use~*-s*~option~to~split~at~latest~space~before~.
maximum~_width_~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.
The~_fmt_~utility~is~a~filter~that~shall~reformat~each
paragraph~from~its~input~files,~but~break~the~lines~to~have
a~maximum~of~_width_~column~position.
$ # les points systématiques à la fin de ligne sont reproduits
$ # ...donc lui signaler qu'il n'y a pas de délimiteur de fin
$ cat wrap.txt | par -w 60 -s 0 | tr ' ' '~'
The~_fold_~utility~is~a~filter~that~shall~fold~lines~from
its~input~files,~but~breaking~the~lines~to~have~a~maximum
of~_width_~column~position~(or~bytes,~if~the~*-b*~option~is
specified)~Use~*-s*~option~to~split~at~latest~space~before
maximum~_width_.
The~_fmt_~utility~is~a~filter~that~shall~reformat~each
paragraph~from~its~input~files,~but~break~the~lines~to~have
a~maximum~of~_width_~column~position.
$ # ...ou ajouter le point dans la liste des caractères normaux
$ cat wrap.txt | par -w 60 -B+. | tr ' ' '~'
The~_fold_~utility~is~a~filter~that~shall~fold~lines~from
its~input~files,~but~breaking~the~lines~to~have~a~maximum
of~_width_~column~position~(or~bytes,~if~the~*-b*~option~is
specified)~Use~*-s*~option~to~split~at~latest~space~before
maximum~_width_.
The~_fmt_~utility~is~a~filter~that~shall~reformat~each
paragraph~from~its~input~files,~but~break~the~lines~to~have
a~maximum~of~_width_~column~position.
$ # essayons d'avoir des lignes plus équilibrées, comme fmt...
$ cat wrap.txt | par -w60fs0 | tr ' ' '~'
The~_fold_~utility~is~a~filter~that~shall~fold~lines~from
its~input~files,~but~breaking~the~lines~to~have~a~maximum
of~_width_~column~position~(or~bytes,~if~the~*-b*~option~is
specified)~Use~*-s*~option~to~split~at~latest~space~before
maximum~_width_.
The~_fmt_~utility~is~a~filter~that~shall~reformat~each
paragraph~from~its~input~files,~but~break~the~lines~to
have~a~maximum~of~_width_~column~position.
$ # on peut carrément vouloir justifier les lignes...
$ cat wrap.txt | par -w60j | tr ' ' '~'
The~_fold_~utility~~is~a~filter~that~shall~~fold~lines~from.
its~input~files,~~but~breaking~the~lines~to~~have~a~maximum.
of~_width_~column~position~(or~bytes,~if~the~*-b*~option~is.
specified)~Use~*-s*~option~to~~split~at~latest~space~before.
maximum~_width_~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.
The~~_fmt_~utility~~is~~a~filter~~that~~shall~reformat~~each
paragraph~from~its~input~files,~~but~break~the~lines~to have
a~maximum~of~_width_~column~position.
$ # ...sans oublier de combiner le reste...
$ cat wrap.txt | par 60js0 | tr ' ' '~'
The~_fold_~utility~~is~a~filter~~that~shall~~fold~lines~from
its~input~files,~but~breaking~the~lines~to~have~a~maximum~of
_width_~column~~position~(or~~bytes,~if~the~~*-b*~~option~is
specified).~Use~*-s*~option~to~~split~at~latest~space~before
maximum~_width_.
The~~_fmt_~utility~~is~~a~filter~~that~~shall~reformat~~each
paragraph~from~its~input~files,~~but~break~the~lines~to have
a~maximum~of~_width_~column~position.
par
est aussi bien pour reformater des mails (format texte) ! Mais dans beaucoup de cas, il est assez compliqué à mon avis… À réserver donc aux rares cas où les autres ne satisfont pas.
$ # comme "fmt" mais les tabulations deviennent un espace...
$ cat taquets.txt | par -w 60
Fournitures Quantité Prix Crayons 12 15,76 Feuilles A4 1000
137,5 Correcteurs 10 18
$ # je ne suis pas parvenu à utiliser cette option
$ cat taquets.txt | par -w 60 -T 8
Fournitures Quantité Prix 12 5,76 A4 137,5 urs 10 8
$ # on peut au moins arriver à préserver les sauts de ligne...
$ par -w 60 -d < taquets.txt
Fournitures Quantité Prix
Crayons 12 15,76
Feuilles A4 1000 137,5
Correcteurs 10 18
$ # on peut demander de préserver les 23 premiers caractères...
$ expand -t 13,23 taquets.txt | par w60p23
Fournitures Quantité Prix
Crayons 12 15,76
Feuilles A4 1000 137,5
Correcteurs 10 18
Il a le mérite d'exister et d'être présent dans de plus en plus de distributions, sinon se porte facilement. À surveiller.
balle au centre et égalisation
Pour le centrage, il faut hélas recourir à "printf
" (ou "perl
" ou "sed
" ou autre) puis boucler sur toutes les lignes (ce qui peut se faire avec "awk
" qui est mon filtre favori dans ce cas ci…)
Nota : Vim a la commande ":center
" qui fait bien cela ; ainsi que ":right
" et ":left
", et tous les trois peuvent s'abréger à 2 caractères et on peut indiquer ensuite la largeur voulue (80 sinon).
Concernant la pleine justification, c'est un processus plus couteux qui se fait en répartissant astucieusement des espaces entre les mots (chose que savent faire Emacs et Nano ; et sinon ça se scripte dans un langage un peu avancé.) Ce procédé est bien connu, mais le résultat n'est pas toujours des plus heureux et se retrouve facilement avec des fleuves qui sillonnent le texte…
Idéalement, pour faire de la justification, il faut certes ajouter des blancs ci et là, mais arriver à limiter le nombre de ceux-ci et jouer également avec la césure des mots (ou « hyphenation » en anglais, qui se fait avec le trait d'union…) dont les règles varient selon les langues. On peut par exemple s'appuyer sur un « dictionnaire » dédié. C'est d'ailleurs l'approche des logiciels pionniers : Justify, puis TJ-1 et enfin TJ-2 en 1963, pour la machine PDP-1, ne traitent que l'anglais en utilisant un dictionnaire de césures… On le considère parfois comme le premier « processeur de texte » (ou « traitement de texte », buzzword du NY Times en 1971) en tant que machine dédiée (comme Dorsey) et non logiciel (comme Vydec)…
impressions standards
Voyons maintenant une dernière commande, apparue avec la première version officielle distribuée aux universités vers 1971 mais déjà utilisé au Bell Labs (en fait il nait en août 1969 mais son état civile est enregistré pour le 1er janvier de 1970 ha-ha …et dès le début le système est utilisé en interne entre par les secrétaires) Du nom de "pr
", elle prépare la « mise en page » pour l'impression papier… (est-ce que son nom est l'abréviation de « print » ou le sigle de « print request » est une des questions qui me turlupinent…)
Cette mise en page va consister surtout en la « pagination » (i.e. le découpage en « page ») comme le font les éditeurs plein écran ("vi
", "emacs
", "nano
", etc.) et visualiseurs de texte ("pager
", "pg
", "more
", "less
", "most
", etc.) Sauf qu'eux raisonnent par rapport à l'écran tandis que "pr
" raisonne par rapport à la page papier.
Tout comme l'écran du terminal ou de la console a un certain nombre de lignes × colonnes (par exemple 25×80) la page aussi. Ces dimensions (longueur × largeur de papier, par défaut 66×72) peuvent être spécifiées respectivement avec les options "-l
" (pour « page length ») et "-w
" (pour « page Width »).
Mais pour le papier, il y aussi la notion de « marge interne » (nulle par défaut, et à ne pas confondre avec la marge technique ou le débord qui s'ajoute), qui est retiré de la largeur, avec l'option "-o
" (pour « line Offset »)
Comme il s'agit de document à imprimer, "pr
" rajoute un en-tête de 5 lignes (prises dans la longueur totale…) et y place au milieu (troisième ligne) : la date de génération (à gauche), le numéro de page (à droite), et le nom du fichier (au milieu) ou titre du document… Il prend également 5 lignes pour le pied de page…
Ce n'est certainement pas parfait, mais moins prise de tête àmha.
$ # noter la belle entête faite toute seule
$ expand -t 13,23 taquets.txt | pr -w 50 | head
2017-10-30 13:27 Page 1
Fournitures Quantité Prix
Crayons 12 15,76
Feuilles A4 1000 137,5
Correcteurs 10 18
$ # ajouter un décalage de 2 espaces à gauche
$ expand -t 13,23 taquets.txt | pr -o 2 -w 50 | head
2017-10-30 13:33 Page 1
Fournitures Quantité Prix
Crayons 12 15,76
Feuilles A4 1000 137,5
Correcteurs 10 18
$ # pr mange 5 lignes en haut et autant en bas
$ expand -t 13,23 taquets.txt | pr -l 12 -w 50 | cat -n
1
2
3 2017-10-30 13:43 Page 1
4
5
6 Fournitures Quantité Prix
7 Crayons 12 15,76
8 Feuilles A4 1000 137,5
9
10
11
12
13
14
15
15
16 2017-10-30 13:43 Page 2
17
18
19 Correcteurs 10 18
20
21
22
23
24
$ # pr mange 10 lignes et pagine automatiquement
$ expand -t 13,23 taquets.txt | pr -l 13 -w 50 | cat -n
1
2
3 2017-10-30 13:43 Page 1
4
5
6 Fournitures Quantité Prix
7 Crayons 12 15,76
8 Feuilles A4 1000 137,5
9
10
11
12
13
14
15
15
16 2017-10-30 13:43 Page 2
17
18
19 Correcteurs 10 18
20
21
22
23
24
25
26
Le pied de page n'est pas utilisé et je trouve que c'est un gâchis ces cinq lignes. Mais c'est très utile pour les sociétés, qui impriment sur du papier avec un certain nombre de mentions qui sont plus ou moins obligatoires dans cette zone… On en rencontre qui utilisent l'en-tête du document pour des informations autre que leur logo et leur nom.
L'option "-t
" permet de désactiver les en-têtes et pieds de page ajoutés automatiquement, comme souvent requis sur les sorties papier. Noter que ceux-ci sont automatiquement désactivés quand le nombre de lignes n'est pas supérieur à dix !
Question : Est-ce que les commandes déjà évoquées sont utiles ici ?
Réponse : Oui, "-w
" positionne le numéro de page sans adapter le texte, et la largeur minimale utilisée est de 24 (en dessous pas pris en compte.)
L'implémentation GNU offre en plus l'option "-W
" qui permet d'appliquer un effet « truncate »… Cette implémentation offre également l'option "-T
" qui fait comme "-t
" mais envoie le code de saut saut de page au lieu de plusieurs saut de ligne : c'est normalement plus rapide car l'imprimante éjecte la page au lieu de la dérouler ligne par ligne. Il est à noter que la norme propose "-F
" et "-f
" pour ce faire (donc "-T
" a pour forme portable "-tF
" simplement.)
$ # plus d'entête et pied de page avec "`-t`"
$ expand -t 13,23 taquets.txt | pr -t | head
Fournitures Quantité Prix
Crayons 12 15,76
Feuilles A4 1000 137,5
Correcteurs 10 18
$ # plus d'entête et pied de page quand l<=10
$ expand -t 13,23 taquets.txt | pr -l 5
Fournitures Quantité Prix
Crayons 12 15,76
Feuilles A4 1000 137,5
Correcteurs 10 18
$ # "-w" ne tronque pas (utile ici)
$ expand -t 13,23 taquets.txt | pr -w 26 | head
2017-10-30 13:27 Page 1
Fournitures Quantité Prix
Crayons 12 15,76
Feuilles A4 1000 137,5
Correcteurs 10 18
$ # "-w" ne s'applique pas au text
$ echo "ceci est une ligne de 30 car." | pr -l 2 -w 20
ceci est une ligne de 30 car.
$ echo "ceci est une ligne de 30 car." | pr -l 2 -W 20
ceci est une ligne d
$ echo "ceci est une ligne de 30 car." | fold -s -w 20 | pr -l 2 -w 20
ceci est une ligne
de 30 car.
$ # "-w" utilise une valeur minimale de 24...
$ # (juste ce qu'il faut pour l'horodatage et la pagination)
$ expand -t 13,23 taquets.txt | pr -w 10 | head
2017-10-30 13:27 Page 1
Fournitures Quantité Prix
Crayons 12 15,76
Feuilles A4 1000 137,5
Correcteurs 10 18
$ # "-F" si on ne veut pas enregistrer dans un fichier
$ # mais envoyer directement à l'imprimante
$ expand -t 13,23 taquets.txt | pr -w 10 | wc
66 17 196
$ expand -t 13,23 taquets.txt | pr -w 10 -F | wc
9 17 140
On ne le voit pas dans les précédents exemples, mais dans l'entête il y a le nom du fichier centré. Du moins, par défaut, car on peut mettre un texte personnalisé en utilisant l'option "-h
" (pour « personalized Header »)
L'implémentation GNU propose en plus l'option "-D
" pour personnaliser le champ de date par son propre texte… (on peut bien entendu utiliser "$(date +...)
" pour changer le format de la date si on le désire.)
$ # préparons notre fichier...
$ expand -t 13,23 taquet.txt > formated1
$ # faisons notre impression
$ pr -w 40 -l 15 formated1 | head | cat -n
1
2
3 2017-10-30 13:45 formated1 Page 1
4
5
6 Fournitures Quantité Prix
7 Crayons 12 15,76
8 Feuilles A4 1000 137,5
9 Correcteurs 10 18
10
$ # changeons le titre tant qu'à faire
$ pr -w 40 -l 15 -h "liste d'achats" formated1 | head | cat -n
1
2
3 2017-10-30 13:47 liste d'achats Page 1
4
5
6 Fournitures Quantité Prix
7 Crayons 12 15,76
8 Feuilles A4 1000 137,5
9 Correcteurs 10 18
10
$ # vérifions pour la largeur minimale...
$ pr -w 30 -l 15 -h "liste d'achats" formated1 | head | cat -n
1
2
3 2017-10-30 13:47 liste d'achats Page 1
4
5
6 Fournitures Quantité Prix
7 Crayons 12 15,76
8 Feuilles A4 1000 137,5
9 Correcteurs 10 18
10
$ # changeons le champ de date aussi...
$ pr -w 20 -l 15 -h "liste d'achats" -D "now" formated1 | head | cat -n
1
2
3 now liste d'achats Page 1
4
5
6 Fournitures Quantité Prix
7 Crayons 12 15,76
8 Feuilles A4 1000 137,5
9 Correcteurs 10 18
10
$ # gardons juste la date
$ # (obligatoire sinon utiliser cat au lieu de pr)
$ pr -w 20 -l 15 -h "" -D "" formated1 | head | cat -n
1
2
3 Page 1
4
5
6 Fournitures Quantité Prix
7 Crayons 12 15,76
8 Feuilles A4 1000 137,5
9 Correcteurs 10 18
10
On voit au passage, que la largeur minimale n'est pas 24 mais (10+1+5)+1+N+1+(4+1+1) = 17+N+7
avec :
- champ de gauche :
10+1+5
est le nombre de caractères pour la date (10
) et l'horaire (5
) conformément aux normes - champ de droite :
4+1+1
est le nombre de caractères pour le numéro de page (<10
sinon augmenter en conséquence) - champ du milieu :
N
est le nombre de caractères composant le titre
On n'a certes pas le choix pour l'emplacement des différents éléments, mais cela correspond bien aux pratiques en vigueur que l'on bafoue avec les traitement de texte en s'improvisant typographe.
C'est beau n'est-ce pas ? Mais cette commande peut faire plus !
Dans notre exemple, il peut être intéressant de numéroter les lignes du tableau, et il sait le faire avec l'option "-n
" ; pas besoin de passer par "nl
" au préalable (mais ce filtre a ses petits plus…)
Par défaut, elle utilise une colonne de 5 caractères, mais on peut ajuster cela en accolant un entier à l'option.
Le contenu est séparé du numéro par une tabulation, ce qui le fait commencer en huitième colonne. On peut aussi changer ce caractère par un autre accolé à l'option.
$ # numéroter les lignes du tableau
$ pr -n -l 5 formated1
1 Fournitures Quantité Prix
2 Crayons 12 15,76
3 Feuilles A4 1000 137,5
4 Correcteurs 10 18
$ # numéroter sur 3 colonnes
$ pr -n3 -l 5 formated1
1 Fournitures Quantité Prix
2 Crayons 12 15,76
3 Feuilles A4 1000 137,5
4 Correcteurs 10 18
$ # il faut acoller l'argument...
$ pr -n 3 -l 5 formated1
pr: 3: No such file or directory
1 Fournitures Quantité Prix
2 Crayons 12 15,76
3 Feuilles A4 1000 137,5
4 Correcteurs 10 18
$ # utiliser le point au lieu de la tabulation
$ pr -n. -l 5 formated1
1.Fournitures Quantité Prix
2.Crayons 12 15,76
3.Feuilles A4 1000 137,5
4.Correcteurs 10 18
$ # utiliser l'espace au lieu de la tabulation
$ pr -n\ -l 5 formated1
1 Fournitures Quantité Prix
2 Crayons 12 15,76
3 Feuilles A4 1000 137,5
4 Correcteurs 10 18
$ # toujours le point et sur deux colonnes
$ pr -n.2 -t -l 5 formated1
1.Fournitures Quantité Prix
2.Crayons 12 15,76
3.Feuilles A4 1000 137,5
4.Correcteurs 10 18
$ # l'ordre importe ici...
$ pr -n3. -t -l 5 formated1
pr: `-n' extra characters or invalid number in argument: `3.'
Try `pr --help' for more information
Il peut, de la même façon convertir des espaces successifs en un seul caractère (par défaut la tabulation, comme "unexpand
"), avec l'option "-i
" et son corolaire avec (par défaut la tabulation en espaces, comme "expand
") avec l'option "-e
". Ces deux options s'utilisent comme "-n
" : il y a des paramètres par défaut (espace/tabulation et huit) mais on peut indiquer son caractère et son nombre (de blanc ou espacement des taquets.)
$ # quand il y a plus de 2 espaces remplacer par 1 tab
$ # taquet en position muliple de 8 (8, 16, 24, 32, etc.)
$ echo "Quatre Trois Deux Un Zero" | pr -l 1 -i | cat -t
Quatre^I Trois^I Deux^IUn Zero
$ # quand il y a plus de 2 espaces remplacer par 1 tab
$ # taquet en position muliple de 2 (2, 4, 6, 8, 10, 12, etc.)
$ echo "Quatre Trois Deux Un Zero" | pr -l 1 -i2 | cat -t
Quatre^I^ITrois^I^IDeux^IUn Zero
$ # quand il y a plus de 2 espaces remplacer par 1 tab
$ # taquet en position muliple de 12 (12, 24, 32, 64, etc.)
$ echo "Quatre Trois Deux Un Zero" | pr -l 1 -i2 | cat -t
Quatre Trois Deux^IUn Zero
$ # quand il y a plus de 2 espaces remplacer par 1 point
$ # taquet en position muliple de 8 (8, 16, 24, 32, etc.)
$ echo "Quatre Trois Deux Un Zero" | pr -l 1 -i. | cat -t
Quatre. Trois. Deux.Un Zero
$ # quand il y a plus de 2 espaces remplacer par 1 point
$ # taquet en position muliple de 6 (6, 12, 18, 24, etc.)
$ echo "Quatre Trois Deux Un Zero" | pr -l 1 -i.6 | cat -t
Quatre Trois.Deux.Un Zero
$ # chez moi, Ctrl+V puis Tab, sinon utiliser un fichier
$ echo "tab tabtab stop" | cat -t
tab^Itabtab^I^Istop
$ # remplacer les tabulations par 4 espaces
$ # en fait on positionne aux taquets multiples de 8...
$ echo "tab tabtab stop" | pr -l 1 -e | tr ' ' '~'
tab~~~~~tabtab~~~~~~~~stop
$ # remplacer les tabulations par 3 espaces
$ # en fait on positionne aux taquets multiples de 3...
$ echo "tab tabtab stop" | pr -l 1 -e3 | tr ' ' '~'
tab~~~tabtab~~~~~~stop
$ # remplacer les underscores par 3 espaces
$ # en fait on positionne aux taquets multiples de 3...
$ echo "tab_tabtab__stop" | pr -l 1 -e_3 | tr ' ' '~'
tab~~~tabtab~~~~~~stop
$ # remplacer les underscores par 4 espaces
$ # en fait on positionne aux taquets multiples de 8...
$ echo "tab_tabtab__stop" | pr -l 1 -e_ | tr ' ' '~'
tab~~~~~tabtab~~~~~~~~stop
Il y a peu de cas où cela sert vraiment, d'après mon expérience, mais la possibilité existe ; et je n'ai pas pu retrouver la cause historique.
impressions en rang et/ou partielles
Une des possibilités incontournables est le multi colonage ! Les lignes du texte qui est passé à la commande, sont divisées en autant de colonnes que demandées par l'option numérique (qui est donc "-1
" par défaut, et on utilisera "-2
" pour faire une double colonne et "-3
" pour une triple, etc.), puis ces colonnes sont juxtaposées horizontalement (comme avec "paste
" ou "rs
" par exemple.)
Le séparateur entre colonnes est l'espace, que l'on peut changer avec l'option "-s
" auquel on accole le caractère voulu (mais contrairement au "-d
" de "paste
" on ne peut pas alterner plusieurs séparateurs)
L'implémentation GNU propose l'option "-S
" qui ici ne change rien… (tout comme "-W
" ne change rien dans le cas présent) on y reviendra.
$ # GNU/Linux: quelle est la plus longue ligne?
$ # et on voit qu'une largeur de 30 convient
$ wc -L formated1
28 formated1
$ # cat formated1
$ pr -l 4 -w 30 formated1
Fournitures Quantité Prix
Crayons 12 15,76
Feuilles A4 1000 137,5
Correcteurs 10 18
$ # sur 2 colonnes de 30/2
$ # lignes "Fourn..." et "Crayo..." d'une part
$ # lignes "Feuil..." et "Corre..." d'autre part
$ pr -2 -l 4 -w 30 formated1
Fournitures Q Feuilles A4 1
Crayons 1 Correcteurs 1
$ # sur 2 colonnes de 60/2
$ # lignes "Fourn..." et "Crayo..." d'une part
$ # lignes "Feuil..." et "Corre..." d'autre part
$ pr -l 4 -w 60 -2 formated1
Fournitures Quantité Prix Feuilles A4 1000 137,5
Crayons 12 5,76 Correcteurs 10 18
$ # sur 2 colonnes de 60/2
$ # avec le point au lieu d'espace
$ pr -l 4 -2 -w 60 -s. formated1
Fournitures Quantité Prix .Feuilles A4 1000 137,5
Crayons 12 5,76 .Correcteurs 10 18
$ # attention à bien le coller...
$ pr -l 4 -2 -w 60 -s . formated1
pr: .: Is a directory
$ # sur 2 colonnes de 30/2
$ # avec rien au lieu d'espace
$ pr -l 4 -2 -w 30 -s formated1
Fournitures QuFeuilles A4 1
Crayons 12Correcteurs 1
$ # sur 2 colonnes de 30/2
$ # avec point au lieu d'espace
$ # et en numérotant (on voit la répartition des lignes)
$ pr -l 4 -2 -w 30 -s. -n formated1
1 Fourni. 3 Feuill
2 Crayon. 4 12Corr
J'avoue que cet exemple n'est pas le mieux, mais ça montre toute la difficulté de la chose et la nécessité d'avoir une commande dédiée pour « mettre en page » avant d'imprimer. Prenons un autre exemple, qui va nous permettre de mettre en évidence l'option "-a
" (change le sens de colonage) qui peut être utile dans certains rares cas :
$ # préparons notre fichier...
$ # pour être à 28 comme formated1
$ fold -s -w 28 wrap.txt > formated0
$ # imprimons en 2 colonnes de 60/2
$ # remplissage normal, en N par page: P1C1, P1C2, P2C1, P2C2
$ pr -2 -w 60 -l 15 -f formated0 | cat -n
1
2
3 2017-11-01 13:05 formated0 Page 1
4
5
6 The _fold_ utility is a column position (or bytes.
7 filter that shall fold if the *-b* option is
8 lines from its input files, espicified).
9 but breaking the lines to Use *-* option to split at
10 have a maximum of _width_ latest space before maximum
11 ^L
12
13 2017-11-01 13:05 formated0 Page 2
14
15
16 _width_. input files, but break the
17 lines to have a maximum of
18 The _fmt_ utility is a _width_ column position.
19 filter that shall reformat
20 each paragraph from its
21 ^L
$ # imprimons en 2 colonnes de 60/2
$ # remplissage alternatif, en Z par lignes successives...
$ pr -2 -w 60 -l 15 -f formated0 | cat -n
1
2
3 2017-11-01 13:05 formated0 Page 1
4
5
6 The _fold_ utility is a filter that shall fold
7 lines from its input files, but breaking the lines to
8 have a maximum of _width_ column position (or bytes,
9 if the *-b* option is specified).
10 Use *-s* option to split at latest space before maximum
11 ^L
12
13 2017-11-01 13:05 formated0 Page 2
14
15
16 _width_.
17 The _fmt_ utility is a filter that shall reformat
18 each paragraph from its input files, but break the
29 lines to have a maximum of _width_ column position.
20
21 ^L
$ # imprimons en 2 colonnes de 60/2
$ # remplissage alternatif, en Z par lignes successives...
$ pr -2 -w 60 -l 12 -f formated1 | cat -n
1
2
3 2017-11-01 13:09 formated1 Page 1
4
5
6 Fournitures Quantité Prix Crayons 12 15,75
7 Feuilles A4 10000 137,5 Correcteurs 10 18
8 ^L
Je n'ai eu à utiliser ce truc qu'une seule fois, pour imprimer un index de noms (à raison d'un par ligne dans le fichier) triés (par "sort
")
Il y a aussi l'option "-d
", sans paramètre, que j'invite à tester.
Il y une autre option un peu étrange qu'il peut être utile de connaître : "+" qui permet de commencer à partir d'une page donnée… L'implémentation GNU permet permet en plus d'indiquer une s'arrêter à une page donnée…
Avec cette option, l'implémentation GNU propose une option "-N
" pour réinitialiser le compteur quand on utilise l'option "-n
" et c'est pas mal.
$ # par défaut, toutes les 4 pages
$ # (de la première à la dernière donc)
$ pr -w 30 -l 15 -f formated0 | cat -n
1
2
3 2017-10-30 13:54 formated0 Page 1
4
5
6 The _fold_ utility is a
7 filter that shall fold
8 lines from its input files,
9 but breaking the lines to
10 have a maximum of _width_
11 ^L
12
13 2017-10-30 13:54 formated0 Page 2
14
15
16 column position (or bytes,
17 if the *-b* option is
18 specified).
19 Use *-s* option to split at
20 latest space before maximum
21 ^L
22
23 2017-10-30 13:54 formated0 Page 3
24
25
26 _width_.
27
28 The _fmt_ utility is a
29 filter that shall reformat
30 each paragraph from its
31 ^L
32
33 2017-10-30 13:54 formated0 Page 4
34
35
36 input files, but break the
37 lines to have a maximum of
38 _width column position.
39
40
41 ^L
$ # possible seulement à partir de la 3ème...
$ # (de la 3ème à la dernière page donc)
$ pr -w 30 -l 15 -f +3 formated0 | cat -n
1
2
3 2017-10-30 13:54 formated0 Page 3
4
5
6 _width_.
7
8 The _fmt_ utility is a
9 filter that shall reformat
10 each paragraph from its
11 ^L
12
13 2017-10-30 13:54 formated0 Page 4
14
15
16 input files, but break the
17 lines to have a maximum of
18 _width column position.
19
20
21 ^L
$ # il n'y a pas de 5ème page...!
$ # (j'utilise l'astuce avec 999
$ # pour avoir le nombre de pages)
$ pr -w 40 -l 17 +5 formated0
pr: starting page number 5 exceeds page count 4
$ # GNU pr permet de la 2ème à la 3ème...
$ pr -w 30 -l 15 -f +2:3 formated0 | cat -n
1
2
3 2017-10-30 13:54 formated0 Page 2
4
5
6 column position (or bytes,
7 if the *-b* option is
8 specified).
9 Use *-s* option to split at
10 latest space before maximum
11 ^L
12
13 2017-10-30 13:54 formated0 Page 3
14
15
16 _width_.
17
18 The _fmt_ utility is a
19 filter that shall reformat
20 each paragraph from its
21 ^L
$ # GNU pr permet juste la 3ème...
$ pr -w 30 -l 15 -f +3:3 formated0 | cat -n
1
2
3 2017-10-30 13:54 formated0 Page 3
4
5
6 _width_.
7
8 The _fmt_ utility is a
9 filter that shall reformat
10 each paragraph from its
11 ^L
$ # pour juste les 2 premières bien indiquer 1:2
$ pr -w 30 -l 15 -f +:2 formated0
pr: invalid + argument `:2'
$ # quand on numérote la page 4
$ pr -w 30 -l 15 -f +4 -n formated0 | cat -n
1
2
3 2017-10-30 13:54 formated0 Page 4
4
5
6 16 input files, but break the
7 17 lines to have a maximum of
8 18 _width column position.
9 19
10 20
11 ^L
$ # GNU nous permet de dire qu'on commence
$ # à la 4ème ligne (du second paragraphe)
$ pr -w 30 -l 15 -f +4 -n -N 4 formated0 | cat -n
1
2
3 2017-10-30 13:54 formated0 Page 4
4
5
6 4 input files, but break the
7 5 lines to have a maximum of
8 6 _width column position.
9 7
10 8
11 ^L
On remarque au passage (première ligne du texte ou sixième imprimée, à la troisième page) que "pr
" ne connait pas la notion de paragraphes, ou en tout cas ne gère pas le difficile problème de veuvage et d'orphelinage des lignes (lignes creuses/isolées/désolidarisées.)
impressions de livrets
Tout comme "fold
" et "fmt
", "pr
" peut prendre plusieurs fichiers en entrée. Sans l'utilisation de l'option "-h
" chaque fichier se voit indiqué car les fichiers sont parcourus séquentiellement de sorte que chacun commence sur une nouvelle page. Mieux, les fichiers suivants commencent toujours sur une page impaire (c'est pratique quand chaque fichier représente un chapitre de votre manuscrit par exemple) ce qui est top ! Par contre, il recommence la pagination (ce qui est pratique si on imprime des documents séparés mais pas génial si on imprime un livre éclaté en plusieurs fichiers) et peut produire des pages vides (l'algorithme est relativement simple et correspond à la plupart des cas courants.) En tout cas, tout cela est fait automatiquement…
$ # préparons notre fichier...
$ fold -w 40 -s wrap.txt > formated2
$ # faisons notre impression 1 colonne
$ # c'est séquentiel, normal.
$ pr -w 40 -l 17 formated2 formated1 | cat -n
1
2
3 2017-10-30 13:45 formated2 Page 1
4
5
6 The _fold_ utility is a filter that
7 shall fold lines from its input files,
8 but breaking the lines to have a
9 maximum of~ width ~column position (or
10 bytes, if the *-b* option is specified)
11 Use *-s* option to split at latest
12 space before maximum _width_.
13
14
15
16
17
18
19
20 2017-10-30 13:45 formated2 Page 2
21
22
23
24 The _fmt_ utility is a filter that
25 shall reformat each paragraph from its
26 input files, but break the lines to
27 have a maximum of _width_ column
28 position.
29
30
31
32
33
34
35
36
37 2017-10-30 13:45 formated2 Page 3
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 2017-10-30 13:45 formated1 Page 1
55
56
57 Fournitures Quantité Prix
58 Crayons 12 15,76
59 Feuilles A4 1000 137,5
60 Correcteurs 10 18
61
62
63
64
65
66
$ pr -w 40 -l 17 -f formated2 formated1 | cat -n
1
2
3 2017-10-30 13:47 formated2 Page 1
4
5
6 The _fold_ utility is a filter that
7 shall fold lines from its input files,
8 but breaking the lines to have a
9 maximum of~ width ~column position (or
10 bytes, if the *-b* option is specified)
11 Use *-s* option to split at latest
12 space before maximum _width_.
13 ^L
14
15 2017-10-30 13:47 formated2 Page 2
16
17
18
19 The _fmt_ utility is a filter that
20 shall reformat each paragraph from its
21 input files, but break the lines to
22 have a maximum of _width_ column
23 position.
24
25 ^L
26
27 2017-10-30 13:47 formated2 Page 3
28
29
30
31 ^L
32
33 2017-10-30 13:47 formated1 Page 1
34
35
36 Fournitures Quantité Prix
37 Crayons 12 15,76
38 Feuilles A4 1000 137,5
39 Correcteurs 10 18
40 ^L
$ # il n'y a pas de 4ème page...
$ pr -w 40 -l 17 +4 formated1 formated2
pr: starting page number 4 exceeds page count 1
pr: starting page number 4 exceeds page count 3
$ # faisons notre impression 2 colonnes
$ # c'est toujours séquentiel.
$ pr -w 60 -l 17 -2 formated0 formated1 | cat -n
Il y a cependant une option sympathique quand on imprime plusieurs fichiers : "-m
" qui va faire autant de colonnes que de fichiers, et c'est incompatible avec l'option de colonage.
$ # mettre côte à côte les 2 fichiers
$ pr -w 60 -l 15 -f -m formated0 formated1 | head
1
2
3 2017-10-30 13:54 Page 1
4
5
6 The _fold_ utility is a Fournitures Quantité Prix
7 filter that shall fold Crayons 12 15,76
8 lines from its input files, Feuilles A4 10000 137,5
9 but breaking the lines to Correcteurs 10 18
10 have a maximum of _width_
$ # mettre côte à côte les 2 fichiers
$ pr -w 60 -l 15 -f -m formated0 formated2 | cat -n
1
2
3 2017-10-30 13:55 Page 1
4
5
6 The _fold_ utility is a The _fold_ utility is a filte
7 filter that shall fold shall fold lines from its inp
8 lines from its input files, but breaking the lines to hav
9 but breaking the lines to maximum of _width_ column pos
10 have a maximum of _width_ bytes, if the *-b* option is
11 ^L
12
13 2017-10-30 13:55 Page 2
14
15
16 column position (or bytes, Use *-s* option to split at l
17 if the *-b* option is space before maximum _width_.
18 specified).
19 Use *-s* option to split at The _fmt_ utility is a filter
20 latest space before maximum shall reformat each paragraph
21 ^L
22
23 2017-10-30 13:55 Page 3
24
25
26 _width_. input files, but break the li
27 have a maximum of _width_ col
28 The _fmt_ utility is a position.
29 filter that shall reformat
30 each paragraph from its
31 ^L
32
33 2017-10-30 13:55 Page 4
34
35
36 input files, but break the
37 lines to have a maximum of
38 _width column position.
39
40
41 ^L
$ # mettre côte à côte les 3 fichiers
$ pr -w 70 -l 15 -m formated0 formated1 formated2 | head
1
2
3 2017-10-30 13:54 Page 1
4
5
6 The _fold_ utility is Fournitures Quantité P The _fold_ utility is
7 filter that shall fold Crayons 12 shall fold lines from
8 lines from its input f Feuilles A4 10000 but breaking the lines
9 but breaking the lines Correcteurs 10 maximum of _width_ col
10 have a maximum of _wid bytes, if the *-b* opt
$ # ce n'est pas compatible avec le colonnage forcé...
$ pr -w 70 -l 15 -m -4 formated0 formated1 formated2
pr: cannot specify number of columns when printing in parallel
$ # ...pareil pour le format alternatif (Z au lieu de W)...
$ pr -w 70 -l 15 -m -a formated0 formated1 formated2
pr: cannot specify printing accross and printing in parallel
$ # ...mais le changement de séparateur fonctionne
$ pr -w 70 -l 15 -m -s\| formated? | head
1
2
3 2017-10-30 13:56 Page 1
4
5
6 The _fold_ utility is |Fournitures Quantité P |The _fold_ utility is
7 filter that shall fold|Crayons 12 |shall fold lines from
8 lines from its input f|Feuilles A4 10000 |but breaking the lines
9 but breaking the lines|Correcteurs 10 |maximum of _width_ col
10 have a maximum of _wid| |bytes, if the *-b* opt
C'est une variante intéressante de "diff -y
"…
Noter qu'aucun nom de fichier n'est privilégié et qu'il n'y a pas de « mix » particulier. Mais on peut utiliser "-h
" pour ajouter son propre titre.
L'implémentation GNU propose aussi une option "-J
" qui avec annule la troncature des lignes qui dépassent la largeur spécifiée par "-w
".
chasse fixe
L'utilitaire "pr
" permet diverses mises en pages plus ou moins avancées pour une impression brute/directe (i.e. sans passer par un pilote, l'imprimante pouvant gérer du pur texte et étant dans le mode qui va bien, on y reviendra.) Elle a pléthore d'options pour satisfaire la plupart des caprices. Elles n'ont pas toutes été évoquées ici, et j'invite à parcourir le « man page » associé dans la distribution qu'on utilise.
OpenBSD/FreeBSD | GNU | AIX | POSIX | |
---|---|---|---|---|
+Ⅰ |
+Ⅰ |
+Ⅰ |
+Ⅰ |
begin output at page number Ⅰ
|
+Ⅰ:Ⅼ |
output pages from number Ⅰ to Ⅼ
|
|||
-Ⅰ |
-Ⅰ |
-Ⅰ |
-Ⅰ |
produce Ⅰ columns wide |
-a |
-a |
-a |
-a |
fill columns Across the page in a round robin order |
-c |
show Control chars | |||
-d |
-d |
-d |
-d |
produce Double spaced output |
-D Ⅹ |
use Ⅹ as header Date format |
|||
-eⅭⅠ |
-eⅭⅠ |
-eⅭⅠ |
-eⅭⅠ |
Expand each input Ⅽ (default tab) to n×Ⅰ+1 (default 8) |
-F |
-F |
-F |
-F |
use Form feed char. for new pages, not multiple newline |
-f |
-f |
-f |
-f |
same as -F plus pause on stdout |
-h _ |
-h Ⅹ |
-h Ⅹ |
-h Ⅹ |
use Ⅹ instead of filename as centered Header |
-iⅭⅠ |
-iⅭⅠ |
-iⅭⅠ |
-iⅭⅠ |
replace multiple blanks by Ⅽ char. (default tab) at n×Ⅰ+1 (default 8) in output |
-J |
Join lines, i.e. merge full lines and turn off -W truncation |
|||
-l Ⅰ |
-l Ⅰ |
-l Ⅰ |
-l Ⅰ |
set page Length to Ⅰ lines |
-m |
-m |
-m |
-m |
Merge contents of multiple files (lines side by side) |
-nⅭⅠ |
-nⅭⅠ |
-nⅭⅠ |
-nⅭⅠ |
print line Number separated by Ⅽ char. (default tab) using Ⅰ width column (default 5) |
-N Ⅰ |
first line Number printed with +Ⅰ
|
|||
-o Ⅰ |
-o Ⅰ |
-o Ⅰ |
-o Ⅰ |
precede each line of output with Ⅰ space as Offset |
-p |
-p |
Pause before each page on TTY | ||
-r |
-r |
-r |
-r |
no diagnostic Reports on file open failure |
-sⅭ |
-sⅭ |
-sⅭ |
-sⅭ |
Separate text columns with Ⅽ char. (default tab) instead of spaces, turn off truncation when no -s
|
-SⅭ |
Separate text columns with Ⅽ char, (default space with -J or tab), but no effect on columns |
|||
-t |
-t |
-t |
-t |
omit five+five lines of header+Trailers on each page |
-T |
omit headers+Trailers and pagination by form feed in input | |||
-w Ⅰ |
-w Ⅰ |
-w Ⅰ |
-w Ⅰ |
set the Width of the line to Ⅰ instead of 72 (when not -s ) or 512 (when -s ) |
-W Ⅰ |
set page Width to Ⅰ instead of 72, truncate except -J but no interference with -s or -S
|
Avant de finir, revenons sur les largeurs par défaut :
- 80 fold
- 75 fmt
- 72 par
- 72 pr
Cela va faire bizarre aujourd'hui à ceux qui n'ont pas connu les « polices à chasse fixe » —comme Consolas, Courier New, DejaVu Sans Mono, Droid Sans Mono, Inconsolata, Menlo, Lucida Console, Monaco, Terminal, etc.— et les fontes qui caractérisent les imprimantes à impacts :
- les imprimantes dérivées des téléscripteurs (en fait toute machine à écrire électrique pilotable par ordinateur), initialement, comme les Friden Flexowriter et les IBM Selectric
- les imprimantes à marguerites (similaires à des machines à écrire) ou à tulipe (qui permet d'avoir deux ou trois fontes au lieu d'une seule),
- les imprimantes à marteau ou à chaîne qu'on trouvait souvent couplés aux mainframes,
- les imprimantes matricielles maintenant (et qui ont toujours la côte malgré leurs défauts, un marché où Epson s'en est bien tiré avec son modèle MX-80 —j'en ai eu un) ainsi que Star avec son LC-10,
- les imprimantes à peigne, ou ligne matricielle qui sont à mi-chemin entre les imprimantes à ligne et les imprimantes matricielles, comme les Printronix P7000.
- les tables traçantes (qui sont encore d'usage malgré les technologies d'impression récentes),
Les limites (entre 70 et 80 caractères) sont historiques, adaptées aux consoles (plus exactement les moniteurs) standards comme le IBM 3270 et ses variantes et compatibles (80 caractères) ainsi que les téléscripteurs (72 caractères) même s'il y a eu rapidement des équipements pouvant atteindre 132 caractères… Il se trouve, que pour pour une petite fonte lisible (soit une taille de caractère standard de 10 pitch ou ~20 CPI —environ ⅙ᵉ pouce ou un pica—) on a bien 72 CPL …qui correspond au format standard de papier américain « letter de 8.5×11 pouces ».
Cependant, certains suggèrent de faire moins (entre 50 et 70 CPL), ce qu'on obtient avec une plus grande fonte (soit une taille de caractère standard de 12 pitch ou ~17 CPI —alias un elite pour les IBM Selectric—).
Les journaux ne s'y sont pas trompé en privilégiant le multi colonage (avec un optimum entre 40 et 50 par colonne…) !
Alors, à l'heure des polices proportionnelles (qui posent des soucis très différents et où il faut raisonner en « pixels » et non plus en caractères), est-ce que tout ceci est dépassé ? Pas vraiment. D'une part la chasses fixe peut s'utiliser avec le matériel récent réglé comme il se doit, d'autre part il y a encore pas mal de machines pro qui sont matricielles dont beaucoup utilisent de très petites largeurs de papier…
(Parmi les principaux fabricants, on trouve Sharp, Casio, et bien d'autres. Ceci dit, comme toujours, il n'est pas obligatoire que l'imprimante et le clavier et le logiciel ne fassent qu'un —les uns et les autres aiment vendre des solutions tout-en-un mais dont on se retrouve prisonnier…) Ces dernières sont souvent des imprimantes thermiques (nombreux direct ou à transfert et quelques uns à sublimation) ou à diodes, connectable par USB ou sans fil, fonctionnant sur secteur, etc.
J'ai eu pendant quelques temps la HP 82240B qui est une imprimante de poche connectée par IR que je n'ai pu utiliser (en dehors de ma calculatrice) qu'avec Linux ! Comme le rappelle Sylvain cote sur HPMuseum, elle a 2 jeux de caractères et 3 fontes (6 et 7 points de haut ainsi qu'une moins connue de 5 points) permettant d'avoir 24 et 32 CPL ainsi que 48 !
Mis à part le packaging vraiment bien fichu et l'électronique très bien maîtrisé par l'équipe de Corvallis, on peut faire la même chose avec d'autres composants ou en faire d'autres usages (suffit d'avoir un adaptateur IR…)
Sur cette note de nostalgie, j'arrête ce qui n'est plus loin de devenir un roman. À bientôt peut-être pour la suite de cette exploration, et si des points t'ont interpelé ou paru peu clair, n'hésite pas : ça se passe en commentaires.
# Ça ferait une bonne dépêche je trouve
Posté par Ysabeau 🧶 (site web personnel, Mastodon) . Évalué à 10.
Et ça donnerait plus visibilité au contenu :-).
« Tak ne veut pas quʼon pense à lui, il veut quʼon pense », Terry Pratchett, Déraillé.
[^] # Re: Ça ferait une bonne dépêche je trouve
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 5.
Arf… Faut croire que je n'ai toujours pas bien compris la charte éditoriale de LinuxFr :-( Comme il s'agit de redécouverte de commandes (en fait j'ai recyclé d'anciens cours que je donnais) mêlé à des réflexions perso (pour une dépêche, il y a des passages que j'aurais clairement reformulé autrement) et que ça parlait pas d'un produit particulier ou d'une techno particulière (en fait je présente la chose comme un voyage dans l'état d'esprit des adeptes de la ligne de commandes jusque dans les années 1980 ou 1990 au plus) bah voilà (je n'ai pas jugé pertinent de faire autre chose qu'un journal, encore que j'ai hésité à partager plutôt sur developpez.com ou zestedesavoir.com mais ce n'étais pas organisé pour ces plateformes et il y avait surtout trop d'avis subjectifs) :/
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Ça ferait une bonne dépêche je trouve
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
La suite est presque prête. Ce sera une dépêche si plus de gens le signifient en plussant ton commentaire. La valeur à atteindre est 16 (parce-que
0xF
simplement)“It is seldom that liberty of any kind is lost all at once.” ― David Hume
# Liens
Posté par Thecross . Évalué à 2.
Merci pour ton journal qui donne envie de s'intéresser aux technos abordées. J'ai repéré deux liens qui marchent pas : http://coin.des.experts.pagesperso-orange.fr/reponses/faq9_33.html renvoie vers un 404 et https://www.industrie-techno.com/l-imprimante-matricielle-est-elle-l-avenir.1146 renvoie vers une autre page du même domaine.
[^] # Re: Liens
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
Rhaa…! Bonne pioche ! Je pensais avoir vérifié tous les liens retenus (j'en ai viré d'autres pour ne pas faire doublon) mais j'en ai visiblement oublié. Merci pour la relecture attentive ; je me sens vraiment minable pour ces erreurs désagréables.
Pour le premier, c'est une faute d'attention de ma part : j'ai vu le site aficher une page mais n'ai pas pris le temps de me rendre compte que c'est une page qui n'existe plus…
Pour la seconde, je vais devoir solliciter la modération pour remplacer par celui-ci : http://www.ordinateur.cc/Mat%C3%A9riel/Imprimantes/26180.html
J'ai visiblement gardé le mauvais et viré le bon (mais en vrai je ne me souviens pas d'avoir vérifié industrie-techno car occupé à me battre avec le MarkDown.)
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Liens
Posté par Benoît Sibaud (site web personnel) . Évalué à 3.
Corrigé, merci.
[^] # Re: Corrections modération
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
Merci beaucoup.
Je viens de voir un truc qui ne m'avait pas sauté aux yeux :
qu'il faudrait plutôt remplacer par :
ou corriger (en tenant compte du MD de LinuxFr) en :
Ça me tue ces glitches… Dans le même esprit, j'ai un certain nombre de double ou triple espaces en fin de ligne qu'il faudrait virer : ça rajouter visiblement une ligne vide alors que l'intention était juste de passer à la ligne (en restant dans le même paragraphe)
Et sinon je n'ai toujours pas répondu pour le premier lien : il faut le virer (je n'ai pas de lien de lien de substitution et ne me rappelle pas le contenu de la page pour en trouver un équivalent.)
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Corrections modération
Posté par Thecross . Évalué à 3.
https://web.archive.org/web/20180102085458/http://coin.des.experts.pagesperso-orange.fr/reponses/faq9_33.html ;)
[^] # Re: Corrections modération
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
Merci beaucoup, tu es mon héro
\o/
J'ai l'extension WebArchive pour mon Firefox mais il ne s'est pas activé à cause de la page 404 d'Orange.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Corrections modération
Posté par Benoît Sibaud (site web personnel) . Évalué à 6.
Je ne suis pas un héros.
Faut pas croire ce qui disent les journaux.
[^] # Re: Corrections modération
Posté par Benoît Sibaud (site web personnel) . Évalué à 4.
Corrigé, merci.
[^] # Re: Autres corrections
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
C'est fou le nombre d'erreurs qu'il reste après avoir publié ; faut que je trouve un workflow qui limite cela (i.e. pouvoir catch certains problèmes avant publication) ; si des gens ont des suggestions je prends.
Dans mon introduction, il y a une parenthèse qui s'est barrée… même si la virgule permet de comprendre… Le source (sans saut de ligne) devrait ressembler à :
Je note que les doubles espaces en fin de ligne ont été corrigés et remercie pour cela.
Il y l'avant-dernier paragraphe de la partie « ajustement des paragraphes à une largeur », juste après le tableau, dont un guillemet s'est évadé (source suivant sans saut de ligne)
Par ailleurs, la parenthèse n'a de sens que si je n'oublie pas l'option dans le tableau… mais passons. Je note surtout le saut de ligne dans le lien… (le Markdown de LinuxFr traite tout passage à la ligne comme un saut de ligne)
Enfin, il y a bout après le lien, ce qui fait qu'on devrait avoir (sans les sauts de lignes)
Des broutilles mais on se creuse moins la tête pour comprendre.
Dans cette même partie, une ligature a échappé à ma vigilance pendant la rédaction : il faut lire « œuvre » et non « oeuvre » …même si ça semble être du chipotage hahaha.
Au début de la partie « balle au centre et égalisation », cette fois-ci c'est un crochet ouvrant qui s'est fait la malle… Le source devrait ressembler à :
J'espère que je n'en ai pas d'autres comme ça qui ont échappé à la prévisualisation avant publication.
Dans la partie « impressions en rang et/ou partielles » j'ai introduit deux commandes, que je pense sont connues de beaucoup, mais ai oublié de mettre un lien qui va bien dessus. C'est parce-que dans les cours elles sont vues longtemps avant cette partie qui est en plus survolée (malgré l'exhaustivité de mes notes on ne chipote pas autant et on essaye surtout de voir les exemples plus ou moins dans l'ordre.) Donc voici ce à quoi devrait ressembler le code source (sans les sauts de lignes rajoutés pour ne pas faire déborder l'affichage ici) :
Pareil vers la fin de la partie « impressions de livrets » où je mentionne la commande
diff
que je pense que la majorité connaît ici.Je pense (et espère) que c'est tout.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Autres corrections
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
Que nenni…
On me fait remarquer que cette partie
devrait être plutôt
Je note aussi un saut de ligne oublié par ici
(et j'avais en plus oublié l'espace insécable avant le point d'exclamation)
ainsi que, bien plus haut, par ici
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Autres corrections
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2. Dernière modification le 18 février 2022 à 00:43.
up…
:-)
Je me rend compte que je n'ai que des titres de niveau 2 …qui sont donc sous le sommaire (unique niveau 1)
:-o
Si des modos passent par là, j'aimerais :D'une part augmenter le premier titre d'un niveau, soit
Je me demande s'il ne faut pas faire la même chose pour le dernier titre aussi
D'autre part, j'aimerais ajouter un titre avant le paragraphe « Une fois son texte saisi (input mode) et corrigé (command mode), il faut le mettre en forme pour l'impression (ou l'affichage sur le[…] »
(l'ajout de ce titre intermédiaire m'a paru plus simple et plus rapide que de devoir décaler tous les autres titres)
Merci.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Autres corrections
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
Je me suis fait un
diff
de toutes les corrections et c'est monstrueux…https://paste.chapril.org/?ad03e7cef7a32484#nVrrtCqfPzhHxtsyRHpHucPm6G5m67zJtaF85nSasxN
(352 lignes de diff pour 1380 dans le source, soit le quart mais il y a dedans les trois lignes de contexte par défaut…)
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Autres corrections
Posté par Benoît Sibaud (site web personnel) . Évalué à 3.
Corrigé, merci.
[^] # Re: Autres corrections
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
Merci beaucoup ! J'imagine que ce ne fut pas évident et que vous y avez passé un temps certain…
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
# Très, très intéressant
Posté par yal (Mastodon) . Évalué à 2.
Un grand merci, donc. Et vivement une suite :)
Pour rebondir sur un aspect secondaire (quoique ?): j'avoue que ces mini-imprimantes dont tu parles m'ont toujours attiré l’œil. Je n'ai jamais fait l'effort de me renseigner sur la possibilité de les utiliser pour çà, mais je me suis parfois demandé comment on pourrait les utiliser pour diffuser des textes dans d'autres formats (le rouleau, ça n'aurait rien de révolutionnaire pour diffuser des textes ;)). Et comment ce format différent impacterait l'écriture: un autre rythme, une autre lecture ? Bref.
[^] # Re: Très, très intéressant
Posté par cg . Évalué à 5.
J'en avais utilisé dans un projet artistique (pour faire tomber des citations littéraires du plafond d'une médiathèque, avec la fonction "coupe de papier automatique" intégrée à l'imprimante). De mémoire, sous Linux c'était quand même pas gagné, c'est souvent des drivers un peu moisis et proprio, avec une doc minimaliste.
J'en ai aussi vu dans des expos d'art contemporain de temps en temps, en écriture automatique par exemple.
[^] # Re: Très, très intéressant
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 5. Dernière modification le 06 février 2022 à 17:21.
Pour ce qui est de diffuser des textes dans d'autres formats, je crois que c'est déjà fait en ce qui concerne l'usage de petites largeurs …avec la démocratisation des smartphones et les nouvelles générations (dites « digital native ») qui ne touchent plus du bois en dehors des ouvrages scolaires. Le succès de plateformes comme Wattpad, qui n'est utilisé que sur smartphone (je le précise parce-que j'ai cru comprendre qu'il y a une interface web), confirme la lecture étroite de récits non ? D'un autre côté, on note une forte consommation de PDF et similaires sur ces petits appareils qui ont de plus en plus de diagonales : du coup, on a une vision qui s'adapte plus aux pattes de mouches et/ou on développe l'aptitude à zoomer et scroller des doigts ?
Pour en revenir aux mini-imprimantes, il faut faire gaffe à mon enthousiasme : je pense que de moins en moins utilisent des fontes et surtout peuvent recevoir du texte brut… Or comme le fait remarquer le commentaire de cg, dès qu'il faut passer par un pilote c'est une autre paire de manche (et ces petits bijoux ne comprennent pas PS ou PCL) ; même quand ce n'est pas le tout-en-un des caisses que je dénonce, c'est du matériel fermé avec des pilotes tout autant ouverts. C'est dommage pour l'exploration et l'expression.
Bon, je m'attèle à la suite rapidement.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Très, très intéressant
Posté par yal (Mastodon) . Évalué à 3.
Oui, c'est certain. Et c'est très intéressant d'essayer de suivre leurs (nouveaux) usages, leurs (nouvelles) façons de consommer et de produire des contenus qui y soient adaptés (ou, de ce que j’en ai vu, pas toujours vraiment bien adaptés).
Cela dit, je reste curieux de voir ce qu'il serait possible de faire avec ces petits formats imprimés que sont, en gros, ces tickets de caisse qu l’on trouve partout. Autant pour les auteurs que pour les lecteurs.
Après tout, des caisses enregistreuses aux distributeurs de billets de banque, en passant par les terminaux de paiements, on trouve chaque fois cette mini imprimante qui te sort ce petit bout de papier que la plupart va rouler en boule sans le lire, avant de le jeter (à la poubelle, pas par terre merci). Une imprimante qui, au lieu d'un morne ticket de caisse, pourrait délivrer de la poésie ou de courts textes, le dernier paragraphe de tel ou tel feuilleton ou d’un (bout de) discours, d’une propagande pro/anti-gouvernementale, ou encore des messages des hackers (au nom de tel mouvement revendicatif ou de justice sociale, ou autre), ou encore des prières, un horoscope (et comment il connaîtrait le signe de la personne ou sa croyance? Ou alors, il y aurait pas le choix ?), un billet de loterie (avec quels gains potentiels? Qu'est-ce qui ferait rêver la masse de ces citoyens?), etc. Ou des images aussi, bien entendu.
On va dire que l'amateur de SF en moi s'étonne de ne pas voir plus de détournements (dans le genre de ce que ta vidéo dans ton autre réponse montre bien, merci d'ailleurs), que ce soit dans des fictions ou dans notre quotidien le plus réel, de ces outils d'impression qui sont pourtant omniprésents au point que plus personne ne les remarque, et dont un bon paquet sont connectés…
Le pessimiste en moi se dit parfois que ce désintérêt pour cet outil (dont le simple fait d'avoir osé imaginer son existence, il n’y a pas si longtemps que ça encore, ici même en Europe (France comprise), aurait pu te valoir si pas le bûcher au minimum de sérieuses emmerdes avec les autorités politiques et religieuses). Ce désintérêt, donc, serait peut-être un indice de plus que le texte, les mots imprimés, ne sont plus porteurs de ce pouvoir qu'on leur a si longtemps associé : informer, éduquer pour (faire) changer les choses ou pour (pouvoir) leur résister ?
Mais bon, c'est seulement le pessimiste en moi qui se dit ça et il se trompe. Il doit se tromper.
[^] # Re: Très, très intéressant
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
L'imprimerie a été une révolution …parce-que on pouvait dupliquer plus vite et plus fidèlement qu'avec les scribes/copistes (moines ou pas.) Et pouvoir faire du volume va permettre une plus grande diffusion…
On a enfin libéré l'écrit, et poursuivi sur cette lancée en démocratisant et simplifiant les procédés de création (en passant par la machine à écrire pour arriver à l'ordinateur avec traitement de texte présent un peu partout de nos jours) et de presse (pensons aux imprimantes devenues accessibles aux particuliers et donc les qualités vont en s'améliorant —contrairement aux coûts des cartouches mais c'est un autre débat) ou diffusion au plus large (aujourd'hui la publication sur la toile Internet, avec son foisonnement de blogs persos à une époque d'avant la main mise des réseaux asociaux…) Mais si si on a libéré l'écrit, il faut une étape en plus qui ne prend toujours pas à mon avis. On a cru que si tout le monde passait par la case école (pour d'autres raisons que celle-là mais ce n'est pas le sujet) et apprenait à lire alors ça irait de soi. Mais faut se rendre compte que tout le monde n'a pas le goût de la lecture si je peux dire.
Le développement en parallèle (bien que démarré plus tard) de la communication de voix (je pense aux postes radios jusqu'à la révolution des radios FM pirates puis libres, mais aussi aux supports physiques de musique et à la téléphonie) et d'images (je pense surtout à la télévision puis aux plateformes de sreaming) ne fait que renforcer le constat : en général les gens vont préférer qu'on parle directement à leurs sens (ouïe et vue ici) plutôt que de faire le détour que nécessite l'écrit/lecture.
Oui, l'écrit est en perte de vitesse (mais pas d'intérêt car il y en a et il y en aura toujours que cette forme satisfait) ; la chose n'est malheureusement pas surprenante.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Très, très intéressant
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
Je viens de tomber sur ce commentaire qui parle d'apogée et de déclin de l'écrit face à l'oral plutôt…
https://linuxfr.org/users/lejocelyn/journaux/les-vierges-effarouch%C3%A9es-du-langage#comment-1011628
Il y a d'autres commentaires (au sujet d'un certain langage SMS) qui évoquent la difficulté du système d'écriture, du moins le cas de la grammaire et de l'orthographe française.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Très, très intéressant
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 3.
Pour le plaisir des yeux : diffusion de grande image par le rouleau après avoir hacké le protocole de communication de la calculatrice TI) https://youtu.be/W_mZ7smIz3U
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
# Super utile !
Posté par marzoul . Évalué à 5.
Nom d'un·e petit·e cheval·jument !
C'est un des articles les plus utiles du moment, pour moi. Développeur logiciel, faisant énormément de traitements et de générations de trucs divers par script, mais hélas pas assez de réflexe "ça existe forcément déjà en outil de base dans toutes les distros" pour éviter de se palucher le formatage des sorties.
Et merci pour tous les exemples :-)
[^] # Re: Super utile !
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
Attention que tout ce qui est cité ici n'est pas « de base » : dans le cas présent, "
par
" n'est pas présent par défaut partout, mais je l'ai mentionné parce-qu'il peut être facilement disponible presque partout en plus d'être intéressant bien qu'un peu complexe.Sinon oui, il y a de quoi faire quand on triture du « pure texte » mais difficile de savoir parfois par quel bout prendre (même en ayant la liste de toutes les commandes du système, on ne sait pas qui fait quoi et/ou l'impact de certaines options selon la chaîne de traitement retenu.) L'autre souci est la portabilité qui peut faire s'arracher les cheveux.
Pas de quoi pour les exemples. J'ai ressorti des éléments de cours que je donnais (et donc des exemples sur lesquels je faisais travailler.) J'aurais pu ne pas juste dépoussiérer et proposer du texte en français… mais mettre en forme pour LinuxFr m'a pris pas mal d'énergie.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
# Lenght ou Length ?
Posté par Christophe "CHiPs" PETIT (site web personnel) . Évalué à 2. Dernière modification le 07 février 2022 à 17:30.
Bonjour,
J'ai vu plusieurs occurrences de "lenght" alors que j'ai l'habitude de voir "length".
C'est une coquille ou pas ?
Autrement, merci pour l'article !
[^] # Re: Lenght ou Length ?
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
oiu coquille (ou tic) courante chez moi : j'appuie souvent sur deux touches en même temps, surtout quand comme là c'est une danse de trois doigts.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Lenght ou Length ?
Posté par Benoît Sibaud (site web personnel) . Évalué à 4.
Corrigé, merci.
[^] # Merci les modo
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 5.
Ça m'épate toujours.
Petit hors-sujet : Vous (la modération) lisez vraiment tout ? Et trouvez le temps de dormir ?
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Merci les modo
Posté par Benoît Sibaud (site web personnel) . Évalué à 7.
Les canaux de communication sont variés pour la modération/l'administration du site: contenus, commentaires, flux Atom, tribunes, IRC, Signal, listes de diffusion… Pour le site en lui même, l'affichage nouveaux contenus / nouveaux commentaires aide bien.
Donc lire tout, ça dépend des gens dans l'équipe, mais perso je dirais quasi. Après, souvent lecture en diagonal quand le sujet ne m'intéresse pas : si la discussion semble posée, que le rendu n'a pas de souci, que personne n'interpelle la modération, ça va vite. Par contre les journaux avec cent commentaires / heure, pas tous palpitants, c'est longuet.
# Super journal… que je lirai plus tard
Posté par karchnu . Évalué à 2.
Vu la taille du journal… je pense qu'il me faudra une petite heure pour tout lire. Merci pour toutes ces informations… que je verrai plus tard.
:D
[^] # Re: Super journal… que je lirai plus tard
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
Merci à toi, sans qui je n'aurais pas eu le courage de ce boulot.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Super journal… que je lirai plus tard
Posté par karchnu . Évalué à 3.
Wow. C'est trop d'honneur que tu me fais. Je n'ai fait que parler d'un sujet qui m'intéressait et qui mérite de l'attention, selon moi.
Bon, à part ça, j'ai quelques notes rapides.
Taille des lignes dans les mails
Est-ce que par défaut on ne devrait pas écrire des mails avec une longueur de 72 caractères plutôt que 75 ? Cela laisse l'espace pour 2 réponses (72 + 2*2 = 76, soit 80 caractères moins les 4 pour CR + LF, la limite décrite dans les documents que tu as partagé).
Valeur par défaut pour
fmt
Quand j'utilise
fmt
il coupe à 72 par défaut (je viens de tester pour être sûr:D
).À part ça
J'ai lu en diagonale l'article. Il est très dense et il y a énormément de choses dont je ne me servirai pas. J'utilise spécifiquement
roff
pour ne pas avoir à gérer tout ça ! Le besoin semble très très proche des matériels très limités que tu as présenté, mais cela semble réellement historique, ou au moins, plus du adapté à nos jours. Sauf éventuellement pour écrire des mails (je coupe à 72 caractères avecfmt
, et c'est bien suffisant, àmha).Je note que l'usage de tableaux est pas terrible étant donné la largeur imposée. Il est difficile de distinguer le changement de ligne de tableau dans la dernière colonne. C'est une limitation de
linuxfr
, malheureusement, et j'aurai bien vu ça dans un PDF (on en revient àroff
, décidément !:p
).En tout cas, très bon travail ! Je mets ce journal dans mes marque-pages au cas où ça pourrait me servir un jour.
[^] # Re: Super journal… que je lirai plus tard
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 3.
Voir un journal sur roff et qui succite de l'intérêt (on se sent moins seul) m'a ôté les réticences à se jeter à l'eau (même si je ne parle pas de roff), enfin, pas encore…
C'est aussi l'occasion de publier quelque chose de long en Markdown, et ce n'est pas concluant pour moi… Quand on n'a pas l'interface de rédaction des dépêches (et je ne peux pas rester en ligne des plombes à jouer de l'aperçu, je dois pouvoir rédiger hors-ligne et) j'ai beau faire du Markdown depuis des années sur divereses plateformes (StackOverflow, Github, Bitbucket, Medium, DevTo, etc.) j'ai toujours du mal avec les différents dialectes et leurs effets de bord. Pour ce contenu, il me manquait certains concepts et tu verras que pas mal de corrections ont été demandées après publication. Bref, je continue à trouver que c'est génial pour les commentaires, bien mieux que BBCode ; mais c'est assez limité pour faire de longues docs où les formats Wiki et RestructuredText s'en sortent mieux.
En effet, pour les implémentations BSD :
…ce qui fait un max de 75.
Et l'implémentation GNU aussi :
Par contre, AIX lui :
Et pour Plan9 :
Ouch…
Pour en revenir au propos, il y a de tout et cette commande n'est pas POSIX… J'aurais du indiquer « 75/72/70 » au lieu de « 72 » ; ou alors « 75 » qui est la valeur des implémentations les plus couramment rencontrées ?
Du coup, pour en revenir au mails, d'après la terminologie de
fmt
, 75 ou 75 est le maximum et 72 le goal …pour permettre de répondre sans reformater:-)
Avec roff, quand on n'utilise pas de système de macros, on gère autant et parfois plus de détails de bas niveaux…
Ce journal a en effet un côté historique (d'où la « rétrospective » du titre et le tag « nostalgie » qui est clairement exprimé à la fin, sur les imprimantes à impacts) Les périphériques d'impression actuelle ont toujours des limitations (les dimensions des feuilles ne sont pas infinies) mais fonctionnent autrement (c'est ce que j'appelle le monde des polices proportionnelles contre les chasses fixes, et c'est aussi pour ça l'allusion au raisonnement en pixels et non plus en nombre de caractères.) On est encore un peu confronté à cet aspect quand on travaille en console et avec des trucs (comme l'e-mail) dont l'histoire remonte à ces époques.
Ce journal, à sa façon, en remettant certaines commandes en contexte, participe à la réflexion sur le langage et la diffusion des écrits…
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Super journal… que je lirai plus tard
Posté par karchnu . Évalué à 3. Dernière modification le 10 février 2022 à 03:26.
Je suis bien d'accord !
Après, vu la taille de ce que je publie, j'écris tout dans un fichier texte avant de poster pour ne rien perdre au cas où il y ait un plantage ou que je doive attendre avant de poster (pour faire des corrections, par exemple). Ça me fait faire plein de copier-coller, c'est assez pénible, mais c'est indépendant de Markdown.
Je ne sais pas. En tout cas, à l'usage, je vois que
fmt
coupe à 72 et pas avant. Si j'ai une ligne de 80 caractères ou plus, c'est au caractère 72 qu'il coupe. Si legoal
est de 65, il pourrait couper avant, je lui en laisse l'occasion.Donc soit il y a un problème dans la page de manuel, soit je n'ai pas compris ce que sont le
goal
et lemaximum
.Ça fait du bien de savoir d'où viennent les commandes disponibles sur nos systèmes. Je ne connais que trop peu la très grande majorité des commandes qui me sont disponibles, et encore moins leur utilité initiale. Je compte 2724 programmes sur mon système, c'est colossal et je n'ai pas la moindre idée de ce à quoi servent peut-être la moitié d'entre eux.
Je suis d'accord avec l'article que tu as cité, ainsi qu'avec les articles que lui-même cite, Unix était très lié au langage lui-même. Nos systèmes actuels sont très fortement liés, encore aujourd'hui, au langage et c'est un élément un peu trop oublié de nos jours.
Je m'explique. Dans Unix et ses dérivés plus modernes, un paquet de commandes introduisent leur propre langage :
dc
,bc
,sed
,awk
… la liste est longue. À chaque fois, c'est un nouveau langage qu'il faut apprendre, mais c'est également un langage adapté à ce qu'on cherche à faire, lié à un usage. Et ça, c'est magnifique. Pour moi c'est toute la beauté de l'approche Unix :une tâche = un outil, voire un langage
. Ce n'est malheureusement pas assez exprimé de cette façon dans les explications sur Unix, pourtant cela fait sens.Et quand on comprend ça, ça fait d'autant plus détester les outils modernes qui veulent tout réduire à quelques langages de programmation, là où la diversité des approches permettaient de ne manipuler que la complexité inhérente à la tâche à laquelle on s'attaquait. Autrement dit, pourquoi vouloir tout résoudre avec Javascript, Java ou Python, quand on a accès à des langages plus pertinents dans bien des cas ?
Et là, on pourrait parler de plein de dérives actuelles, la liste n'en est que trop longue. Le JavaScript dans le navigateur n'était pas suffisamment ridicule qu'on a voulu l'intégrer au système : pouf,
node
! Python n'apporte strictement rien de neuf par rapport à Perl, mais allons-y pour le développer jusqu'à l'intégrer à plein d'outils systèmes pour avoir une forte dépendance à ce langage alors qu'il sert à rien. Deux langages qui ont une base de code de plus d'un million de lignes chacun, c'est parfaitement raisonnable…Pendant ce temps-là,
awk
a été implémenté danstoybox
en 2700 lignes.Je pense sincèrement qu'on dérive. Nos usages sont de moins en moins raisonnables. Les langages créés pour l'occasion dans Unix servaient un usage, une fonction bien particulière. De nos jours, nous inventons des langages qui se veulent génériques, pour résoudre tout type de problème, et nous les intégrons à nos machines sans plus de considération. C'est une erreur que de rejeter la simplicité en faveur de l'unicité des langages. Je préfère connaître 3 langages simples appris en 1h chacun, qu'un langage qui évolue jusqu'à nécessiter des compilateurs (ou interpréteurs) de plusieurs centaines de milliers de lignes de code.
Bref, fin de la digression.
[^] # Re: Super journal… que je lirai plus tard
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 4.
Je ne me suis pas attardé sur cet aspect parce-que la syntaxe varie d'une implémentation à une autre et que pour des raisons de portabilité il vaut mieux rester au dénominateur commun :
-w
Mais s'il y a beaucoup de demandes de précisions (auxquelles je tenterai de répondre sans prétendre avoir la maîtrise ultime vu que je n'utilise pas toutes les options) je compulserai dans un épisode (journal) complémentaire.Pour en revenir à la question, le maximum est le mur infranchissable… (dans le contexte des quotas c'est l'équivalent du « hard limit » je dirai.) D'après les manpages, quand on indique max seul, le programme doit en déduire le goal (semble que BSD utilise la même valeur, tandis que GNU calcule que ça fait 93%.)
Par contre, le goal est la limite désirée, désirable mais légèrement déspassable… (donc l'équivalent du « soft limit » quand on fait l'analogie avec la gestion des quotas.) De même, quand on indique goal seul, le programme doit en déduire le max (BSD fait plus dix et GNU fait plus sept pour cent.)
Quand on spécifie les deux, le programme va essayer de couper un peu après (ou juste à) goal et toujours avant max !
Test avec une forme commune du Lorem (il faudra tester plusieurs valeurs pour trouver celles qui sont les plus parlantes)
Bon, il y a quand même des lignes où il se permet de descendre un ou deux caractères en dessous de goal ici.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Super journal… que je lirai plus tard
Posté par karchnu . Évalué à 2.
Je viens de voir que mon test était foireux. Je suis un boulet. Oublie ce que j'ai dit sur
fmt
.:D
Mon test (
test-fmt.sh
) en version corrigée montre bien qu'on coupe à 65 caractères :Ce script produit le résultat suivant :
Dès que fmt a pu (à 65 caractères, son
goal
), il a coupé.[^] # Re: Super journal… que je lirai plus tard
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 3.
Pourquoi tu réécris
seq
? Si t'es sur ton OpenBSD, t'embête pas (vu que c'est un test rapide qui sera jeté ensuite) : utilisejot
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Super journal… que je lirai plus tard
Posté par karchnu . Évalué à 2.
Je ne connaissais pas ce programme. Noté ! Merci !
[^] # Re: Super journal… que je lirai plus tard
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 3.
seq
…existe depuis la version 8 de AT&T, est présent dans NetBSD depuis sa version 3.0, est présent dans Plan 9 aussi ; bref n'est pas spécifique GNU mais hélas pas POSIX.jot
…existe depuis 4.2BSD et est présent dans tous les BSD que j'ai rencontré mais pas dans les autres Unix-like et ce n'est hélas pas POSIX.Les deux ne s'excluent pas parce-que leurs approchent diffèrent. Et il faut une petite gymnastique pour passer de l'une à l'autre (cf. exemples.) Mais s'il ne fallait en garder qu'un seul,
jot
est plus puissant… (cf. exemples.)Pour être portable, sur l'aspect commun (générer un certain nombre de termes d'une suite arithmétique), on peut passer par une boucle
for
dans un langage de son choix et j'ai un petit faible pourawk
ici.“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Super journal… que je lirai plus tard
Posté par karchnu . Évalué à 2.
Merci pour toutes ces précisions !
[^] # Re: Super journal… que je lirai plus tard
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 3.
On ne le sait pas toujours, mais c'est aussi le nom d'un éditeur de texte semblable à NEdit (ou l'inverse non ?) mais pour les stations SGI (il m'a fallu plusieurs essais pour trouver les bons liens)
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Super journal… que je lirai plus tard
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
Signalé à l'instant.
https://linuxfr.org/suivi/ameliorer-l-affichage-des-tableaux
Le PDF devrait faire pareil, vu que ça n'ajoute pas d'information sémantique qui serait rendue différemment. D'ailleurs, me fait penser que je ne l'ai pas précisé, que la correction proposée devrait s'appliquer aussi à la feuille de styles d'impression…
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Super journal… que je lirai plus tard
Posté par karchnu . Évalué à 3.
En fait je pensais au PDF parce qu'on peut assez facilement changer la taille des colonnes (avec roff et tbl ou hdtbl, LaTeX, etc.). Cela rend le tout plus clair, même sans séparateur de lignes plus imposant.
Et ce serait possible de faire également avec le HTML, c'est un élément de style, mais pour ça il faut outrepasser le Markdown et écrire le code HTML et CSS directement.
La proposition reste intéressante, je pense.
# Mon petit grain de sel
Posté par Michaël (site web personnel) . Évalué à 3.
Salut, merci pour ton travail!
J'ai deux petits grains de sel à mettre. Le plus pertinent est que certains des sujets dont tu parles sont abordés dans le TeXbook. Ce livre se trouve ici
https://ctan.org/pkg/texbook?lang=en
la distribution sous forme de PDF n'est pas autorisée mais celle du source bel et bien.
La méthode de justification de TeX est décrite au chapitre 14 “How TeX breaks paragraphs into lines.” En très bref, l'idée est de trouver tous les points de césure possible, de leur associer une mesure de laideur (par exemple c'est moins laid de casser sur une espace que dans l'intérieur d'un mot) puis quand on a un candidat de paragraphe, ajouter à ce score de laideur une valeur qui dépend de la dilatation ou compression des espaces sur les lignes consécutives (c'est horrible d'avoir une ligne très compressée suivie d'une ligne très dilatée).
La méthode qu'utilise TeX pour trouver les points de césure est décrite dans l'appendice H. Elle est basée sur un modèle un peu compliqué basé sur des n-grammes et des valeurs numériques qui indiquent les bons ou mauvais points de césures… par exemple
u1pe
et2id
Quoiqu'il en soit Liang, dont parle Knuth dans son livre, arrive à construire 4447 de ces n-grammes qui permettent de couper correctement 89.3% des 115000 mots de la langue anglaise de son dictionnaire des césures, c'est à dire trouver 89,3% de tous les points de césure du dictionnaire, sans en créer de faux. On peut ensuite parfaire l'algorithme en ajoutant un petit dictionnaire d'exceptions. L'avantage de cette méthode (par rapport au dictionnaire) est qu'elle s'adapte bien aux évolutions de langue comme les néologismes ou les emprunts, surtout si la langue de l'emprunt est proche de l'anglais (comme le français par exemple). Il y a des dictionnaires de ngrammes pour beaucoup de langues, et ils sont tous dans TeXlive.Mon grain de sel un peu moins dans le sujet est que le shell n'aime pas trop les boucles du genre
alors que
est plus robuste.
Il y a aussi les petits
cat … | grep
par exemple qui s'écrivent mieuxgrep < …
. (Oui j'ai déjà eu le message d'erreurssh: fork failed, cannot create process
:-) )[^] # Re: Mon petit grain de sel
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
Merci beaucoup pour l'information concernant le TeXbook : je n'étais pas au frais de la distribution. Mais bon, je préfère la version papier quand c'est possible (c'est pas très écologique mais j'ai l'excuse d'être vieux-jeu ?) et j'ai commencé la lecture de la version française (merci Tanguy)
Pour la césure, j'ai mentionné dans une future partie à partager (n'est-ce pas yal ?) que TeX a une approche algorithmique …mais que l'approche par dictionnaire semble encore la norme (c'est en tout cas ce que j'ai cru comprendre avec OpenOffice ainsi que de certaines évolutions de Troff)
Merci pour le grain de sel. Je me note d'appliquer ta correction dans mes dépôts ce week-end. Pour l'instant, je n'ai jamais eu de problème bien qu'ayant testé différents shell sur les scripts en question et les exécutant surtout avec Ash/Dash. Ceci dit, je suis souvent dans un contexte maîtrisé et le seul cas où ça peut mal se passer à ma connaissance est quand on a trop de valeurs (raison d'être de commandes comme
xargs
par exemple)“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Mon petit grain de sel
Posté par Michaël (site web personnel) . Évalué à 4. Dernière modification le 10 février 2022 à 11:32.
Oui je chipote un peu mais c'est mon grain de sel moins pertinent. ;-) Il y a en fait deux problèmes en fait avec le
for whatever in $(…); do
Le premier et le plus important est que si il y a beaucoup de résultats ça casse le script, le second est que ça utilise l'IFS pour couper la ligne en mots. (En général quand on touche à IFS on est prudent, cependant. :-) )En général xargs est mieux que la boucle while mais on ne peut pas l'utiliser tout le temps: cela ne marche qu'avec des programmes externes. Si on veut itérer avec une commande complexe ou une fonction on est obligé de passer par une boucle while.
Pour le cat, parfois l'usage légitime dans un pipe est si on a filtre configurable:
[^] # Re: Mon petit grain de sel
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
Oui, c'est pour la longueur (ou nombre de résultats) que je précisais que le bout (snipet) pointé est utilisé dans un contexte maitrisé. C'est vrai que sur le coup, je n'ai pas pensé à l'
IFS
(qui justement n'est pas touché dans l'extrait) parce-que mon contexte ne le nécessitait pas.Pour
cat
je l'utilise quand je dois passer le contenu d'un fichier qui attend ses données de stdin (coucoutr
entre autres.) Mais pour les commandes qui lisent directement les fichiers (commegrep
etfold
dans ces exemples) bah je n'ai pas de raison de rajouter un process inutile en plus.“It is seldom that liberty of any kind is lost all at once.” ― David Hume
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.