使用 csquote 中的自动样式与多语言宏时出现问题

使用 csquote 中的自动样式与多语言宏时出现问题

我得到了一些宏,使我能够从同一个.txt文件(例如简历)生成三种不同语言的文档。但引文的格式取决于我使用 babel 加载语言的顺序,而不是所选语言的顺序。例如,在 MWE 中,所选语言是英语,但引文格式是法语,因为这是 babel 中最后加载的语言。

\documentclass[]{article}
\usepackage[UKenglish,german,french]{babel}
\usepackage[autostyle=true]{csquotes}
% define the commands to switch and the flags in LaTeX
\newcommand{\GERMAN}{\germantrue \frenchfalse \englishfalse
                     \selectlanguage{german}}
\newcommand{\FRENCH}{\germanfalse  \frenchtrue \englishfalse
                     \selectlanguage{french}}
\newcommand{\ENGLISH}{\germanfalse  \frenchfalse \englishtrue
                      \selectlanguage{UKenglish}}
\newif\ifgerman \germantrue
\newif\iffrench \frenchtrue
\newif\ifenglish \englishtrue

% then choose one language to be displayed
%\GERMAN
%\FRENCH
\ENGLISH
    \newcommand\hide[1] {}
    \newcommand\german[1] {\ifgerman #1 \else \fi}
    \newcommand\french[1] {\iffrench #1 \else \fi}
    \newcommand\english[1] {\ifenglish #1 \else \fi}
    \begin{document}
    \german{\enquote{Etwas}}\french{\enquote{Quelque chose}}\english{\enquote{something}}
\end{document}

因此结果是 ≪ something ≫ 而不是 `something'

我应该如何更改代码以使自动样式考虑所选的语言?

答案1

您调用命令太早了:babel 在文档开始时设置了主要语言,因此覆盖了您的 \selectlanguage。如果您将命令移到后面\begin{document}或使用\AtBeginDocument它,它会正常工作:

\documentclass[]{article}
\usepackage[UKenglish,german,french]{babel}
\usepackage[autostyle]{csquotes}

% define the commands to switch and the flags in LaTeX
\newcommand{\GERMAN}{\germantrue \frenchfalse \englishfalse
                     \selectlanguage{german}}
\newcommand{\FRENCH}{\germanfalse  \frenchtrue \englishfalse
                     \selectlanguage{french}}
\newcommand{\ENGLISH}{\germanfalse  \frenchfalse \englishtrue
                      \selectlanguage{UKenglish}}
\newif\ifgerman \germantrue
\newif\iffrench \frenchtrue
\newif\ifenglish \englishtrue

% then choose one language to be displayed
\AtBeginDocument{\GERMAN}
%\FRENCH
%%\ENGLISH
    \newcommand\hide[1] {}
    \newcommand\german[1] {\ifgerman #1 \else \fi}
    \newcommand\french[1] {\iffrench #1 \else \fi}
    \newcommand\english[1] {\ifenglish #1 \else \fi}
\begin{document}\languagename
    \german{\enquote{Etwas}}\french{\enquote{Quelque chose}}\english{\enquote{something}}
\end{document}

相关内容