破折号内的不间断空格

破折号内的不间断空格

是否存在一种方法或环境,可以用法语书写,就像在“guillemets”中引用一样,在破折号中自动插入不间断空格的文本?因此,我使用了这个简单的方法,但它在换行符处在破折号和示例之间切换: beginning —~exemple~— end.

我正在使用[frenchb]{scrbook}[frenchb]{babel}&[babel,french=guillemets*]{csquotes}包,其中 xelatex & 编码 = UTF-8 Unicode。谢谢

答案1

您可以定义\dashquote哪些是成对出现的。第一次(以及每个奇数)出现的\dashquote就像--~,第二次(以及每个偶数)出现的\dashqoute就像~--。最后,您可以将(在 XeTeX 中)unicode 字符设置为活动字符并将其定义为\dashquote

\def\dashquote{\bgroup\def\dashquote{\unskip~--\egroup}--~\ignorespaces}
\catcode`—=13 \def—{\dashquote} % the Unicode character — is defined here

Text — quoted example — text. % Works like: Text --~quoted example~-- text.

Text —quoted example— text. % Works the same, like: Text --~quoted example~-- text.

答案2

使用 UTF-8 字符 U+2014 (EM DASH) 或\textemdash

\documentclass{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage[babel,french=guillemets*]{csquotes}

\begin{document}

\parbox{0pt}{beginning ---~exemple~--- end}

\bigskip

\parbox{0pt}{beginning \textemdash~exemple~\textemdash{} end}

\bigskip

\parbox{0pt}{beginning —~exemple~— end}

\end{document}

示例中的\parbox只是为了尽可能强制 LaTeX 中断。第三个\parbox包含相当于输入 的字符\textemdash

问题在于---TeX 会在连字符-或以该连字符结尾的任何连字符后添加一个空的自由选择符。

在此处输入图片描述

对于 XeLaTeX 有一个解决方法(由于神秘的原因,XeTeX 在破折号后添加了空的自由选择项):

\documentclass{scrbook}
\usepackage{fontspec}
\usepackage[french]{babel}
\usepackage[babel,french=guillemets*]{csquotes}
\usepackage{newunicodechar}
\newunicodechar{—}{\mbox{—}}

\begin{document}

\parbox{0pt}{beginning ---~exemple~--- end}

\bigskip

\parbox{0pt}{beginning —~exemple~— end}

\end{document}

在此处输入图片描述

答案3

我不知道是否有更好的系统。不过,这个系统只适用于两个破折号之间。编辑:我没看到你用过 XeLaTeX

\documentclass{scrbook}
\usepackage{expl3}
\usepackage{newunicodechar}

\newunicodechar{—}{\delimitedbyemdash}
\def\delimitedbyemdash#1—{\textemdash~\csname tl_trim_spaces:n\endcsname{#1}~\textemdash}

\begin{document}

Is this —what you mean— in the question?

\end{document}

相关内容