groff
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Groff] groff - me /texte français


From: Ralph Corderoy
Subject: Re: [Groff] groff - me /texte français
Date: Thu, 15 Aug 2013 12:55:41 +0100

Hi Grégoire,

> > troff takes ISO-8859-1 as its default input.  If you want to feed it
> > UTF-8 then look at groff's -k option.  Try
> > 
> >     printf 'testé\n' | groff -k -me -X
>
> thanks a lot for your answer. Your command works fine.  I wondered
> where do you have this information from:

I've picked it up from subscribing to this list and seeing others'
answers over time.  :-)

> I was searching in man groff about the -k option, than in man preconv.
> I understood that -k  make use of preconv, which can convert utf-8 to
> Latin1. 

Yes, they are the right places to read.  GNU troff understands \[u1234]
for Unicode codepoint U+1234 and preconv produces these.

> I can find out by myself with which caracters I will have to use "\n".
> But try this:
> 
>     printf 'testé\n, ü\nber, ç\na' | groff -k -me -X
> 
> There is a space too much between é and , because of \n
> Is there a solution for that? 

That had me puzzled for a while but the penny has dropped.  I wrote \n
not because it's needed for groff -k to handle the preceding character
but because printf(1), unlike echo(1), doesn't automatically add a
linefeed to its output and \n is the "escape" to do this.  Try these to
see what I mean.

    printf 'foo\nbar\n'
    printf 'testé\n, ü\nber, ç\na'
    printf foo

> I tried something myself: The following command is not the solution: 
>     printf 'testé\, ü\ber, ç\a' | groff -k -me -X

This should work just fine.

    printf 'testé, über, ça\n' | groff -k -me -X

> ... further I was reading around in the manual about groff -k and
> after which characters you have to use \n.  I didn't found anything.

\n does mean something to troff too, but the \n given to printf is
interpreted by printf and turned into a single byte, ASCII LF, value 10,
before troff gets to see it.  \n in troff makes it interpolate the value
of the given numeric register.

    $ printf '.nr x 42\nNumbers: \\nx \\n(fo \\n[bar]\n' |
    > groff -rfo=314 -rbar=281 -kX

Again, do just the printf to see groff's input as if you had typed it in
a file.  \\ is the escape to have printf produce a single \

Cheers, Ralph.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]