首先,如果这个问题已经得到回答,我很抱歉,我找不到任何答案!
当我尝试编译这个 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}