tkz-euclide 和 Xy-pic 因 Babel 简写而发生冲突

tkz-euclide 和 Xy-pic 因 Babel 简写而发生冲突

众所周知,某些 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}

相关内容