如何避免命令之后和句点之前换行?

如何避免命令之后和句点之前换行?

我使用 XeLaTeX 和回忆录类来排版我的语言学论文。在正文中,我经常提到前缀,前缀后面有一个连字符。例如:“联合国-是继承自日耳曼语的否定前缀”。

现在,有时这个前缀会位于逗号之前,或位于句子末尾。有时,LaTeX 会在连字符后、句号之前插入换行符。以下是 MWE:

\documentclass[a4paper,
openright,
oneside,
12pt,
]{memoir}
\usepackage{fontspec}
\usepackage{geometry}
\setmainfont{Linux Libertine}

\begin{document}
\noindent In (6.269), the first person pronoun \textit{wɨ} co-occurs with the coreferential bound marker \textit{j-}.
For Wayana, Tavares (2005: 413) states that first and second person pronouns cannot occur in P position.
\end{document}

它看起来是这样的:

在此处输入图片描述

现在,我不明白为什么 LaTeX 允许在开头添加句号。如何避免逗号前换行?我也想知道,但没有找到令人满意的解决方案。我也见过命令之后、句号之前换行,其特点是非基本自定义命令。

有任何想法吗?

答案1

问题出现的原因在于 TeX 认为连字符始终是换行的好位置。它并不知道行首在哪里,因此可以避免在.那里放置连字符。因此,以连字符结尾的单词始终可能引发此问题。

您可以使用语言定义文件采用的解决方案ngerman来创建不间断连字符,如您链接到的第一个问题中所述如何避免逗号前换行?。这里我刚刚创建了一个\nbhyphen引入不间断连字符的命令。或者,您可以定义一个\prefix宏来自动添加连字符。我已将您的替换\textit\emph,因为您希望单词/词素的格式在它们本身嵌入时自动恢复为直立\emph

\documentclass[a4paper,
openright,
oneside,
12pt,
]{memoir}
\usepackage{fontspec}
\usepackage[english]{babel} % for textormath macro
\usepackage{geometry}
\setmainfont{Linux Libertine O}
\providecommand{\texorpdfstring}[2]{#1}
\newcommand\nbhyphen
{%
  \texorpdfstring{\textormath{\leavevmode\hbox{-}}{-}}% tex string
                 {-}% PDF string
}
\newcommand\prefix[1]{#1\nbhyphen}

\begin{document}


% use \nbhyphen
\noindent In (6.269), the first person pronoun \emph{wɨ} co-occurs with the coreferential bound marker \emph{j\nbhyphen}.
For Wayana, Tavares (2005: 413) states that first and second person pronouns cannot occur in P position.

% alternate syntax: make a command for prefix
\noindent In (6.269), the first person pronoun \emph{wɨ} co-occurs with the coreferential bound marker \emph{\prefix{j}}.
For Wayana, Tavares (2005: 413) states that first and second person pronouns cannot occur in P position.

\end{document}

代码输出

答案2

如果luatexwithbabel是一个选项,您可以使用后者提供的工具来处理特殊的连字情况。在这种特殊情况下,以下方法应该有效:

\usepackage[english]{babel}

\babelposthyphenation{english}{={.}} % (1)
 { { pre = -, no= -, penalty = 10000 },  % (2)
   {}, % (3)
 }

模式 (1) 表示“显式连字符后跟一个点”(点周围的括号可防止其被解释为“任何字符”,这在正则表达式中很常见)。第二个参数重新插入显式连字符并附加惩罚 (2),然后保留第二个字符(点,3)。请参阅使用 luatex 进行非标准连字符连接

答案3

如果您经常显示前缀,最好为它们定义一个合适的命令,这样您甚至可以在最后一刻决定如何打印它们。

\documentclass[
  a4paper,
  openright,
  oneside,
  12pt,
]{memoir}
\usepackage{geometry}
\usepackage{fontspec}

\setmainfont{Linux Libertine O}

\newcommand{\prefix}[1]{\mbox{\textit{#1-}}}

\begin{document}

\subsubsection*{Original}

\noindent In (6.269), the first person pronoun \textit{wɨ} co-occurs with
the coreferential bound marker \textit{j-}. For Wayana, Tavares (2005: 413)
states that first and second person pronouns cannot occur in P position.


\subsubsection*{With macro}

\noindent In (6.269), the first person pronoun \textit{wɨ} co-occurs with 
the coreferential bound marker \prefix{j}. For Wayana, Tavares~(2005:~413) 
states that first and second person pronouns cannot occur in P~position.

\end{document}

请注意我插入的联系,以避免可能出现的严重故障。

在此处输入图片描述

相关内容