2012-07-13 11 views
9

Zgodnie z info groff (rozdział 5.11 Tłumaczenia znaków), \. powinien wydrukować tylko kropkę. Jednak nie jest tak, jak się wydaje. Gdybym czynią ten podręcznikUciekające kropki w groff

.TH x x x x 
\.SH foo 

uzyskać foo renderowany jako nagłówek sekcji, a .SH nie zostanie wydrukowany.

Dlaczego tak się dzieje i jak mogę uciec przed kropką (i apostrofem) pod adresem przy rozpoczęciu linii w groff?

Odpowiedz

10

Aby uciec kropkę na początku linii zapisu użytku \[char46]:

\[char46]SH foo 

drukuje

.SH foo 

Jest to oczekiwane zachowanie, ale powinny być ustalone w dokumencie. Here to raport o błędzie.

Poniżej można zapoznać się z opisem obu stron informacyjnych (z) \\ (skrócona) i \..

-- Escape: \\ 
[...] 

`\\' is a `delayed' backslash; more precisely, it is the default 
escape character followed by a backslash, which no longer has 
special meaning due to the leading escape character. It is _not_ 
an escape sequence in the usual sense! In any unknown escape 
sequence `\X' the escape character is ignored and X is printed. 
But if X is equal to the current escape character, no warning is 
emitted. 

As a consequence, only at top-level or in a diversion a backslash 
glyph is printed; in copy-in mode, it expands to a single 
backslash which then combines with the following character to an 
escape sequence. 

[...] 

-- Escape: \. 
Similar to `\\', the sequence `\.' isn't a real escape sequence. 
As before, a warning message is suppressed if the escape character 
is followed by a dot, and the dot itself is printed. 
2

Wystarczy poprzedzić kropki o zerowej szerokości znak:

\&. -- this a a dot. 

lub przełączyć się do innego znaku kontrolnego:

.cC# 
. -- this is a dot. 
#cc