法语选项、babel 包、babel tikzlibrary 和 etoolbox 包之间的冲突

法语选项、babel 包、babel tikzlibrary 和 etoolbox 包之间的冲突

抱歉,标题太模糊了。我已尽力将其表达得尽可能清楚。

在我的文档中,我使用包设置语言选项babel,为了避免一些麻烦,我还必须加载babeltikzlibrary。除了我想在最后显示的内容外,我的绘图一切都很好。为了实现这一点,我加载了etoolbox包并使用\AtEndDocument宏。此时,pdfLaTeX 给出以下错误:File ended while scanning use of \pgfplots@addplotimpl@expression@curly.

经过一番研究,似乎问题出在french我使用的选项上。我通过对代码进行故障排除将代码简化为 MWE,但我找不到解决方案。无论是使用shorthanoff{;}还是使用相关帖子中的其他修复方法。

以下是一些观察结果:

  • 评论babeltikzlibrary 解决了 MWE 中的问题,但我想保留它,否则我的绘图会出现许多其他错误;
  • 删除该french选项解决了问题,但学生在法语物理方面已经遇到了一些困难。我更喜欢保留该选项 :]

您能帮我找到如何在文档末尾显示 tikzdrawings 吗?

谢谢你的帮助。

M(N)WE:

\documentclass[french]{book}
\usepackage{babel}
\usepackage{etoolbox} 
\usepackage{tikz}
\usetikzlibrary{babel}

\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\begin{document}
\chapter{foo}
\section{bar}
You have to solve $P=NP$ problem. Good luck !

\AtEndDocument{%
    \subsection*{Resolution of the homework}
    Here is my resolution :

    \begin{tikzpicture}
    \begin{axis}
        \addplot {x};
    \end{axis}
    \end{tikzpicture}
}
\end{document}

答案1

添加\shorthandoff{;} 禁用\AtEndDocument速记。

里面的争论已经太迟了,那时 catcode 已经被冻结了。

答案2

使用 a\savebox来绘制内部图\AtEndDocument{...}也可以解决问题,我认为一般情况下都可以。一般情况下,即无论 babel 等如何,\savebox在将轴放入钩子中时使用 es 可能是一个好主意\AtEndDocument{...},另请参阅下面的第二个代码。

\documentclass[french]{book}
\usepackage{babel}
\usepackage{etoolbox} 
\usepackage{tikz}
\usetikzlibrary{babel}

\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\newsavebox\myplotA
\begin{document}
\chapter{foo}
\section{bar}
You have to solve $P=NP$ problem. Good luck !

\begin{lrbox}\myplotA
    \begin{tikzpicture}
    \begin{axis}
        \addplot {x};
    \end{axis}
    \end{tikzpicture}
\end{lrbox}%
\AtEndDocument{%
\subsection*{Resolution of the homework}
Here is my resolution :

\usebox\myplotA
}
\end{document}

这是解决问题的另一种方法。我对 babel 了解不够多,无法理解为什么这种情况会发生在 babel 上,但这是一种解决此处扩展问题的可能方法。(我发现将轴放入钩子中实际上有点勇敢,\AtEndDocument{...}但如果您说这通常有效,那么我很高兴相信它。;-)

\documentclass[french]{book}
\usepackage{babel}
\usepackage{etoolbox} 
\usepackage{tikz}
\usetikzlibrary{babel}

\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\begin{document}
\chapter{foo}
\section{bar}
You have to solve $P=NP$ problem. Good luck !

\AtEndDocument{%
    \subsection*{Resolution of the homework}
    Here is my resolution :

    \begin{tikzpicture}
    \begin{axis}
        \edef\temp{\noexpand\addplot {x};}
        \temp
    \end{axis}
    \end{tikzpicture}
}
\end{document}

相关内容