在 \ProvidesExplPackage 内加载时,从 tikzlibraries 代码中删除空格

在 \ProvidesExplPackage 内加载时,从 tikzlibraries 代码中删除空格

我正在玩expl3一个项目并遇到一个奇怪的问题。

我有一个加载的包tikz和一些tikzlibraries。如果我使用\ProvidesExplPackage,似乎空格在某处被删除tikzlibraries,导致错误,例如

Package pgfkeys Error: I do not know the key '/pgf/arrowkeys/linecap/.ischoice' and I am going to ignore it. Perhaps you misspelled it. }

而密钥应该是is choice

这是一个 M(non)WE:

\begin{filecontents}{essai_expl3.sty}
  \RequirePackage{expl3}
  \ProvidesExplPackage{essai_expl3}{2022-04-01}{1.0}{essai expl3}
%  \ProvidesPackage{essai_expl3}[2022-04-01 v. 1.0 essai expl3] 
  \usepackage{tikz}
  \usetikzlibrary{arrows.meta}
  \endinput
\end{filecontents}

\documentclass[12pt]{report}
\usepackage{essai_expl3}

\begin{document}
  azerty
\end{document}

编辑

@Ulrike Fischer 提供的解决方案在 MWE 上完成了这项工作。

我对 pgf 也有类似的问题……

\begin{filecontents}{essai_expl3.sty}
  \RequirePackage{expl3}
  \RequirePackage{l3keys2e}
  \ProvidesExplPackage{essai_expl3}{2022-04-01}{1.0}{essai expl3}
  
  \keys_define:nn { essai_expl3 }
  {
    % pour charger et pouvoir utiliser TikZ
    ,tikz .bool_gset:N      = \g_essai_tikz_bool
    ,tikz .default:n        = true % valeur par défaut
    ,tikz .initial:n        = false % valeur initiale
    ,tikz .value_required:n = false % si pas de valeur donnée, true est utilisée
    % pour les options non définies
    ,unknown .code:n = \ClassInfo{ Estia }{Option~ inconnue~ `\l_keys_key_str'}
  }
  
  \ProcessKeysOptions { essai_expl3 }
  

\bool_if:NTF \g_essai_tikz_bool
{
  \usepackage{tikz, pgfplots}
  \ExplSyntaxOff
  \pgfplotsset{compat=newest,compat/show suggested version=true}
  \usetikzlibrary{arrows.meta}
  \pgfkeys{/pgf/number format/.cd,fixed,use comma}
  \ExplSyntaxOn
}
  \endinput
\end{filecontents}

\documentclass[12pt]{report}
\usepackage[tikz]{essai_expl3}

\begin{document}
  azerty
\end{document}

答案1

LaTeX 提供了推送和弹出 catcode 的命令。此处有描述 https://www.texdev.net/2015/07/30/making-custom-loaders-expl3-aware/

例如它被使用\usepackage,因此通常您不必担心是否在 expl3 包中加载包。

但并非所有库加载器都使用这些命令。一个正确示例来自\tcbuselibrarytcolorbox,它基本上

\def\tcb@load@library#1#2{%
     ....
    \@pushfilename%
    \xdef\@currname{#2}%
    ...
    \input\tcbpkgprefix#2\relax%
    ...
    \@popfilename%
  }%
}                 

tikz/pgf 的库加载器不使用它,所以你应该手动执行

 \@pushfilename
 \xdef\@currname{arrows.meta}%
 \usetikzlibrary{arrows.meta}
 \@popfilename 

相关内容