사용된 엔진이나 이와 유사한 엔진을 주장하고 그렇지 않으면 오류를 발생시키는 표준 방법이 있습니까?

사용된 엔진이나 이와 유사한 엔진을 주장하고 그렇지 않으면 오류를 발생시키는 표준 방법이 있습니까?

assert특정 조건을 주장하기 위해 다양한 프로그래밍 언어에서 제공하는 명령 과 유사한 것이 있습니까 ?

.tex특히 나는 사용된 엔진(예: LuaLaTeX 또는 PDFLaTeX)에 대한 주장을 내 파일에 적용하는 방법을 찾고 있습니다 . 나는 ifluatex그것이 사용되고 있는지 확인하는 데 사용할 수 있다는 것을 알고 있지만 여전히 내가 원하는 것에 대해 다소 장황한 표기법을 사용해야 합니다(게다가 오류를 발생시키고 내가 선택한 메시지를 표시하는 방법을 아직 찾지 못했습니다). .

assert그래서 명확히 하기 위해: 나는 어설션이 만족되지 않으면 오류를 일으키고 다른 작업을 수행하지 않는 것과 같은 기본 요소를 찾고 있습니다 . 내가 찾을 수 있는 주장에 관한 유일한 다른 질문은 다음과 같습니다.이 하나, 그러나 답변은 이를 피하고 대신 질문에 맞는 솔루션을 제공합니다.하지만 나는 특정 조건을 주장하는 일반적인 방법을 찾고 있습니다.

답변1

LuaTeX를 감지하는 일반적인 방법은 \directlua문서 클래스나 패키지를 로드하기 전에 기본 요소를 확인하는 것입니다. 오류를 발생시키려면 \errmessage. 오류가 발생한 후 \@@endLaTeX 실행을 종료하고 을 눌러 사용자가 계속 진행하지 못하도록 호출합니다 enter.

\ifdefined\directlua\else
  \errmessage{LuaTeX is required to typeset this document}
  \csname @@end\expandafter\endcsname
\fi
\documentclass{article}
\begin{document}
Hello
\end{document}
$ pdflatex test.tex 
This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2018) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./test.tex
LaTeX2e <2018-12-01>
! LuaTeX is required to typeset this document.
l.2 ...uaTeX is required to typeset this document}

? 
 )
No pages of output.
Transcript written on test.log.

답변2

assert.tex다음 과 같은 파일을 만들 수 있습니다 .

\RequirePackage{ifxetex,ifluatex}

\makeatletter
\newif\if@assert
\newcommand\assert[1]{%
  \@asserttrue
  \csname assert@#1\endcsname
  \if@assert\else
    \@latex@error{Assert failed: #1}{This document requires #1}%
    \expandafter\@@end
  \fi
}
\@onlypreamble\assert

\newcommand{\def@assert}[2]{\@namedef{assert@#1}{#2}}

\def@assert{xetex}{\ifxetex\else\@assertfalse\fi}
\def@assert{luatex}{\ifluatex\else\@assertfalse\fi}
\def@assert{a4paper}{%
  \ifdim\paperheight=297mm
    \ifdim\paperwidth=210mm
    \else
      \@assertfalse
    \fi
  \else
    \@assertfalse
  \fi
}

\makeatother

그리고 TeX 엔진이 검색한 위치에 넣으세요. 예를 들어 세 가지 주장을 추가했습니다.

파일에 다음 형식이 있는 경우

\input{assert}

\documentclass{article}

\assert{luatex}
\assert{a4paper}

\begin{document}

Hello world!

\end{document}

그런 다음 처리하거나 pdflatex중지 xelatex합니다.

! LaTeX Error: Assert failed: luatex.

처리가 lualatex중지됩니다.

! LaTeX Error: Assert failed: a4paper.

문서 클래스 옵션에 추가하면 a4paper문서가 lualatex.

이는 인수가 유효한 주장인지 확인하지 않습니다. 알려지지 않은 것은 만족스러운 것처럼 취급됩니다.

관련 정보