Babel、活动字符、ifthenelse 和 tikz

Babel、活动字符、ifthenelse 和 tikz

这个问题是建立在“经典”babel 和 tikz 使用 \draw 的问题;众所周知,这种babel包装在某些语言中会产生活性物质并对环境><'造成破坏。tikzpicture

新的(3.0+)tikz有一个名为的包作为解决方案babel;它几乎每次都能正常工作 --- 除非你在此 MNWE 中使用它:

\documentclass[]{article}
\usepackage[spanish]{babel}
\usepackage{tikz}
\usepackage{ifthen}

\usetikzlibrary{babel} % this works most of the time, but not in
                       % an \ifthenelse 
\newboolean{solution} \setboolean{solution}{true} 

\begin{document}

\ifthenelse{\boolean{solution}}{

    \begin{tikzpicture}[]
        \draw [thin, ->] (-1,0)  -- (0,0);
    \end{tikzpicture}

 }% end \ifthenelse{\boolean{solution}}{
{
% not solution here 
}

\end{document}

这将因臭名昭著的

Paragraph ended before \language@active@arg> was complete.

现在,避免使用活动字符的经典解决方案babel将起作用(并且由于unicode和utf-8的普遍性,它可以说是正确的解决方案),因此只需使用

 \usepackage[spanish,es-noquoting]{babel}

会解决这个问题。无论如何,这是预期的行为吗?是否有可能修复\usetikzlibrary{babel}此问题?如果没有,是否有宏可以获得与选项相同的es-noquoting效果babel事实,所以我可以在随机类/包中更正先前的调用?

答案1

我不知道到底发生了什么,但ifthen这里确实有干扰。如果我用一个简单的 if 宏替换它,它就可以正常工作

\documentclass[]{article}
\usepackage[spanish]{babel}
\usepackage{tikz}

\usetikzlibrary{babel} % this works most of the time, but not in
                       % an \ifthenelse 
\newif\ifboolsolution
\boolsolutiontrue

\begin{document}

\ifboolsolution%
    \begin{tikzpicture}[]
        \draw [thin, ->] (-1,0)  -- (0,0);
    \end{tikzpicture}
\else%
%
\fi%
\end{document}

带有包裹清单

 *File List*
 article.cls    2014/09/29 v1.4h Standard LaTeX document class
  size10.clo    2014/09/29 v1.4h Standard LaTeX file (size option)
   babel.sty    2016/02/24 3.9q The Babel package
 spanish.ldf
    tikz.sty    2015/08/07 v3.0.1a (rcs-revision 1.151)
     pgf.sty    2015/08/07 v3.0.1a (rcs-revision 1.15)
  pgfrcs.sty    2015/08/07 v3.0.1a (rcs-revision 1.31)
everyshi.sty    2001/05/15 v3.00 EveryShipout Package (MS)
  pgfrcs.code.tex
 pgfcore.sty    2010/04/11 v3.0.1a (rcs-revision 1.7)
graphicx.sty    2014/10/28 v1.0g Enhanced LaTeX Graphics (DPC,SPQR)
  keyval.sty    2014/10/28 v1.15 key=value parser (DPC)
graphics.sty    2016/01/03 v1.0q Standard LaTeX Graphics (DPC,SPQR)
    trig.sty    2016/01/03 v1.10 sin cos tan (DPC)
graphics.cfg    2010/04/23 v1.9 graphics configuration of TeX Live
  pdftex.def    2011/05/27 v0.06d Graphics/color for pdfTeX
infwarerr.sty    2010/04/08 v1.3 Providing info/warning/error messages (HO)
 ltxcmds.sty    2011/11/09 v1.22 LaTeX kernel commands for general use (HO)
  pgfsys.sty    2014/07/09 v3.0.1a (rcs-revision 1.48)
  pgfsys.code.tex
pgfsyssoftpath.code.tex    2013/09/09  (rcs-revision 1.9)
pgfsysprotocol.code.tex    2006/10/16  (rcs-revision 1.4)
  xcolor.sty    2007/01/21 v2.11 LaTeX color extensions (UK)
   color.cfg    2007/01/18 v1.5 color configuration of teTeX/TeXLive
 pgfcore.code.tex
pgfcomp-version-0-65.sty    2007/07/03 v3.0.1a (rcs-revision 1.7)
pgfcomp-version-1-18.sty    2007/07/23 v3.0.1a (rcs-revision 1.1)
  pgffor.sty    2013/12/13 v3.0.1a (rcs-revision 1.25)
 pgfkeys.sty    
 pgfkeys.code.tex
 pgfmath.sty    
 pgfmath.code.tex
  pgffor.code.tex
    tikz.code.tex
supp-pdf.mkii
pdftexcmds.sty    2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO)
ifluatex.sty    2010/03/01 v1.3 Provides the ifluatex switch (HO)
   ifpdf.sty    2011/01/30 v2.3 Provides the ifpdf switch (HO)
epstopdf-base.sty    2010/02/09 v2.5 Base part for package epstopdf
  grfext.sty    2010/08/19 v1.1 Manage graphics extensions (HO)
kvdefinekeys.sty    2011/04/07 v1.3 Define keys (HO)
kvoptions.sty    2011/06/30 v3.11 Key value format for package options (HO)
kvsetkeys.sty    2012/04/25 v1.16 Key value parser (HO)
etexcmds.sty    2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO)
epstopdf-sys.cfg    2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live

答案2

问题是,当tikzpicture作为另一个命令的参数时,类别代码会被冻结,并且库使用的技巧babel不再起作用。

解决方法(虽然不太好)是禁用该quoting功能babel-spanish,但现在这个功能不再那么重要,因为csquotes可以用更干净的方式提供相同的服务。

\documentclass[]{article}
\usepackage[spanish,es-noquoting]{babel}
\usepackage{tikz}
\usepackage{ifthen}

\usetikzlibrary{babel} % this works most of the time, but not in
                       % an \ifthenelse 
\newboolean{solution} \setboolean{solution}{true} 

\begin{document}

\ifthenelse{\boolean{solution}}{%
    \begin{tikzpicture}[]
        \draw [thin, ->] (-1,0)  -- (0,0);
    \end{tikzpicture}%
 }% end \ifthenelse{\boolean{solution}}{
{%
% not solution here 
}

\end{document}

这个问题不仅限于\ifthenelse;如果我定义

\newcommand{\foo}[1]{#1}

并调用

\foo{\begin{tikzpicture}\draw [thin, ->] (-1,0)  -- (0,0);\end{tikzpicture}}

错误是一样的。


问题似乎与有关babel-spanish。如果我尝试使用相同的代码babel-czech,使其-成为简写,则代码可以正常工作。

相关内容