Folgendes Minimalbeispiel kompiliert nicht:

Code, hier editierbar zum Übersetzen:
\documentclass[varwidth]{standalone}
\usepackage{luacode}
\usepackage{siunitx}
% #1: Nachkommastellen; #2: Zähler; #3: Nenner
\newcommand\CalcPercent[3]{
\luaexec{tex.sprint(string.format("\%0.#1f", #2/#3*100))}
}
\begin{document}
\CalcPercent{0}{1}{3}
\CalcPercent{1}{1}{3}
\CalcPercent{2}{1}{3}
\qty{\CalcPercent{0}{1}{3}}{\percent} % <<- Das hier funktioniert nicht
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Interessanterweise steht in der Anleitung Folgendes:

Code, hier editierbar zum Übersetzen:
> The \luaexec command is similar to \luadirect but with a few additional features: \\ gives a double
backslash (see note below) \% a percent character, and ~ just works. For single backslashes, \string is
still needed. Also, TEX macros are expanded.
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Folgender Hinweis hat auch nicht geholfen:

Code, hier editierbar zum Übersetzen:
% #1: Nachkommastellen; #2: Zähler; #3: Nenner
\makeatletter\let\percentchar\@percentchar\makeatother
\newcommand\CalcPercent[3]{
\luaexec{tex.sprint(string.format("\percentchar 0.#1f", #2/#3*100))}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Den Compiler stört augenscheinlich das Prozent im Formatstring "\%0.#1f".

Ich hatte mal vor Jahren eine ähnliche Frage gestellt, der das o.g Zitat in der Dokumentation als Basis nicmmt. Jedoch klappt es hier nicht.

Hat jemand eine Idee, was ich ändern müsste, damit es funktioniert?

gefragt 23 Jan '24, 15:48

dzaic's gravatar image

dzaic
631155054
Akzeptiert-Rate: 42%

bearbeitet 23 Jan '24, 16:39

luaexec ist nicht vollständig expandierbar, weshalb es nicht direkt im Argument von \qty verwendet werden kann. Stattdessen sollte hier \luadirect oder direkt \directlua verwendet wedren. Für die Berechnung könnte aber auch l3fp benutzt werden: \newcommand\calcPercent[3]{\fpeval{round((#2)/(#3)*100, #1)}}.

(23 Jan '24, 17:31) Skillmon

Der Befehl \luaexec verwendet \begingroup usw. weshalb er nicht vollständig expandierbar ist und als solches nicht direkt im Argument von \qty verwendet werden kann.

Es gibt verschiedene mögliche Abhilfen. Die eine ist, \directlua direkt zu verwenden (oder, wenn luacode's \luadirect bevorzugt wird eben diesen Befehl). Eine andere Alternative wäre, die Berechnungen von LaTeX anstellen zu lassen (mittels l3fp bzw. dem Befehl \fpeval). Folgendes Minimalbeispiel zeigt beides (und macht % direkt verwendbar und dafür ^^A zu einem Kommentar während wir unser \CalcPercent definieren).

Code, hier editierbar zum Übersetzen:
\documentclass[varwidth]{standalone}
\usepackage{siunitx}
\begingroup
\catcode`\%=12
\catcode`\^^A=14
^^A das ist das neue Kommentarzeichen, sollten überflüssige Leerzeichen
^^A entfernt werden müssen.
\unexpanded{\endgroup
^^A #1: Nachkommastellen; #2: Zähler; #3: Nenner
\newcommand\CalcPercent[3]
{\directlua{tex.sprint(string.format("%0.#1f", #2/#3*100))}}
}
% #1: Nachkommastellen; #2: Zähler; #3: Nenner
\newcommand\calcPercent[3]{\fpeval{round((#2)/(#3)*100, #1)}}
\begin{document}
\CalcPercent{0}{1}{3}
\CalcPercent{1}{1}{3}
\CalcPercent{2}{1}{3}
\qty{\CalcPercent{0}{1}{3}}{\percent} % <<- Das hier funktioniert doch
\qty{\calcPercent{0}{1}{3}}{\percent} % <<- Das hier funktioniert doch
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Permanenter link

beantwortet 23 Jan '24, 17:41

Skillmon's gravatar image

Skillmon
1.2k6
Akzeptiert-Rate: 46%

Danke Dir. Funktioniert einwandfrei. Wäre es möglich, mit Dir via E-Mail in Kontakt zu kommen?

(24 Jan '24, 09:53) dzaic
1

@dzaic wenn du meine E-Mailadresse herausfindest, kein Problem :) Aber sie hier hinschreiben werde ich nicht (ich habe aber ein zwei LaTeX Pakete geschrieben, in der Dokumentation zum expkv-bundle etwa wird man fündig).

(24 Jan '24, 19:19) Skillmon
Deine Antwort
[Vorschau ausblenden]

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Frage-Themen:

×34
×29
×3

gestellte Frage: 23 Jan '24, 15:48

Frage wurde gesehen: 1,623 Mal

zuletzt geändert: 24 Jan '24, 19:19

Willkommen, erstes Mal hier? Schau mal unter FAQ!

×