将数学函数传递给 sagetex 中的 sage 函数

将数学函数传递给 sagetex 中的 sage 函数

有人可以帮我获取情节吗,我已经尝试了很多方法,比如创建function('f')然后传递它,Q1 = question(1, f(x+1))但唯一有效的是:output += r"\sageplot{plot(x+1, figsize = 2)} \\\\"我不想要:

这是我的最小代码:

\documentclass{article}
 \usepackage{sagetex}
 \usepackage{multicol}
 \usepackage[margin=0.5in]{geometry}
 \usepackage{amsmath}
 \newcommand\answerbox{\fbox{\rule{1in}{0pt}\rule[-0.5ex]{0pt}{4ex}}}

  \begin{document}


  \begin{sagesilent}
   def question(n, f):
     output = r""
     output += r"\bgroup"
     output +=r"\noindent\textbf{Question %s} \\\\" %(n)
     output +=r"\sageplot{plot(f, xmin =-2, xmax=2, ymin=-2, ymax=3, figsize = 2)} \\\\"
     output += r"\textbf{Equation:}"
     output += r"\answerbox \\\\"
     output += r"\egroup"
     return output
  \end{sagesilent}

  \begin{sagesilent}
   Q1 = question(1, 1+x)
   Q2 = question(2, 1+x^2)

  \end{sagesilent}
 \setlength{\columnsep}{2.0in} %Column separation.
 \begin{multicols*}{2}
 \sagestr{Q1}
 \sagestr{Q2}
 \end{multicols*}

 \end{document}

答案1

一种方法是定义 LaTeX 环境“问题”。

\documentclass{article}

\usepackage[margin=0.5in]{geometry}
\usepackage{multicol}
\usepackage{amsmath}
\usepackage{url}
\usepackage{sagetex}

\title{What function is this a plot of?}
\author{TeX Stack Exchange question 535740}
\date{\url{https://tex.stackexchange.com/q/535740}}

\newenvironment{question}[8]{%
%% usage: \question{number}{function}{xmin}{xmax}{ymin}{ymax}{aspectratio}{figsize}
\bigskip\noindent
\textbf{Question #1}\par
\sageplot{plot(lambda x: #2, (#3, #4), ymin=#5, ymax=#6, aspect_ratio=#7, figsize=#8)}\par
\textbf{Equation: }\answerbox\par\medskip%
}

\newcommand\answerbox{\fbox{\rule{1.5in}{0pt}\rule[-0.5ex]{0pt}{4ex}}}

\begin{document}%
\maketitle

\setlength{\columnsep}{2.0in} %Column separation.
\begin{multicols*}{2}

\question{1}{1 + x}{-2}{2}{-1}{3}{1}{4}

\question{2}{1 + x^2}{-2}{2}{0}{5}{0.8}{4}

\end{multicols*}

\end{document}

答案2

看起来你已经按照 Cocalc 的回答这个问题。要使此操作有效,必须将变量 n 和 f 替换到字符串中。例如,您在行 中执行了此操作output +=r"\noindent\textbf{Question %s} \\\\" %(n)。HavingQuestion n将不起作用。出于同样的原因,您不能 plot(f在下一行中输入。您需要plot(%s并替换 f。我在下面修改了您的代码:

\documentclass{article}
\usepackage{sagetex}
\usepackage{multicol}
\usepackage[margin=0.5in]{geometry}
\usepackage{amsmath}
\newcommand\answerbox{\fbox{\rule{1in}{0pt}\rule[-0.5ex]{0pt}{4ex}}}
\begin{document}
\begin{sagesilent}
    def question(n, f):
        output = r""
        output += r"\bgroup"
        output +=r"\noindent\textbf{Question %s} \\\\"%(n)
        output +=r"\sageplot{plot(%s, xmin =-2, xmax=2, ymin=-2, ymax=3, figsize = 2)} \\\\"%(f)
        output += r"\textbf{Equation:}"
        output += r"\answerbox \\\\"
        output += r"\egroup"
        return output

    Q1 = question(1, 1+x)
    Q2 = question(2, 1+x^2)
\end{sagesilent}
\setlength{\columnsep}{2.0in} %Column separation.
\begin{multicols*}{2}
\sagestr{Q1}
\sagestr{Q2}
\end{multicols*}
\end{document}

这将给你这个输出: 在此处输入图片描述

相关内容