Gibt es eine Standardmethode, um die verwendete Engine oder ähnliches zu bestätigen und andernfalls einen Fehler zu verursachen?

Gibt es eine Standardmethode, um die verwendete Engine oder ähnliches zu bestätigen und andernfalls einen Fehler zu verursachen?

Gibt es etwas Analoges zu dem assertBefehl, den verschiedene Programmiersprachen anbieten, um bestimmte Bedingungen durchzusetzen?

Insbesondere suche ich nach einer Möglichkeit, meine .texDateien mit Aussagen über die verwendete Engine (z. B. LuaLaTeX oder PDFLaTeX) zu versehen. Ich weiß, dass ich ifluatexüberprüfen kann, ob sie verwendet wird, aber dazu muss ich immer noch eine ziemlich ausführliche Notation dessen verwenden, was ich will (außerdem habe ich immer noch nicht herausgefunden, wie ich einen Fehler auslöse und eine Nachricht meiner Wahl anzeigen kann).

Nur zur Klarstellung: Ich suche nach einem Primitiv wie assertdiesem, das einen Fehler verursacht, wenn die Behauptung nicht erfüllt ist, und sonst nichts tut. Die einzige andere Frage zu Behauptungen, die ich finden konnte, warDieses hier, aber die Antworten weichen dem aus und bieten stattdessen auf die Frage zugeschnittene Lösungen.Ich suche jedoch nach einer allgemeinen Möglichkeit, bestimmte Bedingungen durchzusetzen.

Antwort1

\directluaDie übliche Methode zum Erkennen von LuaTeX besteht darin , vor dem Laden der Dokumentklasse oder der Pakete nach dem Primitiv zu suchen . Um einen Fehler auszulösen, verwenden Sie \errmessage. Nach dem Fehler rufe ich auf, \@@endum den LaTeX-Lauf zu beenden und den Benutzer durch Drücken von am Fortfahren zu hindern 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.

Antwort2

Sie können eine Datei mit assert.texdem Namen

\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

und platzieren Sie es an einem von TeX-Engines durchsuchbaren Ort. Ich habe als Beispiel drei Behauptungen hinzugefügt.

Wenn Ihre Datei die Form

\input{assert}

\documentclass{article}

\assert{luatex}
\assert{a4paper}

\begin{document}

Hello world!

\end{document}

dann die Verarbeitung mit pdflatexoder xelatexwürde aufhören mit

! LaTeX Error: Assert failed: luatex.

Die Verarbeitung mit lualatexwird beendet mit

! LaTeX Error: Assert failed: a4paper.

Durch das Hinzufügen a4papervon Optionen zur Dokumentklasse wird das Dokument mit kompilierbar lualatex.

Dadurch wird nicht überprüft, ob es sich bei dem Argument um eine gültige Behauptung handelt. Ein unbekanntes Argument wird so behandelt, als ob es erfüllt wäre.

verwandte Informationen