【问题标题】:pgfopts: arguments with spaces don't play well with babelpgfopts:带空格的参数不能很好地与 babel 配合使用
【发布时间】:2022-11-18 02:51:27
【问题描述】:

如果我像这样定义一个新包

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myPlanning}[2022/07/16 my Planning class]
\LoadClass[french]{article}

\RequirePackage{pgfopts}
\pgfkeys{
  /myOrg/.cd,
  lang/.initial        = english                       , lang/.store        in = \myOrg@lang,
  title/.initial       = title                         , title/.store       in = \myOrg@title,
}
\ProcessPgfOptions{/myOrg}

\RequirePackage[\myOrg@lang]{babel}

我试着编译这份文件

\documentclass[lang=french,title={truc bidul}]{myPlanning}
\begin{document}
some text here
\end{document}

我收到以下错误:

This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2022/dev/Debian) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./Test.tex
LaTeX2e <2021-11-15> patch level 1
L3 programming layer <2022-01-21>
(/home/hylkema/texmf/tex/latex/local/Org/myPlanning.cls
Document Class: myPlanning 2022/07/16 my Planning class
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2021/10/04 v1.4n Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo))
(/usr/share/texlive/texmf-dist/tex/latex/pgfopts/pgfopts.sty
(/usr/share/texlive/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty
(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
(/usr/share/texlive/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.code.t
ex))))) (/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
(/usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def)
(/usr/share/texlive/texmf-dist/tex/generic/babel-french/french.ldf)

! LaTeX Error: Missing \begin{document}.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              
                                                  
l.4261     \ifin@\edef\bbl@tempc{\bbl@tempb}\fi}
                                                
? 

但是,如果我编译它(标题参数中没有空格):

\documentclass[lang=french,title=truc]{myPlanning}
\begin{document}
some text here
\end{document}

它编译得很好,没有错误。

更重要的是,如果我从包定义中删除 \RequirePackage[\myOrg@lang]{babel} 行,那么第一个在 title 参数中带有空格的文档可以正常编译。

这是一个已知问题吗?是否有解决方案?

谢谢你的帮助,

茹克

【问题讨论】:

  • 空格不是问题,问题是您需要空格的{}。参见例如tex.stackexchange.com/q/322217/36296
  • 我也这么认为。因此,除了使用 ~ 空格外,没有简单的解决方案吗?
  • 您可以查看其他键值包....
  • 你有什么建议吗?
  • 我联系了可能有一些建议的人。让我们看看他是否愿意发表评论。

标签: pdflatex


【解决方案1】:

问题不是 key=value 解析器,而是 babel 的代码块,如果它从 documentclass 和调用包时的选项中获得两个选项,它会尝试检测是否加载了错误的语言。也就是说,pgfopts 不是最新的当前 LaTeX(大约一年前对选项系统进行了重大更改,pgfopts 尚未跟进),key=value 的唯一解决方案据我所知兼容的选项是内置机制和expkv-opt

但正如我所说,两者都不能解决您的问题。但是,在babel 的选项中使用main=myOrg@lang 将不会使用babel 的问题代码,就像您使用main 选项一样。因此,如果您将课程更改为以下关于您的选项的唯一(不可否认的奇怪)警告,您将得到

LaTeX Warning: Unused global option(s):
    [french].

(但这源于您对 LoadClass 的奇怪用法,其中 article 会将 french 添加到未使用的选项列表中,尽管它不在全局选项列表中,因此 babel 不会将其拾取并删除它来自所述列表)。

NeedsTeXFormat{LaTeX2e}
ProvidesClass{myPlanning}[2022/07/16 my Planning class]
LoadClass[french]{article}

RequirePackage{pgfopts}
pgfkeys{
  /myOrg/.cd
  ,lang/.initial = english
  ,lang/.store in = myOrg@lang
  ,title/.initial = title
  ,title/.store in = myOrg@title,
}
ProcessPgfOptions{/myOrg}

RequirePackage[main=myOrg@lang]{babel}

【讨论】:

    猜你喜欢
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多