我最近在尝试合并时遇到了一个问题
\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}
最后,一些软件包有自己的选项来禁用它们需要解析的命令中的简写,例如babel
TikZ 库,这使得 TikZ 解析器与 Babel 简写兼容。
答案2
根本问题是 LaTeX 中有一些本质上是“移动”的上下文,而\protect
ion 机制无法处理这些上下文。这些上下文包括文件名。
我建议不要禁用语言简写(如果您确实需要简写),而是手动应用适当的保护:
\graphicspath{{C\string:/Users/myself/Pictures}}
(不要使用标准,\protect
而是\string
使用。)