
문서에 LaTeX 코드 조각을 작성하고 싶으므로 제작된 패키지를 로드했습니다. 그런데 컴파일을 해보니 아래와 같은 오류가 떴습니다.
! 패키지 작성 오류: -shell-escape 플래그를 사용하여 LaTeX를 호출해야 합니다. 설명은 발행된 패키지 문서를 참조하세요.
이 문제를 해결하도록 친절하게 도와주세요!
미리 감사드립니다!
답변1
제작된 패키지에는 셸에 대한 액세스가 필요하므로 편집기 내에서 이를 허용해야 합니다. 이렇게 하려면 -shell-escape
편집기에서 LaTex, PdfLaTex, XeLaTex 및 LuaLaTex에 대한 명령 목록을 추가해야 합니다. "TexWorks"에서 "옵션 > TexWorks 구성 > 명령"으로 이동하여 해당 명령을 수정하고 다음 명령을 추가하여 변경합니다 -shell-escape
.
latex.exe -shell-escape -src -interaction=nonstopmode %.tex
pdflatex.exe -shell-escape -synctex=1 -interaction=nonstopmode %.tex
xelatex.exe -shell-escape -synctex=1 -interaction=nonstopmode %.tex
lualatex.exe -shell-escape -synctex=1 -interaction=nonstopmode %.tex
pdflatex 및 shellescape가 활성화된 TeXworks
\write18 enabled
위의 내용이 파일에서 실행되면 콘솔이 표시됩니다.
또는
코드를 tex 파일(이름을 지정했다고 가정 testMinted.tex
)에 저장하고 파일이 있는 폴더(에 있다고 가정 C:\Users\uqapourm\Desktop\testMinted
)로 이동하여 명령줄에서 실행하여 명령 pdflatex.exe -shell-escape -synctex=1 -interaction=nonstopmode testMinted.tex
줄에서 컴파일할 수도 있습니다.
보안
때로는 tex 파일 내부에서 외부 명령을 실행할 수 있는 것이 유용합니다. 예를 들어 일부 조판을 외부화하거나 bibtex와 같은 외부 도구를 사용할 수 있습니다. 이는 \write18
tex 프리미티브를 통해 사용할 수 있습니다.
The problem is that it allows for almost everything.
tex 파일은 이식 가능하므로 타사 파일을 컴파일할 때 보안 문제를 두려워할 필요가 없습니다. 따라서 기본적으로 이 기본 요소는 비활성화되어 있습니다.
사용자가 이를 사용해야 하는 경우 셸 상호 작용을 통해 파일 작성자를 신뢰한다는 점을 컴파일러에 명시적으로 알려야 하며 이것이 바로 선택적 --shell-escape
인수의 핵심입니다.
수년 동안 \write18
운영 체제에 대한 백도어로 사용되었습니다. 구문론적으로 TeX는 이를 파일에 쓰는 것으로 취급하지만 register 18
실제로는 명령을 실행하는 미리 열린 파일로 취급합니다.
"제한 없음"은 write18
모든 명령을 실행할 수 있음을 의미하므로 이를 허용하고 누군가가 보낸 TeX 파일을 실행하면 임의 코드가 실행될 수 있으며 비밀번호 파일을 스팸 봇 등에 이메일로 보낼 수 있습니다.
이는 분명히 보안 위험이 있지만 항상 허용하고 싶은 Tex 배포판의 일부인 일부 명령(예: 이미지 및 글꼴 변환)이 있으므로 web2c에서는 사용자(또는 기본적으로 texlive 관리자)가 설정을 허용합니다. "허용되고 안전한" 명령 세트이며 제한 모드에서 실행이 허용됩니다.
세 번째 대안은 에서 명령을 전혀 실행하지 않는 것입니다 \write18
.
"restricted \write18 available"은 무엇을 의미하며 TexLive가 이를 계속 보고하는 이유는 무엇입니까?
TeXworks에서 쉘 이스케이프를 활성화하는 방법은 무엇입니까?
추신
때로는 패키지가 작동하도록 하기 위해 캐시를 지워야 하는 경우도 있습니다. 이렇게 하면 작업 속도가 느려지지만 오류는 방지됩니다. 그렇게 하려면 에 옵션을 추가하십시오 \usepackage[cache=false]{minted}
.