更新对 LuaLaTeX 的支持

更新对 LuaLaTeX 的支持

我正在用 babel 和 monotype 字体制作文档。我进行了一些设置以实现特定的对齐方式,但在使用其他语言时遇到了问题。

\documentclass[a4paper,13pt]{book}
\usepackage[french,english]{babel}
\usepackage{fontspec}
\setmainfont{DejaVu Sans Mono}

\spaceskip=1.0\fontdimen2\font plus 0\fontdimen3\font minus 0\fontdimen4\font

\begin{document}
\obeyspaces
\frenchspacing
\setlength{\parindent}{-2\fontcharwd\font`A}
\setlength{\leftskip}{2\fontcharwd\font`A}

\foreignlanguage{english}{%
\textbf{Lorem ipsum dolor sit amet}: consectetur adipiscing elit. 
Cras sit amet est sit amet urna, tincidunt, consectetur 
eget ut felis. Vestibulum, Nam dapibus.
}

\foreignlanguage{french}{%
\textbf{Lorem ipsum dolor sit amet}: consectetur adipiscing elit. 
Cras sit amet est sit amet urna, tincidunt, consectetur 
eget ut felis. Vestibulum, Nam dapibus.
}

\end{document}

当我切换到英语时,字符前缺少一个空格:

在此处输入图片描述

您知道如何:在法语和英语中使 a 周围的间距相同吗?

答案1

出现这种情况的原因是英语不像法语那样在标点符号前加空格。

更新对 LuaLaTeX 的支持

尝试以同时支持lualatex和 的方式执行此操作xelatex。我一直使用,\raggedright因为如果没有这个,您将得到满满的框。并且我以稍微好一点的方式将默认字体设置为等宽字体。

我仍然\extrasfrench从 内部调用\extrasenglish。但我还将lua变量设置FR_ca为与\the\l@english( =0) 相同。lua执行标点符号间距的函数检查当前语言是 还是FR_frFR_ca通过将其中一个更改为0(对于英语),我们可以获得两种语言的法语标点符号。最后,我添加了\frenchsetup{OriginalTypewriter=true}以便如果您使用\ttfamily\texttt它仍然有效。(默认情况下,french-babel在这些情况下不会自动调整标点符号。)

另请注意,您已指定13pt。 book 类仅支持10pt11pt12pt。 因此,13pt只需提供10pt默认值即可。

xelatex和的输出相同lualatex

\documentclass[a4paper,12pt]{book}
\usepackage[main=french,english]{babel}
\frenchsetup{OriginalTypewriter=true}
\addto\extrasenglish{%
  \extrasfrench
}
\makeatletter
\ifx\directlua\@undefined\else
  \directlua{FR_ca = \the\l@english}
\fi
\makeatother
\usepackage{fontspec}
\setmonofont{DejaVu Sans Mono}
\renewcommand{\familydefault}{\ttdefault}
\raggedright
\begin{document}
\section*{Français}
\today{}

\textbf{Lorem ipsum dolor sit amet}: consectetur adipiscing elit. Cras sit
amet est sit amet urna, tincidunt, consectetur eget ut felis. Vestibulum, Nam
dapibus.

\selectlanguage{english}

\section*{English with French punctuation}
\today{}

\textbf{Lorem ipsum dolor sit amet}: consectetur adipiscing elit. Cras sit
amet est sit amet urna, tincidunt, consectetur eget ut felis. Vestibulum, Nam
dapibus.
\end{document}

在此处输入图片描述


原始 XeLaTeX 唯一答案

就我一生而言,我无法弄清楚如何用 来改变这种行为lualatex,但这似乎可以实现你想要的效果xelatex

我省略了所有的间距命令,因此您可以看到连字符规则(和字符串)仍然会发生变化,但标点符号规则仍然是法语。

基本上,我只是\extrasfrench在 内部调用\extrasenglish。据我所知,\extrasfrench除了处理标点符号外,没有做太多其他事情。(但我可能是错的。)

13pt顺便说一句,该课程没有什么可争论的book

我还设置了french默认语言,因为如果您想在任何地方都使用法语风格的标点符号,这似乎很有意义。

\documentclass[a4paper,12pt]{book}
\usepackage[main=french,english]{babel}
\addto\extrasenglish{%
  \extrasfrench
}
\usepackage{fontspec}
\setmainfont{DejaVu Sans Mono}
\begin{document}
\section*{Français}

\today{}

\textbf{Lorem ipsum dolor sit amet}: consectetur adipiscing elit. Cras sit
amet est sit amet urna, tincidunt, consectetur eget ut felis. Vestibulum, Nam
dapibus.

\selectlanguage{english}

\section*{English}

\today{}

\textbf{Lorem ipsum dolor sit amet}: consectetur adipiscing elit. Cras sit
amet est sit amet urna, tincidunt, consectetur eget ut felis. Vestibulum, Nam
dapibus.

\end{document}

输出

答案2

取消法语中高标点符号周围的额外空格(因此,如果您需要它,您必须自己在源中输入它)。

\documentclass[a4paper]{book}
\usepackage[french,english]{babel}
\frenchsetup{AutoSpacePunctuation=false}
\usepackage{fontspec}
\setmainfont{DejaVu Sans Mono}

\spaceskip=\fontdimen2\font\relax

\begin{document}
\obeyspaces
\frenchspacing
\setlength{\parindent}{-2\fontcharwd\font`A}
\setlength{\leftskip}{2\fontcharwd\font`A}

\foreignlanguage{english}{%
\textbf{Lorem ipsum dolor sit amet}: consectetur adipiscing elit. 
Cras sit amet est sit amet urna, tincidunt, consectetur 
eget ut felis. Vestibulum, Nam dapibus.
}

\foreignlanguage{french}{%
\textbf{Lorem ipsum dolor sit amet}: consectetur adipiscing elit. 
Cras sit amet est sit amet urna, tincidunt, consectetur 
eget ut felis. Vestibulum, Nam dapibus.
}

\end{document}

顺便说一下,修补babel-french程序在使用等宽字体时不会插入额外的间距,但在这个例子中,没有使用这些 LaTeX 宏。\texttt\ttfamily

在此处输入图片描述

相关内容