Babel 的法语选项与 SageTeX 和 `\addplot` 混淆

Babel 的法语选项与 SageTeX 和 `\addplot` 混淆

我正在尝试使用pgfplots一些 python 输出轻松绘图。我真的不喜欢matplotlib2tikz默认行为,即复制 matplotlib 的默认参数,而且我找不到如何覆盖它。我想要我的基本轴,所以所有的自定义配置都会在我的\pgfplotsset{}.

所以我用 python 做了一些基本函数,并用 调用它们sagetex。我喜欢这个包,因为我可以加载所有导入并在文档的任何位置访问结果。它几乎完美运行,除了 和babelfrench 选项。这是一个 MWE :

\documentclass[tikz]{standalone}
\usepackage{sagetex}
\usepackage{pgfplots}
  \pgfplotsset{compat=1.13}

\usepackage[french]{babel}     %<--- Any one of these make it fail
%\usepackage[frenchb]{babel}   %<--- This 
%\usepackage[francais]{babel}  %<--- This 

%\usepackage[english]{babel}   %<--- But this one is okay.

\begin{document}
%Import python function
\begin{sagesilent}

############## python code
def addplot_coordinates(*args, **kwargs):
  if len(kwargs) is 0:
    code = [r'\addplot coordinates {']
  else:
    code = [r'\addplot[']
    for key, value in kwargs.items():
      code.append('  {0} = {1},'.format(key, str(value)))
    code.append('  ] coordinates {')
  while True:
    try:
      value = [str(x.pop()) for x in args]
    except IndexError:
      break
    line = '    ( ' + ' , '.join(value) + ' )'
    code.append(line)
  code.append(r'} ;')
  return '\n'.join(code)

# Print a test in standard output during sage compilation to be sure it works
print(addplot_coordinates([1,3,2,4], [2,5,3,2], draw='black'))
############## end of python code

\end{sagesilent}

\begin{tikzpicture}
    \begin{axis}

      % This plot works fine
      \addplot[
        draw = blue,
        ] coordinates {
          ( 4 , 2 ) ( 2 , 1 ) ( 3 , 2 ) ( 1 , 1 )
      } ;

      % This plots fails
      \sagestr{addplot_coordinates([1,2,3,4], [4,3,4,3], draw='red')}

    \end{axis}
\end{tikzpicture}
\end{document}

不使用babel或使用英语选项,都可以编译(pdflatex、sage、pdflatex)。但使用其中一个法语选项时,我在第二次 pdflatex 编译期间出现此错误:

Runaway argument?
 ;{}{}{}\null \fi \@safe@activesfalse \end {NoHyper}\@ifundefined {r@\ETC.
! File ended while scanning use of \pgfplots@addplotimpl@coordinates.
<inserted text> 
              \par 
<*> TestBug.tex

我发现SageTex 手册关于NoHyper环境(第 22 页),说出现了问题,但我不明白,好像我应该用某种东西保护我的代码。

值得一提的是,只要满足以下条件,一切都会好起来:

  • 我没有调用\addplot命令
  • 我使用其他babel选项

有人知道会发生什么吗?另外,我完全可以编写这个 pgf-python 接口,因为它可以让我更好地控制我所做的事情,但请随时给我更好的建议。

感谢您的时间!

答案1

事实上,这只是一个简单的babel问题tikz

正如 Zarko 在评论中所建议的那样,添加:

\usetikzlibrary{babel}

解决了问题。

相关内容