Folgendes Minimalbeispiel kompiliert nicht:

\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}

Interessanterweise steht in der Anleitung Folgendes:

> 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.

Folgender Hinweis hat auch nicht geholfen:

% #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))}
}

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, 15:48

dzaic's gravatar image

dzaic
63194853
Akzeptiert-Rate: 42%

bearbeitet 23 Jan, 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, 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).

\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}
Permanenter link

beantwortet 23 Jan, 17:41

Skillmon's gravatar image

Skillmon
1.1k6
Akzeptiert-Rate: 48%

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

(24 Jan, 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, 19:19) Skillmon
Deine Antwort
Vorschau umschalten

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

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×34
×28
×3

gestellte Frage: 23 Jan, 15:48

Frage wurde gesehen: 311 Mal

zuletzt geändert: 24 Jan, 19:19