pythontex 和 xlop

pythontex 和 xlop

首先,如果这个问题已经得到回答,我很抱歉,我找不到任何答案!

当我尝试编译这个 MWE 时:

% % % xelatex document.tex
% % % pythontex document.tex
% % % xelatex document.tex



\documentclass[12pt, twocolumn]{article}

\usepackage{xcolor}

\usepackage{xlop}                       % Pour les calculs posés
\opset{decimalsepsymbol={,},carrystyle=\scriptsize\bfseries,
carrysub,lastcarry,offsetcarry=-0.4,
displayintermediary=all,displayshiftintermediary=all}




\usepackage{multicol, pgffor, multido}
\usepackage{amsmath, amssymb}
\usepackage[pyfuture=none, gobble=auto]{pythontex}



\begin{document}

\begin{pycode}
import random
#
a=random.randint(50,1000)
b=random.randint(3,20)
q=a//b
r=a%b
def next():
   a=random.randint(50,1000)
   b=random.randint(3,20)
   q=a//b
   r=a%b
   return a,b,q,r
\end{pycode}

\pyc{a,b,q,r=next()}

$\dfrac{\py{a}}{\py{b}} = \textcolor{red}{\py{q}}+\dfrac{\textcolor{blue}{\py{r}}}{\py{b}}$

\opidiv[voperation=top, dividendbridge,resultstyle=\color{red}, remainderstyle=\color{blue}]{\py{a}}{\py{b}}


\label{LastPage}
\end{document}

我收到错误:

Package PythonTeX Warning: Missing autoprint content on input line 59.

! Improper alphabetic constant.
<to be read again> 
                   \py 
l.61 ...mainderstyle=\color{blue}]{\py{a}}{\py{b}}

但是如果我用 \opidiv.... 注释掉该行,就没有问题了。

如何让它无错误地运行?

谢谢。

答案1

类似的情况在pythontex 手册在第 8 节中故障排除在第 57-59 页。这里使用了的示例siunitx需要扩展其参数(即检查参数内任何宏返回的最终值),并且\py不可扩展。该问题与手册中描述\opidiv的相同。\SI

解决方案也相同:从 Python 构造完整的宏调用,这意味着 Python 变量的值以扩展形式插入到宏字符串中xlop‘看到’了它们。

a这里是使用全局变量和变量的版本b。与手册示例类似,您还可以构建一个从 LaTeX 代码中获取参数的版本。

\documentclass[12pt, twocolumn]{article}

\usepackage{xcolor}

\usepackage{xlop}                       % Pour les calculs posés
\opset{decimalsepsymbol={,},carrystyle=\scriptsize\bfseries,
carrysub,lastcarry,offsetcarry=-0.4,
displayintermediary=all,displayshiftintermediary=all}

\usepackage{multicol, pgffor, multido}
\usepackage{amsmath, amssymb}
\usepackage[pyfuture=none, gobble=auto]{pythontex}

\begin{document}

\begin{pycode}
import random
#
a=random.randint(50,1000)
b=random.randint(3,20)
q=a//b
r=a%b
def next():
   a=random.randint(50,1000)
   b=random.randint(3,20)
   q=a//b
   r=a%b
   return a,b,q,r

def xlopdif():
   return r'\opidiv[voperation=top, dividendbridge,resultstyle=\color{red}, remainderstyle=\color{blue}]{' + str(a) + '}{' + str(b) +'}'
\end{pycode}

\pyc{a,b,q,r=next()}

\section{dfrac version}
$\dfrac{\py{a}}{\py{b}} = \textcolor{red}{\py{q}}+\dfrac{\textcolor{blue}{\py{r}}}{\py{b}}$

\section{xlop version}
\py{xlopdif()}

\label{LastPage}
\end{document}

结果:

在此处输入图片描述

答案2

一个不太冗长的替代方法是使用pys命令(或pysub环境)。

% % % xelatex document.tex
% % % pythontex document.tex
% % % xelatex document.tex



\documentclass[12pt, twocolumn]{article}

\usepackage{xcolor}

\usepackage{xlop}                       % Pour les calculs posés
\opset{decimalsepsymbol={,},carrystyle=\scriptsize\bfseries,
carrysub,lastcarry,offsetcarry=-0.4,
displayintermediary=all,displayshiftintermediary=all}




\usepackage{multicol, pgffor, multido}
\usepackage{amsmath, amssymb}
\usepackage[pyfuture=none, gobble=auto]{pythontex}



\begin{document}

\begin{pycode}
import random
#
a=random.randint(50,1000)
b=random.randint(3,20)
q=a//b
r=a%b
def next():
   a=random.randint(50,1000)
   b=random.randint(3,20)
   q=a//b
   r=a%b
   return a,b,q,r
\end{pycode}

\pyc{a,b,q,r=next()}

$\dfrac{\py{a}}{\py{b}} = \textcolor{red}{\py{q}}+\dfrac{\textcolor{blue}{\py{r}}}{\py{b}}$

\pys{\opidiv[voperation=top, dividendbridge,resultstyle=\color{red}, remainderstyle=\color{blue}]{!{a}}{!{b}}}


\label{LastPage}
\end{document}

相关内容