Gnu nroff - 줄 시작 부분에 점이 있는 줄을 출력합니다.

Gnu nroff - 줄 시작 부분에 점이 있는 줄을 출력합니다.

나는 원시(매크로 없음) GNU에서 자체 복제 프로그램("quine")을 작성하려고 했습니다 nroff. 물론 이것은 무의미하고 기이한 일이지만 이전에는 한 번도 수행된 적이 없는 것 같습니다. 나는 그렇게 하지 못했습니다.

nroff매크로가 없는 입력 언어 퀸을 작성하는 데 성공한 사람은 문자열이나 매크로 또는 "상자"를 정의해야 한다고 확신합니다 . 그렇게 하려면 다음과 같은 요청을 작성해야 합니다.

.as s "just assigned this to string s
.de xxx
.nop "\*s"
..
.xxx

즉, nroff입력의 모든 요청에는 '.'이 있습니다. 줄의 시작 부분에.

quines는 (치팅 없이) 소스 코드를 출력하기 때문에 출력에는 아마도 '.'가 있어야 합니다. 여러 출력 라인의 첫 번째 문자로 사용됩니다.

도대체 어떻게 GNU가 nroff'.'를 출력하게 합니까? 줄 시작 부분에 문자가 있나요? 내가 알 수 있는 한, 아무리 간접적으로 접근하거나 탈출해도 그렇게 할 수 없습니다. '.'를 출력하는 숨겨진 요청이 있습니까? 줄의 시작 부분에?

저는 Groff 1.22.3이 설치된 최근 동기화된 Arch Linux를 사용하고 있습니다.

답변1

에서mdoc(7)

The special meaning of a punctuation character may be escaped with the string ‘\&’

그래서:

\&.

그러나 다음과 같은 후속 라인과 결합하면 까다로울 수 있습니다.

\&.
\&.as s "nron, nroff--very good, again!

함께 실행(그리고 빈 줄 전체를 생성)

$ nroff blah | head -2
.  .as s "nron, nroff‐‐very good, again!

빈 줄을 추가하거나 다른 매크로를 사용하여 문제를 해결할 수 있지만

\&.

\&.as s "nron, nroff--very good, again!

그것이 quine의 요구에 어떤 영향을 미칠지는 모르겠지만 ...

답변2

.tr시작에서 끝으로 번역할 문자 쌍을 사용하는 번역을 설정할 수 있습니다 . 예를 들어 #다음과 같이 번역합니다 ..

nroff <<\!
.tr #.
###abc...
!

생산하다

...abc...

관련 정보