일반 전처리기가 추가 공백을 추가합니다.

일반 전처리기가 추가 공백을 추가합니다.

후속 조치이 기사나는 사용한다기본 계획마크다운 파서 지원 제공판독일부 매크로와 함께. 불행히도 gpp모든 공백이 결과에 복사되는 것 같습니다.

예를 들어 파일을 고려하십시오.test.md

% Title
% Raphael
% 2012

\lorem \ipsum

그리고test.gpp

\define{lorem}{Lorem}
\define{ipsum}{ipsum...}

이제 gpp -T --include test.gpp test.mdYield를 호출하세요.

<empty line>
% Title
% Raphael
% 2012

Lorem ipsum...

이것은 pandoc내가 사용하는 경우 추가 줄 바꿈은 실제로 정의 사이의 줄 바꿈입니다.

\define{lorem}{Lorem}@@@
\define{ipsum}{ipsum...}

추가 옵션을 사용하면 +c "@@@" "\n"빈 줄이 사라집니다. 하지만 이 솔루션은 보기에도 좋지 않을 뿐만 아니라 두 가지 치명적인 결함도 안고 있습니다.

첫째, @@@소스 파일의 주석 표시로도 간주됩니다. @@@Markdown에서는 금지된 것이 없으므로 ( @@@또는 선택한 다른 구분 기호) 소스 파일에 나타날 때 의도하지 않은 결과가 발생할 수 있습니다.

둘째, 적절한 들여쓰기로 인해 줄 시작 부분의 공백을 덮지 않습니다. 예를 들어,

\define{lorem}{@@@
  \if{a == a}@@@
    ![some image](test.png)@@@
  \endif@@@
}@@@

이러한 모든 이미지 태그가 4개의 공백으로 들여쓰기되어 pandoc지정된 대로 코드 형식이 지정됩니다.

그렇다면 gpp파일을 한 줄로 작성하거나 들여쓰기를 하지 않고 보기 흉한 줄 끝 주석을 삽입하는 것보다 gpp여분의 공백이 모든 곳에서 번지는 것을 방지하기 위해 무엇을 할 수 있습니까?

답변1

모든 쓰레기가 포함 파일에 있다고 가정하면 문서가 시작되기 전에 이를 후처리할 수 있습니다.

테스트.gpp:

\define{lorem}{Lorem}
\define{ipsum}{ipsum...}
----- cut here ------

그런 다음 다음을 수행하십시오.

gpp -T --include test.gpp test.md | sed '1,/----- cut here ------/d'

( gpp표준 출력으로 출력하시겠습니까? 그렇지 않으면 sed출력 파일에서 실행하면 됩니다.)

답변2

한 가지 가능성은 포함된 매크로 파일을 전처리하고 한 줄로 축소하는 것입니다 sed( 결합하다ams 접근 방식, 이 makefile 조각은 문제를 해결합니다.

sed 's/^\s*//;s/\s*?$$//;H;$$!d;:e;x;/^$$/d;s/\n//g' $(MACROFILE) > $(BUILDPATH)/$(MACROFILE);
echo "$(MFENDMARKER)" >> $(BUILDPATH)/$(MACROFILE);

gpp -T -x -Dtarget=pdf --include $(BUILDPATH)/$(MACROFILE) $(MAINFILE) | \
  sed '1,/$(MFENDMARKER)/d' | \
  pandoc -S -R --toc -f markdown -o $(DISTPATH)/$(NAME).pdf;

이제 그 이면에는 불쾌함이 도사리고 있습니다.

관련 정보