我想在 LaTeX 中实现一种具有两个参数的函数
- 包含百分比的字符串,例如“3.20%”
- 一个整数,例如 2000 结果应该是两个数字的乘积(在本例中为 3.20)
我尝试使用 \directlua 命令来实现这一点,但我没有掌握处理包含特殊字符“%”的字符串的技巧。
我尝试过类似的事情:
\documentclass[11pt,a4paper]{article}
\begin{document}
% I produce the LaTeX document such that the arguments to the calculation get filled in
% directly into the xxx.tex file. Yes I could fill in the value without
Input arguments are
\begin{itemize}
\item percentage: 3.20 \%
\item factor: 2000
\end{itemize}
The result is: \directlua{
s=string.sub('3.20 \%', 1, -3)
tex.sprint( s / 100 * 2000)
}.
\end{document}
答案1
除了使用原始指令外,\luadirect
您还可以使用\luaexec
lua代码包,即可完成工作。换句话说,一旦luacode
加载了包,您需要做的就是\directlua{s=string.sub('3.20 \%', 1, -3)...
用替换\luaexec{s=string.sub('3.20 \%', 1, -3)...
。
\documentclass[11pt,a4paper]{article}
\usepackage{luacode} % for \luaexec macro
\begin{document}
Input arguments are
\begin{itemize}
\item percentage: 3.20 \%
\item factor: 2000
\end{itemize}
The result is:
\luaexec{%
s=string.sub('3.20 \%', 1, -3)
tex.sprint( s * 2000 / 100 )
}.
\end{document}
答案2
您可以使用\@percentchar
\documentclass[fontsize=11pt, paper=a4]{article}
\makeatletter
\let\pc\@percentchar
\makeatother
\begin{document}
% I produce the LaTeX document such that the arguments to the calculation get filled in
% directly into the xxx.tex file. Yes I could fill in the value without
Input arguments are
\begin{itemize}
\item percentage: 3.20 \%
\item factor: 2000
\end{itemize}
The result is: \directlua{s=string.sub('3.20 \pc', 1, -3) tex.sprint( s / 100 * 2000)}.
\end{document}
答案3
专家用户似乎更喜欢使用\directlua
。如果你不太了解 TeX 中类别代码的概念,我建议使用luacode*
环境以避免意外。
%! TEX program = lualatex
\documentclass{article}
\usepackage{luacode}
\begin{document}
% I produce the LaTeX document such that the arguments to the calculation get filled in
% directly into the xxx.tex file. Yes I could fill in the value without
Input arguments are
\begin{itemize}
\item percentage: 3.20 \%
\item factor: 2000
\end{itemize}
The result is:
\begin{luacode*}
s=string.sub('3.20 \\%', 1, -3)
tex.sprint( s / 100 * 2000)
\end{luacode*}
.
\end{document}
另一种方法是
The result is: \luaexec{ s=string.sub('3.20 \\\%', 1, -3) tex.sprint( s / 100 * 2000) }.
有关详细信息,请参阅包的文档luacode
。
另一种选择是(由于有意外,不推荐)
The result is: \directlua{ s=string.sub([[3.20 \%]], 1, -3) tex.sprint( s / 100 * 2000) }.
这将直接传递[[3.20 \%]]
给 Lua,这是有效的 Lua 代码,因为\
内部[[ ... ]]
没有被处理。
答案4
可以使用\directlua
:\luastring
来创造奇迹。也许有人能很好地解释为什么这样做有效。欢迎大家评论为什么这样做有效以及这种方法的优缺点。
\documentclass[11pt,a4paper]{article}
\usepackage{luacode} % for the use of \luastring
\begin{document}
Input arguments are
\begin{itemize}
\item percentage: 3.20 \%
\item factor: 2000
\end{itemize}
The result is: \directlua{
s=\luastring{3.20 \%}
s = string.sub(s, 1, -3)
tex.sprint( s / 100 * 2000)}.
\end{document}