使用 babel 处理法语时如何处理宏中的冒号?

使用 babel 处理法语时如何处理宏中的冒号?

我最近在尝试合并时遇到了一个问题

\usepackage[french]{babel}

\graphicspath{{c:/Users/...}}

当我尝试使用时,就会出现问题\includegraphics(尽管在 babel 中未选择法语时,它可以完美运行)。似乎 babel(带有法语预设)修改了冒号的行为(因为法语中冒号前需要空格)。这个问题已经提到过了这里有些人建议避免使用冒号。对于 Windows 路径,这是不可能的。

目前,我发现了一个简单的破解方法:

\usepackage[english,main=french]{babel}

然后在包含图形之前先转为英语,然后再转为法语。此解决方案有效,但使用起来并不容易,因为我维护着一个由不同用户使用的各种 tex 文件(>1000)的存储库,我不能让他们每次都使用这个技巧。

有更好的解决方案吗?

答案1

您可以babel使用以下shorthands=选项加载,例如,

\documentclass[french]{article}
\usepackage[main=french, shorthands=off]{babel}

如果您需要其他简写,您可以将特定简写列入白名单,而不是将其转换为off。此语法在babel手册中。

您还可以使用 暂时关闭简写,而无需切换语言\languageshorthands{none}。当您再次需要它们时,您可以恢复\languageshorthands{french}。如果您需要包装\originalmacro,您可以尝试以下操作:

\newcommand\mymacro[1]{%
  \languageshorthands{none}%
  \originalmacro{#1}%
  \languageshorthands{\languagename}}

您也可以将和其他破坏命令的字符设置为 12 个\catcode,以使其无效::\begingroup

\newcommand\mymacro[1]{%
  \begingroup%
    \catcode`:=12%
    \originalmacro{#1}%
  \endgroup}

最后,一些软件包有自己的选项来禁用它们需要解析的命令中的简写,例如babelTikZ 库,这使得 TikZ 解析器与 Babel 简写兼容。

答案2

根本问题是 LaTeX 中有一些本质上是“移动”的上下文,而\protection 机制无法处理这些上下文。这些上下文包括文件名。

我建议不要禁用语言简写(如果您确实需要简写),而是手动应用适当的保护:

\graphicspath{{C\string:/Users/myself/Pictures}}

(不要使用标准,\protect而是\string使用。)

相关内容