![如何避免命令之后和句点之前换行?](https://linux22.com/image/422666/%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8D%E5%91%BD%E4%BB%A4%E4%B9%8B%E5%90%8E%E5%92%8C%E5%8F%A5%E7%82%B9%E4%B9%8B%E5%89%8D%E6%8D%A2%E8%A1%8C%EF%BC%9F.png)
我使用 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
如果luatex
withbabel
是一个选项,您可以使用后者提供的工具来处理特殊的连字情况。在这种特殊情况下,以下方法应该有效:
\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}
请注意我插入的联系,以避免可能出现的严重故障。