Последний раз редактировалось andrewkhv 03.08.2013, 05:33, всего редактировалось 2 раз(а).
Полнофункциональный пример использования пакета answers. Позволяет создать сборник задач любого размера. Ответ/решение к задаче набирается вместе с ней, потом все ответы/решения собираются в конце сборника. Почему-то у меня пакет именован myanswers.sty, хотя в нем самом заявлено название answers.sty - уже не помню, дело было лет 6 назад.
- \documentclass[a4paper]{book}
- \usepackage[cp1251]{inputenc}
- \usepackage[T2A]{fontenc}
- \usepackage{amssymb}
- \usepackage{latexsym}
- \usepackage{amsmath,theorem}
- \usepackage{indentfirst}
- \usepackage[english,russian]{babel}
- \usepackage{multicol}
- \theorembodyfont{\upshape}
- \newcounter{var}
- \newcounter{z}[var]
- \def\z{\addtocounter{z}{1}{\hskip15pt\bf\arabic{z}.\hskip10pt}}
- \def\vs{\vskip4mm plus 10mm}
- \usepackage{myanswers}
- \usepackage{ifthen}
- \usepackage[russian]{varioref}
- \usepackage{endnotes}
-
- \Newassociation{ans}{otvet}{answers}
- \Newassociation{hint}{ukazanie}{hints}
-
- \newtheorem{ex}{}
- \renewcommand{\theex}{\arabic{ex}.}
-
- \newtheorem{subex}{}
- \newtheorem{alphedex}{}
- \makeatletter
- \@addtoreset{subex}{ex}
- \@addtoreset{alphedex}{ex}
- \makeatother
- \renewcommand{\thesubex}{\arabic{ex}.\arabic{subex}.}
- \renewcommand{\thealphedex}{\alph{alphedex})}
-
-
- \begin{document}
- \Opensolutionfile{answers}[answers]
- \Opensolutionfile{hints}[hints]
-
- % \Writetofile{answers}{\protect\section{Ответы}}
- % \Writetofile{hints}{\protect\section{Указания и решения}}
-
- \Writetofile{answers}{\protect\chapter*{Ответы}}
- \Writetofile{hints}{\protect\chapter*{Указания и решения}}
-
-
- \tableofcontents
- \newpage
-
- \chapter*{Предисловие}\addcontentsline{toc}{chapter}{Предисловие}
- В данном примере мы покажем, как создать полноценый сборник задач
- с ответами и указаниями и решениями задач. Задачи нумеруются
- последовательно, и предусмотрена возможность создавать "подзадачи"
- как самостоятельные (subex) (например, \ref{sqrt}), так и
- "буквенные варианты" в рамках общей "родительской задачи" (см.
- задачи \ref{ln}\ref{ln1} и \ref{ln}\ref{ln2}).
- \chapter{Интегральное исчисление}
-
- \section{Задачи начального уровня}
-
- Найти интегралы:
- \begin{ex}\label{fst}
- $\displaystyle \int \frac{1}{x^2-1}\,dx$.
- \begin{ans}
- $\frac{1}{2}\ln\left|\frac{x-1}{x+1}\right|$.
- \end{ans}
- \end{ex}
-
- \begin{ex}
- $\displaystyle\int x^3+\displaystyle\frac{1}{x^3}\,dx$.
- \begin{ans}
- $\frac{1}{2}x^2-\cos x+\sin x$.
- \end{ans}
- \end{ex}
-
- \begin{subex}\label{sqrt}
- $\displaystyle\int x\sqrt[5]{x^2}+\frac{2}{3x}\,dx$.
- \begin{ans}
- 13.
- \end{ans}
- \end{subex}
-
- \begin{subex}
- $\displaystyle\int \sin 2x,dx$.
- \begin{ans}
- $-\frac{1}{2}\cos 2x$.
- \end{ans}
- \end{subex}
-
- \begin{subex}
- $\displaystyle\int \frac{1}{\cos^2 3x}\,dx$.
-
- \begin{ans}
- $\frac{1}{3}\tg 3x$.
- \end{ans}
- \end{subex}
-
- \begin{ex}
- $\displaystyle \int \frac{1}{x^2+2}\,dx$.
- \begin{ans}
- $\frac{1}{\sqrt{2}}\arctg\frac{x}{\sqrt{2}}$.
- \end{ans}
- \end{ex}
-
-
- \begin{ex}\label{ln}
- \begin{alphedex}\label{ln1}%\Writetofile{answers}{\textbf{\theex}}
-
- $\int \frac{1}{x}\,dx$
- \begin{ans}
- $\ln(x)+C$
- \end{ans}
- \end{alphedex}
-
- \begin{alphedex}\label{ln2}
- $\int \frac{1}{2x}\,dx$
- \begin{ans}
- $1/2\ln(x)+C$
- \end{ans}
- \end{alphedex}
- \end{ex}
-
- \section{Сложные задачи}
- \begin{ex}
- $\displaystyle \int \frac{1}{x^4+1}\,dx$
- \begin{hint}
- Выделить полный квадрат в знаменателе
- \end{hint}
- \begin{ans}
- $\frac{1}{4\sqrt 2}\ln\frac{x^2+x\sqrt 2+1}{x^2-x\sqrt
- 2+1}+\frac{1}{2\sqrt 2}\arctg\frac{x\sqrt 2}{1-x^2}$.
- \end{ans}
- \end{ex}
-
-
- \chapter{Дифференциальные уравнения}
- \begin{ex}
- Население города Н. в 1998г составляло 1 млн. жителей, а прирост -
- 40000. Найти население в 2001г, считая, что скорость прироста
- пропорциональна количеству жителей.
- \begin{ans}
- $\approx1127497$ человек.
- \end{ans}
- \begin{hint}
- Обозначим $f(t)$ число жителей, тогда по условию $f(1998)=10^6$.
- Годовой прирост -- это разность между $f(t)$ и $f(1998)$. По
- условию задачи, скорость прироста пропорциональна текущему
- количеству жителей. Скорость прироста -- это его первая
- производная по времени, $(f(t)-f(1998))'=f'(t)$. Таким образом,
- получаем следующую задачу Коши для обыкновенного диф уравнения:
- $$
- f'(t)=kf(t)
- $$
- $$
- f(1998)=10^6
- $$
- + дополнительное условие
- $$
- f'(1998)=40000
- $$
- $k$ -- коэфф. пропорциональности. Это
- уравнение с разделяющимися переменными, интегрируя, получим:
- $$
- \ln(f(t))=kt+C
- $$
-
- Подробно:
- $$
- {d(f(t))\over dt}=kf(t)
- $$
- $$
- {df(t)\over f(t)}=k\,dt
- $$
-
- $$
- \int{df(t)\over f(t)}=\int k\,dt
- $$
-
- $$
- \ln(f(t))=kt+C
- $$
- Модуль под логарифмом не ставим, т.к. $f(t)>0$ по смыслу задачи.
- Используя начальное условие, получим
- $$
- \ln(10^6)=1998k+C,
- $$
- $$
- C=6\ln 10-1998k
- $$
- $$
- \ln f(t)=kt+6\ln10-1998k=k(t-1998)+6\ln10
- $$
- $$
- f(t)=e^{k(t-1998)+6\ln10}=10^6 e^{k(t-1998)}
- $$
-
-
- Для нахождения $k$ используем условие: в 1998 прирост был 40000:
- $$f'(t)=10^6ke^{k(t-1998)}$$
- $$
- f'(1998)=10^6k=40000 \Rightarrow k=0.04 \Rightarrow
- $$$$
- f(t)=10^6e^{0.04(t-1998)}.
- $$
- Найдём $f(2001)=10^6e^{0.04\cdot3}=1127496.852$, значит, население
- будет $\approx1127497$ человек.
- \end{hint}
- \end{ex}
-
- \begin{ex}
- Найти линию, пересекающую под углом $\alpha$ меридианы пароболоида
- вращения.
- \begin{ans}
- Смотри задачу 1567 в задачнике Гюнтера и Кузьмина :)
- \end{ans}
- \end{ex}
- \Closesolutionfile{answers}
- \Closesolutionfile{hints}
-
- \addcontentsline{toc}{chapter}{Ответы}
- \input{answers}
-
- \addcontentsline{toc}{chapter}{Указания и решения}
- \input{hints}
-
- \end{document}
-
Сам пакет myanswers.sty Код: %% %% This is file `answers.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% answers.dtx (with options: `answers') %% %% Copyright (C) 1990,1994 Mike Piff, University of Sheffield, England %% %% You are not allowed to change this file. %% %% You are NOT ALLOWED to distribute this file alone. You are NOT %% ALLOWED to take money for the distribution or use of this %% file except for a nominal charge for copying etc. %% %% Please address any problems to: %% %% M.Piff@shef.ac.uk %% %% For updates, contact your nearest CTAN site. %%
\NeedsTeXFormat{LaTeX2e}[1996/06/01]
\newif\ifanswerfiles \answerfilestrue \DeclareOption{nosolutionfiles}{\answerfilesfalse \typeout{No answer files being produced}}% \ProcessOptions
\RequirePackage{verbatim} \newcommand{\solutionpoint}{.} \newcommand{\solutionextension}{tex} \newenvironment{Filesave}[1]{% \@bsphack \def\verbatim@processline{}% \Iffileundefined{#1}{}{% \Ifopen{#1}{% \def\verbatim@processline{% \Ifanswerfiles{% \immediate\write\@nameuse{#1@file}% {\the\verbatim@line}% }{}% }% }{}% }% \let\do\@makeother\dospecials \catcode`\^^M\active \catcode`\^^I=12\relax \verbatim@start }{\@esphack} \newcommand{\Writetofile}[2]{% \@bsphack \Iffileundefined{#1}{}{% \Ifopen{#1}{% {% \let\protect\string \Ifanswerfiles{% \immediate\write\@nameuse{#1@file}{#2}% }{}% }% }{}% }% \@esphack } \newcommand{\Ifopen}[3]{% \csname if#1open\endcsname#2\else#3\fi}% \newcommand{\Iffileundefined}[3]{% \csname ifx\expandafter\endcsname \csname #1@file\endcsname\relax #2\else#3\fi} \newcommand{\Ifanswerfiles}[2]{% \ifanswerfiles #1\else #2\fi} \def\Opensolutionfile#1{% \@ifnextchar[{\define@filename{#1}}% {\define@filename{#1}[#1]}}% \def\define@filename#1[#2]{% \global\@namedef{#1@filename}{#2\solutionpoint\solutionextension}% \Ifanswerfiles{% \typeout{Output from handle #1 going to #2.\solutionextension}% }{}% \Iffileundefined{#1}{% \expandafter\newwrite\csname #1@file\endcsname \csname newif\expandafter\endcsname \csname if#1open\endcsname \global\csname #1openfalse\endcsname \expandafter\ifx\csname Open#1hook\endcsname\relax \global\@namedef{Open#1hook}##1{}% \fi \expandafter\ifx\csname Close#1hook\endcsname\relax \global\@namedef{Close#1hook}##1{}% \fi }{}% \let\Tmp\relax \Ifopen{#1}{\typeout{File #1 already open}}{% \Ifanswerfiles{% \immediate\openout\@nameuse{#1@file}=% \@nameuse{#1@filename}% }{}% \global\csname#1opentrue\endcsname \def\Tmp{\@nameuse{Open#1hook}{#1}}% }% \Tmp } \def\Closesolutionfile#1{% \let\Tmp\relax \Iffileundefined{#1}{}{% \Ifopen{#1}{% \Ifanswerfiles{% \immediate\closeout\@nameuse{#1@file}% }{}% \global\csname #1openfalse\endcsname \def\Tmp{\@nameuse{Close#1hook}{#1}}% }{}% }% \Tmp } \def\Readsolutionfile#1{% \Ifanswerfiles{% \Iffileundefined{#1}{}{% \Ifopen{#1}{% \typeout{WARNING: attempt to read open file #1}% }{% \edef\Tmp{% \noexpand\InputIfFileExists {\@nameuse{#1@filename}}{}% {\noexpand\message{File \@nameuse{#1@filename}% \space not found}}% }% \Tmp }% }% }{}% }
\newcommand{\Newassociation}[3]{% \newsolution{#2}% \expandafter\ifx\csname #3opentrue\endcsname\relax \expandafter\newif\csname if#3open\endcsname \fi \newenvironment{#1}{% \Ifanswerfiles{% \let\Tmp\relax \Iffileundefined{#3}{}{% \Ifopen{#3}{% \immediate\write\@nameuse{#3@file}% {\string\begin{#2}\@nameuse{#2params}}% \def\Tmp{\Filesave{#3}}% }{}% }% }{% \edef\Tmp{\noexpand\begin{#2}\@nameuse{#2params}}% }% \csname pre#1\endcsname \Tmp }% {% \Ifanswerfiles{% \Iffileundefined{#3}{}{% \Ifopen{#3}{% \endFilesave% \immediate\write\@nameuse{#3@file}% {\string\end{#2}}% \csname post#1\endcsname }{}% }% }{% \end{#2}% }% }% } %\newcommand{\newsolution}[1]{% % \@ifundefined{#1}{% % \global\@namedef{#1params}{{\Currentlabel}}% % \newenvironment{#1}[1]% % {% % \csname pre#1\endcsname % \trivlist % \item[\hskip\itemsep{\@nameuse{#1label}{##1}}]}% % {\csname post#1\endcsname\endtrivlist}% % \global\@namedef{#1label}##1{\solutionstyle{##1}}% % }{\typeout{WARNING: environment #1 already in use}}% %} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\newsolution}[1]{% \@ifundefined{#1}{% \global\@namedef{#1params}{{\Currentlabel}}% \newenvironment{#1}[1]% {% \csname pre#1\endcsname {\@nameuse{#1label}{##1}}}% {\csname post#1\endcsname}% \global\@namedef{#1label}##1{\solutionstyle{##1}}% }{\typeout{WARNING: environment #1 already in use}}% } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\solutionstyle}[1]{\textbf{#1}} \newcommand{\Currentlabel}{\@currentlabel} \endinput %% %% End of file `answers.sty'.
|