Я пытаюсь написать документ с использованием пакета xsim. Он разделен на главы, и каждая содержит свои упражнения и свои решения, в конце каждой.
В настоящее время структура каждой главы написана вручную, как в , ChManual.tex
но я хотел бы использовать что-то вроде macroChapter.tex
, которое использует \thechapter
в качестве параметра для вызова и печати коллекций, определенных для xsim.
Следующий MWE работает, если вы используете ChManual.tex
, но если вы раскомментируете строки %\input{macroChapter.tex}
глав 1 и 2, он не будет работать, выдавая ошибку: unknown-collection "collCh\thechapter"
.
\documentclass{report}
\usepackage{filecontents}
\usepackage{xsim}
\DeclareExerciseCollection{collCh1}
\DeclareExerciseCollection{collCh2}
\DeclareExerciseCollection{collChManual}
\begin{filecontents}{Ch1.tex}
\begin{exercise}
This is exercise 1 from chapter \thechapter.
\end{exercise}
\begin{solution}
This is solution of exercise 1 from chapter \thechapter.
\end{solution}
\end{filecontents}
\begin{filecontents}{Ch2.tex}
\begin{exercise}
This is exercise 1 from chapter \thechapter.
\end{exercise}
\begin{solution}
This is solution of exercise 1 from chapter \thechapter.
\end{solution}
\begin{exercise}
This is exercise 2 from chapter \thechapter.
\end{exercise}
\begin{solution}
This is solution of exercise 2 from chapter \thechapter.
\end{solution}
\end{filecontents}
\begin{filecontents}{ChManual.tex}
\begin{exercise}
This is exercise 1 from chapter \thechapter (Manual).
\end{exercise}
\begin{solution}
This is solution of exercise 1 from chapter \thechapter (Manual).
\end{solution}
\begin{exercise}
This is exercise 2 from chapter \thechapter (Manual).
\end{exercise}
\begin{solution}
This is solution of exercise 2 from chapter \thechapter (Manual).
\end{solution}
\end{filecontents}
\begin{filecontents}{macroChapter.tex}
This is chapter \thechapter.
\collectexercises{collCh\thechapter}
\input{Ch\thechapter.tex}
\collectexercisesstop{collCh\thechapter}
\printcollection[print=exercises]{collCh\thechapter}
Bla bla bla bla bla bla bla bla bla bla bla.
\printsolutions[chapter=\thechapter,collection=collCh\thechapter]
\end{filecontents}
\begin{filecontents}{manualChapter.tex}
This is chapter Manual.
\collectexercises{collChManual}
\input{ChManual.tex}
\collectexercisesstop{collChManual}
\printcollection[print=exercises]{collChManual}
Bla bla bla bla bla bla bla bla bla bla bla.
\printsolutions[chapter=3,collection=collChManual]
\end{filecontents}
\begin{document}
\chapter{One}
%\input{macroChapter.tex}
\chapter{Two}
%\input{macroChapter.tex}
\chapter{Manual}
\input{manualChapter.tex}
\end{document}
решение1
Это еще один вариант «расширить аргумент перед передачей его следующему макросу».
В частности, вам нужны x
варианты макросов \xsim_start_collection:n
, \xsim_stop_collection:n
а \xsim_print_collection:nn
также адаптированные пользовательские команды:
\ExplSyntaxOn
\RenewDocumentCommand \collectexercises {t!m}
{
\IfBooleanTF {#1}
{ \xsim_start_collection:x {#2} }
{ \xsim_start_collection:n {#2} }
}
\RenewDocumentCommand \collectexercisesstop {t!m}
{
\IfBooleanTF {#1}
{ \xsim_stop_collection:x {#2} }
{ \xsim_stop_collection:n {#2} }
}
\RenewDocumentCommand \printcollection {t!O{}m}
{
\IfBooleanTF {#1}
{ \xsim_print_collection:nx {#2} {#3} }
{ \xsim_print_collection:nn {#2} {#3} }
}
\cs_generate_variant:Nn \xsim_start_collection:n {x}
\cs_generate_variant:Nn \xsim_stop_collection:n {x}
\cs_generate_variant:Nn \xsim_print_collection:nn {nx}
\ExplSyntaxOff
Затем используйте (обратите внимание на восклицательные знаки):
\begin{filecontents}{macroChapter.tex}
This is chapter \thechapter.
\collectexercises!{collCh\thechapter}
\input{Ch\thechapter.tex}
\collectexercisesstop!{collCh\thechapter}
\printcollection![print=exercises]{collCh\thechapter}
Bla bla bla bla bla bla bla bla bla bla bla.
\printsolutions[chapter=\thechapter,collection=collCh\thechapter]
\end{filecontents}
Кстати: я бы предпочел использовать \arabic{chapter}
вместо \thechapter
названий в коллекции – вам нужен номер, а не печатный вывод!