我正在寻找一个可以通过替换某些标头中声明的符号值来评估符号表达式的乳胶包。例如,在这些方程组中,如您所见,我通过替换 R、L 和 C 的值得到了 p1、p2 的某些值。
这里我必须在 latex 软件之外计算 p1,p2 的值,然后手动将它们输入到 (17) 中。
我正在寻找一个功能,我可以在代码开始时声明一些特殊变量 R、C 和 L 的值,然后如果我使用一些选项告诉编译器替换数值,p1、p2 将自动在公式 (17) 中进行评估(我想象类似于:\begin{equation}{evauate = 1}\end{equation})这将为我节省大量时间,因为我经常在这些简单的公式中犯计算错误,并且错误会在所有后续公式中传播,从而造成大量不必要的时间浪费。
我听说在 tikz 包中我们可以绘制函数,所以我希望这也可能已经实现。
谢谢!
答案1
这里可能有点过度,但另一种可能性是使用该sagetex
包,这需要安装 SageMath。下面的源代码是在 TeXShop 中使用 pdflatex 处理的,因此包含了第一行中的指令;在其他环境中,您需要sage
直接从命令行运行该命令。
% !TEX TS-program = sage
\documentclass{article}
\usepackage{amsmath,amsfonts}
\usepackage{sagetex}
\begin{document}
\begin{sageblock}
L=1;C=1;R=4;
p1 = -R/(2*L) + sqrt(R^2/(L^2) - 4/(L*C))/2
p2 = -R/(2*L) - sqrt(R^2/(L^2) - 4/(L*C))/2
\end{sageblock}
\begin{align*}
p_{1} &= \sage{p1} & p_{2} &= \sage{p2},
\\
p_{1} &\approx \sage{n(p1)} & p_{2} &\approx \sage{n(p2)},
\end{align*}
\end{document}
答案2
您可以使用pgfmath
内置的tikz
:
代码:
\documentclass{article}
\usepackage{pgfmath}% not needed if inckuding `tikz` or `pgfplots`
\newcommand{\ComputeValue}[5][+]{%
%% #1 = + | -
%% #2 = macro to contain value
%% #3 = R
%% #4 = L
%% #5 = C
\pgfmathsetmacro{#2}{%
-(#3)/(2 * (#4))
#1 %% Choose + or - (default is + if not specified)
sqrt(((#3)/(#4))^2 - 4/((#4)*(#5))) / 2
}%
}%
\newcommand{\ValueR}{4}
\newcommand{\ValueL}{1}
\newcommand{\ValueC}{1}
\begin{document}
\ComputeValue{\ValueP}{\ValueR}{\ValueL}{\ValueC}
\verb|\ValueP| is \ValueP.
\ComputeValue[-]{\ValueQ}{\ValueR}{\ValueL}{\ValueC}
\verb|\ValueQ| is \ValueQ.
\end{document}
答案3
我觉得我应该将其添加为演示包的答案,numerica
而不仅仅是评论,因为我觉得这可能是最简单的答案。我注意到您的示例包含一个复数,我认为不numerica
支持这一点。我鼓励您在必要时联系开发人员。他很活跃,非常乐于讨论。
梅威瑟:
% !TEX program = lualatexmk
% !TEX encoding = UTF-8 Unicode
\documentclass{article}
\usepackage{numerica}
\begin{document}
\textsf{numerica} has many options so please do read the documentation carefully.
Note how \verb|\eval*| suppresses the variable list. Using \verb|xx| forces
scientific notation to mantissas in the interval \( [1,10) \); the number sets
the number of displayed figures.
\begin{align*}
p_1 &= \eval{ -\frac{R}{2L} + \frac{\sqrt{R^2/L^2 - 4/L*C}}{2} }[R=4,L=1,C=1][10] \\
p_2 &= \eval*{ -\frac{R}{2L} - \frac{\sqrt{R^2/L^2 - 4/L*C}}{2} }[R=4,L=1,C=1][10]
\end{align*}
\begin{align*}
p_1 &= \eval{ -\frac{R}{2L} + \frac{\sqrt{R^2/L^2 - 4/L*C}}{2} }[R=4,L=1,C=1][6xx] \\
p_2 &= \eval*{ -\frac{R}{2L} - \frac{\sqrt{R^2/L^2 - 4/L*C}}{2} }[R=4,L=1,C=1][6xx]
\end{align*}
You can define and store variables as macros. See the documentation for details.
\NewDocumentCommand{\myR}{}{4} % or \newcommand{\myR}{4} or \def\myR{4}
\NewDocumentCommand{\myL}{}{1} % or \newcommand{\myL}{1} or \def\myL{1}
\NewDocumentCommand{\myC}{}{1} % or \newcommand{\myC}{1} or \def\myC{1}
\macros{\myR,\myL,\myC}
\begin{align*}
p_1 &= \eval{ -\frac{\myR}{2\myL} + \frac{\sqrt{\myR^2/\myL^2 - 4/\myL*\myC}}{2} }[6xx] \\
p_2 &= \eval*{ -\frac{\myR}{2\myL} - \frac{\sqrt{\myR^2/\myL^2 - 4/\myL*\myC}}{2} }[6xx]
\end{align*}
\end{document}
这是输出。