使用 babel french 定义 Circuitikz 宏时,节点标签位置按字面意思理解

使用 babel french 定义 Circuitikz 宏时,节点标签位置按字面意思理解

我多次使用同一个电路变体,只做了很小的改动,所以我用 tikz 命令定义了一个宏。这是我的文档:

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{siunitx}
\usepackage{circuitikz}

\usetikzlibrary{babel} % fixes some other bug with tikz and babel french

\begin{document}
    \newcommand\circuitbase{
        \draw (2.5,4) node[label={above:$c$}] {} to[R, a=$\SI{2}{\kilo\ohm}$, *-] (2.5,2)
        node[label={left:$a$}] {} to[R, a=$\SI{1}{\kilo\ohm}$, *-*] (2.5,0) node[label={below:$d$}] {};
    }

    \begin{circuitikz}[american]
        \circuitbase
        \draw (2.5,2) to[R, l=$\SI{470}{\ohm}$] (5,2);
    \end{circuitikz}
\end{document}

但是使用宏时节点标签无法正常工作:

预览

这很可能是因为 babel 被设置为法语,因为它适用于\usepackage{babel}。我该如何修复它?

答案1

(请注意,可能@DanielFlipo 评论中的回答是一个更好的解决方案 --- 我希望他能发表一个答案;下面我的只是削减:babel-french 中的功能)

babel这是(我怀疑是冒号)中活动字符之间的交互,而且它circuitikz一点也不具体。这个“更简单的示例”也显示了这个问题:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{siunitx}
\usepackage{tikz}
\usetikzlibrary{babel} % fixes some other bug with tikz and babel french

\begin{document}
    \newcommand\circuitbase{
        \draw (2.5,4) node[label={above:$c$}] {} ;
    }

    \begin{tikzpicture}[]
        \circuitbase
        \draw (5,4) node[label={above:$c$}] {} ;
    \end{tikzpicture}
\end{document}

如果你不需要简写,更好的解决方案是使用

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

然后使用 Unicode 字符表示法语字母和重音(虽然我不知道:法语中应该怎么做,所以这里我可能错了)。

答案2

使用 pdflatex,babel-french 激活冒号,以便自动在其前添加法语所需的空格(与 ; ! ? 相同)。\NoAutoSpacing 命令用于不需要插入空格的情况。

但添加\NoAutoSpacing\circuitbase命令(组中最佳)只会删除虚假空间:

\newcommand\circuitbase{\bgroup\NoAutoSpacing
   \draw (2.5,4) node[label={above:$c$}] {} to[R, a=$\SI{2}{\kilo\ohm}$, *-] (2.5,2)
   node[label={left:$a$}] {} to[R, a=$\SI{1}{\kilo\ohm}$, *-*] (2.5,0) node[label={below:$d$}] {};
                        \egroup}

我猜这不是你想要的。在本地切换为说“英语”也无济于事(冒号仍然有效)。

请注意,\circuitbase当使用 lualatex 或 xelatex 进行编译时,您的原始命令可以立即使用,而这些命令不会在法语中产生有效的高标点符号。

使用 pdflatex\usetikzlibrary{babel}应该可以解决这个问题,但是却没有。

相关内容