aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Fuhlbrück2022-02-09 13:46:46 +0100
committerFrank Fuhlbrück2022-02-09 13:46:46 +0100
commitb216df0bff1f24aa24e8039daea663dc64e3c1bd (patch)
treef99de4f7f7f5b993263fc36e6191f7fa5a50db6e
parent8d712f0899f689942f0ae7e37ff36bc0f64dca25 (diff)
downloadexercisesheets-b216df0bff1f24aa24e8039daea663dc64e3c1bd.tar.gz
exercisesheets-b216df0bff1f24aa24e8039daea663dc64e3c1bd.tar.bz2
exercisesheets-b216df0bff1f24aa24e8039daea663dc64e3c1bd.zip
inlcudelexercise at skipping it
-rw-r--r--examples/exercises/exshexample-ex1.tex4
-rw-r--r--examples/exercises/exshexample-ex2.lua4
-rw-r--r--examples/exshexample-ex1.tex4
-rw-r--r--examples/exshexample.tex4
-rw-r--r--exercisesheets.sty131
5 files changed, 111 insertions, 36 deletions
diff --git a/examples/exercises/exshexample-ex1.tex b/examples/exercises/exshexample-ex1.tex
new file mode 100644
index 0000000..2e91246
--- /dev/null
+++ b/examples/exercises/exshexample-ex1.tex
@@ -0,0 +1,4 @@
+\begin{exercise}
+ Include an exercise from an external file.
+\end{exercise}
+
diff --git a/examples/exercises/exshexample-ex2.lua b/examples/exercises/exshexample-ex2.lua
new file mode 100644
index 0000000..1506e26
--- /dev/null
+++ b/examples/exercises/exshexample-ex2.lua
@@ -0,0 +1,4 @@
+return exercise {
+ task = [[Include an exercise via the Lua interface.]]
+}
+
diff --git a/examples/exshexample-ex1.tex b/examples/exshexample-ex1.tex
deleted file mode 100644
index e538173..0000000
--- a/examples/exshexample-ex1.tex
+++ /dev/null
@@ -1,4 +0,0 @@
-\begin{exercise}
-
-\end{exercise}
-
diff --git a/examples/exshexample.tex b/examples/exshexample.tex
index 4db32cd..9d507b5 100644
--- a/examples/exshexample.tex
+++ b/examples/exshexample.tex
@@ -9,7 +9,8 @@
%patchenumerate is the deafault
\usepackage[patchenumerate=true,beamerwithheadline,
- beamercompatibility]%
+ beamercompatibility,
+ exercisespath=exercises]%
{exercisesheets}
\usepackage{varioref}
\usepackage{hyperref}
@@ -47,6 +48,7 @@ only={-}
date={Novanuar 42, -2022},title={First Sheet}]
\includeexercise*{exshexample-ex1}
+ \includeLexercise*{exshexample-ex2}
\begin{exercise}[points={many, many},firstline={Read the manual.}]
\end{exercise}
diff --git a/exercisesheets.sty b/exercisesheets.sty
index d096e54..501251a 100644
--- a/exercisesheets.sty
+++ b/exercisesheets.sty
@@ -659,15 +659,16 @@
\long\def\exsh@skipstuff#1{%
\exsh@ifsingletoken{#1}{%
\ifstrequal{#1}{\begin}{\exsh@skipstuff@begin}{%
- \ifstrequal{#1}{\end}{\exsh@skipstuff@end}{%
+ \ifstrequal{#1}{\end}{\exsh@skipstuff@end}{%
\ifstrequal{#1}{\includeexercise}{\exsh@skipstuff@incex}{%
+ \ifstrequal{#1}{\includeLexercise}{\exsh@skipstuff@incLex}{%
\ifstrequal{#1}{\label}{\exsh@skipstuff@label}{%
\ifstrequal{#1}{\subtask}{\exsh@skipstuff@subtask}{%
\ifstrequal{#1}{\input}{\exsh@skipstuff@input}{%
\ifstrequal{#1}{\exsh@skipstuff@endfile}{\currfile@pop\exsh@skipstuff}{%
\ifstrequal{#1}{\setcounter}{\expandafter\exsh@skipstuff\setcounter}{%
\ifstrequal{#1}{\item}{\ifdef{\@enumctr}{\exsh@hyper@itemtrue\refstepcounter{\@enumctr}}{}}{}%
- \pgfkeysvalueof{/exsh/custom skip macro}{#1}}}}}}}}}%
+ \pgfkeysvalueof{/exsh/custom skip macro}{#1}}}}}}}}}}%
}{%
\exsh@skipstuff#1%
}%
@@ -745,16 +746,32 @@
}
\newcommand{\exsh@skipstuff@incex@}[2][]{%
-\exsh@skipstuff\input{%
- \ifdefvoid{\exsh@exercisespath}{}{\exsh@exercisespath/}#2}%
+ \exsh@skipstuff\input{%
+ \ifdefvoid{\exsh@exercisespath}{}{\exsh@exercisespath/}#2}%
}
\newcommand{\exsh@skipstuff@incex@@}[2][]{%
-\refstepcounter{section}
-\exsh@autolabel{ex:#2}
-\exsh@skipstuff
+ \refstepcounter{section}
+ \exsh@autolabel{ex:#2}
+ \exsh@skipstuff
+}
+
+\def\exsh@skipstuff@incLex{%
+ \@ifstar\exsh@skipstuff@incLex@@\exsh@skipstuff@incLex@%
}
+\newcommand{\exsh@skipstuff@incLex@}[2][]{%
+ \exsh@dlua{
+ local prefix =
+ "\ifdefvoid{\exsh@exercisespath}{}{\exsh@exercisespath/}"
+ exsh_cur_exercise=dofile(prefix .. "#2.lua")
+ }%
+ \expandafter\exsh@skipstuff%
+ \exsh@dlua{exsh_texprintlines(exsh_cur_exercise)}%
+}
+
+\let\exsh@skipstuff@incLex@@\exsh@skipstuff@incex@@
+
%%%%%%%%%%%%%%% BEGIN BEAMER-SPECIFIC: %%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ifexsh@beamer
\def\exsh@sheethead{%
@@ -1043,40 +1060,93 @@
\fi
%%%%%%%%%%%%%%% END BEAMER-SPECIFIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%includeoverride is not part of the public interface
\exshset{includeoverride/.style={}}
\def\includeexercise{%
\@ifstar\exsh@includeexercise@\exsh@includeexercise%
}
\newcommand{\exsh@includeexercise}[2][]{%
-\ifbool{exsh@filenameasexercisename}{%
- \exshset{includeoverride/.style={name={#2},#1}}%
-}{%
- \exshset{includeoverride/.style={#1}}%
-}%
-\input{\ifdefvoid{\exsh@exercisespath}{}{\exsh@exercisespath/}#2}
-\exshset{includeoverride/.style={}}
+ \ifbool{exsh@filenameasexercisename}{%
+ \exshset{includeoverride/.style={name={#2},#1}}%
+ }{%
+ \exshset{includeoverride/.style={#1}}%
+ }%
+ \input{\ifdefvoid{\exsh@exercisespath}{}{\exsh@exercisespath/}#2}
+ \exshset{includeoverride/.style={}}
}
\newcommand{\exsh@includeexercise@}[2][]{%
-\ifbool{exsh@filenameasexercisename}{%
- \exshset{includeoverride/.style={name={#2},#1}}%
-}{%
- \exshset{includeoverride/.style={#1}}%
-}%
-\begingroup
-%auto labelling is still allowed, but other labels are forbidden
-%here we may use \let as the definition is close to its use
-\let\exsh@autolabel\label
-\def\label##1{%
- \PackageError{exercisesheets}{\string\label{##1}\space
- inside \string\includeexercise*}{}%
-}
-\input{\ifdefvoid{\exsh@exercisespath}{}{\exsh@exercisespath/}#2}
-\endgroup
-\exshset{includeoverride/.style={}}
+ \ifbool{exsh@filenameasexercisename}{%
+ \exshset{includeoverride/.style={name={#2},#1}}%
+ }{%
+ \exshset{includeoverride/.style={#1}}%
+ }%
+ \begingroup
+ %auto labelling is still allowed, but other labels are forbidden
+ %here we may use \let as the definition is close to its use
+ \let\exsh@autolabel\label
+ \def\label##1{%
+ \PackageError{exercisesheets}{\string\label{##1}\space
+ inside \string\includeexercise*}{}%
+ }
+ \input{\ifdefvoid{\exsh@exercisespath}{}{\exsh@exercisespath/}#2}
+ \endgroup
+ \exshset{includeoverride/.style={}}
}
+
+\def\includeLexercise{%
+ \@ifstar\exsh@includeLexercise@\exsh@includeLexercise%
+}
+
+\ifluatex
+\newcommand{\exsh@includeLexercise}[2][]{%
+ \ifbool{exsh@filenameasexercisename}{%
+ \exshset{includeoverride/.style={name={#2},#1}}%
+ }{%
+ \exshset{includeoverride/.style={#1}}%
+ }%
+ \directlua{
+ local prefix =
+ "\ifdefvoid{\exsh@exercisespath}{}{\exsh@exercisespath/}"
+ exsh_cur_exercise=dofile(prefix .. "#2.lua")
+ exsh_texprintlines(exsh_cur_exercise)
+ }%
+ \exshset{includeoverride/.style={}}%
+}
+
+\newcommand{\exsh@includeLexercise@}[2][]{%
+ \ifbool{exsh@filenameasexercisename}{%
+ \exshset{includeoverride/.style={name={#2},#1}}%
+ }{%
+ \exshset{includeoverride/.style={#1}}%
+ }%
+ \begingroup
+ %auto labelling is still allowed, but other labels are forbidden
+ %here we may use \let as the definition is close to its use
+ \let\exsh@autolabel\label
+ \def\label##1{%
+ \PackageError{exercisesheets}{\string\label{##1}\space
+ inside \string\includeLexercise*}{}%
+ }
+ \directlua{
+ local prefix =
+ "\ifdefvoid{\exsh@exercisespath}{}{\exsh@exercisespath/}"
+ exsh_cur_exercise=dofile(prefix .. "#2.lua")
+ exsh_texprintlines(exsh_cur_exercise)
+ }%
+ \endgroup
+ \exshset{includeoverride/.style={}}
+}
+\else
+ \newcommand{\exsh@includeLexercise}[2][]{
+ \refstepcounter{section}
+ Lexercise needs Lua\LaTeX!
+ }
+ \let\exsh@includeLexercise@\exsh@includeLexercise
+\fi
+
\AfterPackage*{varioref}{
\labelformat{section}{\pgfkeysvalueof{/exsh/strings/exercise}~\arabic{section}}
}
@@ -1617,7 +1687,6 @@
\fi
}
-%TODO:setcounter without luatex
\def\exsh@skipstuff@Lexercise{\exsh@lua@catcodesBG\exsh@start@skip@Lexercise}%
\def\exsh@start@lframed@{\exsh@lua@catcodesBG\exsh@start@lframed}