
Ich habe versucht, egreg nette AntwortHierin meinem Hauptdokument und ich habe festgestellt, dass es dort nicht funktioniert. Es stellte sich heraus, dass es daran liegt, dass ich zufällig ein anderes Paket verwende, das breqn
ich wirklich brauche.
Ich habe keine Ahnung, warum breqn
der Befehl abbricht. Aber hier ist ein MWE
\documentclass[10pt,notitlepage]{article}
\usepackage{etoolbox}%see https://tex.stackexchange.com/questions/257621
\makeatletter
\newcommand{\shellcommand}[1]{\@@input"|#1"}
\makeatother
\usepackage{breqn}
\newcounter{c}
\begin{document}
\setcounter{c}{\shellcommand{id -g}}
\arabic{c}
\end{document}
kompilieren mit lualatex -shell-esc foo.tex
und der Fehler ist
(/usr/local/texlive/2015/texmf-dist/tex/latex/tools/calc.sty)) (./foo2.aux)
("|id -g!"id: invalid option -- '!'
Try 'id --help' for more information.
Runaway argument?
! Paragraph ended before \@calc@pre@scan was complete.
<to be read again>
\par
l.1
Beachten Sie das dort hinzugefügte zusätzliche „!“.
Jetzt muss ich nur noch die Zeile kommentieren \usepackage{etoolbox}
und erneut kompilieren, es funktioniert und ich bekomme das erwartete Ergebnis. Keine Fehler.
Gibt es eine Möglichkeit, den Befehl „egreg“ beizubehalten breqn
und trotzdem verwenden zu können \shellcommand
?
Beim Entfernen des breqn
Pakets und Kompilieren:
>lualatex -shell-esc foo2.tex
This is LuaTeX, Version beta-0.80.0 (TeX Live 2015) (rev 5238)
\write18 enabled.
(./foo2.tex
LaTeX2e <2015/01/01> patch level 2
Babel <3.9l> and hyphenation patterns for 79 languages loaded.
(/usr/local/texlive/2015/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/local/texlive/2015/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2015/texmf-dist/tex/latex/etoolbox/etoolbox.sty)
(./foo2.aux) ("|id -g") [1{/usr/local/texlive/2015/texmf-var/fonts/map/pdftex/up
dmap/pdftex.map}] (./foo2.aux))
264 words of node memory still in use:
2 hlist, 1 vlist, 1 rule, 2 glue, 40 glue_spec, 1 write nodes
avail lists: 1:4,2:12,3:3,4:22,6:11,7:1,9:6
<</usr/local/texlive/2015/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb>
Output written on foo2.pdf (1 page, 8298 bytes).
Transcript written on foo2.log.
>
Das PDF enthält 1000
wie erwartet.
TL 2015 auf Linux Mint 12.2
Antwort1
Der Fehler liegt nicht an breqn
, sondern daran, dass es automatisch geladen wird. Es hat mit beidem calc
nichts zu tun , da es sich um das Primitiv handelt und im Kernel von LaTeX definiert ist.etoolbox
\@@input
\input
Hier ist ein wirklich minimales Beispiel:
\documentclass{article}
\usepackage{calc}
\makeatletter
\newcommand{\shellcommand}[1]{\@@input"|#1"}
\makeatother
\newcounter{c}
\begin{document}
\setcounter{c}{\shellcommand{id -g}}
\arabic{c}
\end{document}
Das Problem scheint darin zu liegen, wie calc
neu definiert wird \setcounter
, sodass -
als Minuszeichen angesehen wird und natürlich alles kaputt geht. Hier ist eine Problemumgehung: Berechnen Sie zuerst den benötigten Wert und speichern Sie ihn in einem temporären Makro.
\documentclass{article}
\usepackage{xparse,catchfile}
\usepackage{calc}
\makeatletter
\DeclareExpandableDocumentCommand{\shellcommand}{om}{%
\IfNoValueTF{#1}
{\@@input"|#2"}
{\CatchFileEdef#1{"|#2"}{}}%
}
\makeatother
\newcounter{c}
\begin{document}
\shellcommand[\temp]{id -g}
\setcounter{c}{\temp}
\arabic{c}
\end{document}
Auf meinem Rechner wird 20 ausgedruckt.