众所周知,某些 Babel 简写与某些 Xy-pic 命令相冲突,这可以通过禁用这些简写来解决。我使用 Xy-pic 和 Babel french,并在选项列表中将 shorthands=off 设置为 0。这样就成功了。
但是,我现在必须合并一些文件,有些是很久以前用 Xy-pic 编写的,有些是使用 tkz-euclide 编写的。tkz-euclide 在 shorthands=off 时无法工作。
下面的文件对我来说肯定不会编译,但是当我注释掉 babel 行时它确实有效,所以我相信简写问题是它无法编译的原因:
\documentclass{amsart}
\usepackage{xy}
\input xy
\xyoption{all}
%\usepackage[french]{babel}
\begin{document}
\xy ,(100,0);(100,0)
,(97,6)="A"
,"A"+(-4.5,-1);"A"+(4.5,-1) *\crv{"A"+(-3.4,-6)&"A"+(3.4,-6)}
\endxy
\end{document}
它会产生一个错误消息
! Xy-pic error: <pos> "A" not defined.
\xyerror@ ...#2}\fi \errmessage {Xy-pic error: #1}
所以我尝试\shorthandoff{"}
在几个地方使用,我尝试了“A 和“A”和 A”,但收到消息说它们不是简写。我尝试将其放在\shorthandoff
文件中第一个有问题的 XY-pic 前面,但没有效果。
我怀疑最简单的解决方案是确定 Xy-pics 与哪些简写相冲突,然后禁用它们。但我无法识别它们。我不知道所有 babel 法语简写是什么。到目前为止,我找到的最完整的描述是法语 frenchb.dtx v3.3d 的 Babel 语言定义文件,2017/10/19
在 http://daniel.flipo.free.fr/frenchb/frenchb.pdf
但它没有将“”列为 babel 法语简写。
当然,tkz-euclide 可能实际上需要一些特定的简写,而这些简写与我需要使用的某些特定 Xy-pic 命令相冲突。但我希望有一些简单的解决方案。
答案1
正如 Ulrike Fischer 指出的那样,;
这是法语中的简写。事实上,babel
文档将以下符号列为法语简写:
:;?!
这些用于实现这些标点符号的法语间距约定。
您可以使用 明确关闭这些功能\shorthandsoff
。将其括在组中以限制其范围。
\documentclass{amsart}
\usepackage[main=french]{babel}
\usepackage[all]{xy}
\begin{document}
{\shorthandoff{:;?!}%
\xy ,(100,0);(100,0)
,(97,6)="A"
,"A"+(-4.5,-1);"A"+(4.5,-1) *\crv{"A"+(-3.4,-6)&"A"+(3.4,-6)}
\endxy}
\end{document}
答案2
使用适当的 LaTeX 语法允许\shorthandoff
在内部自动执行操作xy
。
钛钾基于 Z 的包,记住\usetikzlibrary{babel}
。
\documentclass{amsart}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage[all]{xy}
\usepackage{etoolbox}
\AtBeginEnvironment{xy}{\shorthandoff{?!:;}}
\begin{document}
\begin{xy}
,(100,0);(100,0)
,(97,6)="A"
,"A"+(-4.5,-1);"A"+(4.5,-1) *\crv{"A"+(-3.4,-6)&"A"+(3.4,-6)}
\end{xy}
\end{document}