我是 Latex 的新手,有软件开发背景。我发现自动生成公式和列表的能力令人印象深刻,但由于字母略大,很难正确格式化结果。请原谅我不熟悉元素之间的差异,因为我仍在反复试验。
我该如何为这些循环生成的方程式定义自定义字体大小?
这是我的文档,它确实有效:
\documentclass{article}
\usepackage{tikz}
\usepackage[nomessages]{fp}
\usepackage{etoolbox}
\usepackage{calc}
\usepackage{mathtools}
\def\square[#1]{#1^2}
\gdef\squareresult{}%
\foreach \i in {0,...,6}{%
\FPeval\A{\square[i]}%
\FPeval\A{round(A:0)}%
\xappto\squareresult{ \pmb{\A} = \i^2 = \i \cdot \i \\ }%
}%
\begin{document}
\begin{align*}
\squareresult
\end{align*}
\end{document}
我认为 Latex 在使用 foreach 循环时似乎存在问题\begin{equation} \squareresult \end{equation}
(在这种情况下,每个公式后没有换行符)。使用gather*
代替 似乎align*
也是一个可行的选择,但坦率地说,我不知道哪一个是首选 - 以及原因。一些来源建议使用\[ \textstyle
(或其他样式) - 我无法在此设置中使用它,因为它似乎只适用于equation
。
总的来说:是否有首选方法可以正确地执行 foreach 循环,并在每行后换行并应用特定的样式集?
答案1
使用\noexpand\bm
而不是(在 之后\pmb
加载包)。bm
mathtools
然而,你可以做得更好。
\documentclass{article}
\usepackage{mathtools,bm}
%\usepackage{xparse} % not needed with LaTeX 2020-10-01 or later
\ExplSyntaxOn
\NewDocumentCommand{\showexpr}{mmmm}
{% #1 = evaluation, #2 = output format, #3 = start, #4 = end
\qohelet_showexpr:nnnn { #1 } { #2 } { #3 } { #4 }
}
\seq_new:N \l__qohelet_lines_seq
\cs_new_protected:Nn \qohelet_showexpr:nnnn
{
% the function to evaluate the expression according to the given template
\cs_set:Nn \__qohelet_eval:n { \fp_eval:n { #1 } }
% an alias for the second argument
\cs_set_eq:NN \eval \__qohelet_eval:n
% the function to print the output according to the given template
\cs_set:Nn \__qohelet_output:n { #2 }
% clear the sequence where we store the lines
\seq_clear:N \l__qohelet_lines_seq
% loop in the given range
\int_step_inline:nnn { #3 } { #4 }
{
% add the corresponding line for the current value ##1
\seq_put_right:Nn \l__qohelet_lines_seq { \__qohelet_output:n { ##1 } }
}
% output the results
\begin{align*}
\seq_use:Nn \l__qohelet_lines_seq { \\ }
\end{align*}
}
\ExplSyntaxOff
\begin{document}
\showexpr
{#1^2}
{\bm{#1^2}&=\eval{#1}=#1\cdot#1}
{0}{6}
\showexpr
{#1^2-2*#1+3}
{#1^2-2\cdot#1+3&=\eval{#1}}
{1}{4}
\showexpr
{round(sqrt(#1),4)}
{\sqrt{#1}&=\eval{#1}}
{1}{6}
\end{document}
第一个参数\showexpr
是要计算的表达式,使用相当自然的语法。第二个参数是输出的模板,其中\eval{#1}
代表计算结果。第三和第四个参数是范围的起点和终点。
请注意,第一个和第二个参数都#1
代表循环中的当前值。
我们\seq_use:Nn
确保在末尾不会添加空行,这在您的代码中会发生(即使使用 进行修复\noexpand
)。