多语问题

多语问题

我正在使用多种语言(带有polyglossiaXeLaTeX),并且我遇到了意想不到的额外换行符问题,这也可能与未在应该使用连字符的地方使用连字符有关。请参见下面的最小示例。令人惊讶的是,该行在每三个条目的第一个单词(זײַן)后断开,并且在自由连字符处放置换行符而不是连字符。我相信这与 in 有关\hfil\entry正如所建议的那样这个答案,但我不想删除\hfil(例如用 替换它\hspace{0.1cm plus 0.1cm}),因为我需要左右两侧都对齐。此外,最后两个条目表明它可能还与意第绪语文本和英语文本之间的交互有关,因为当没有意第绪语时,TeX 会在正常连字符处进行连字,但当有意​​第绪语时,它无法进行连字。parbox示例代码最后的 表明\maq在我的\entry环境之外,这是一个有效的连字点,但是之后我表明,在 之外的正常段落中,连字无法正常工作\parbox

我希望右侧在断开之前填充空间(事实上,我已经手动编辑了前三个条目,以便按我期望所有条目出现的方式出现)。

\documentclass[10pt]{book}
\usepackage{polyglossia}
\usepackage{multicol}
\usepackage{geometry}

\setdefaultlanguage{english}
\setotherlanguages{hebrew}
\newfontfamily\hebrewfont[Script=Hebrew]{Arial Unicode MS}

\newcommand\maq{\discretionary{־}{}{־}}
\newcommand{\h}[1]{\RL{\texthebrew{#1}\hfil}}

\newcommand{\hangparagentry}{\hangindent-0.5em \hangafter1 \leftskip 0.8em \parindent -0.5em}

\DeclareDocumentCommand{\entry}{ m o m }{\strut\noindent\hangparagentry{\hspace{-.5em}\textbf{#1}\hspace{0.1cm}\hfil \h{{#3}\IfNoValueF{#2}{ \textenglish{\scriptsize{#2}}}}\par}\strut}

\begin{document}

\setlength{\columnsep}{0.75pc}
\setlength{\columnseprule}{0.4pt}

\flushright

\begin{multicols}{2}

\entry{vehicle identification number}{דער אױטאָ־ אידענטיפֿיציר\maq נומער, ־ן}
\entry{vehicle inspection program}{די אױטאָ־ אינספּעקטיר\maq פּראָגראַם, ־ען}
\entry{be eager to be eager to}[[BALN] [KhÉYShEK] [LÓET/LÓER]]{זײַן אַ בעלן צו; האָבן \\ \hspace{0.5em} חשק צו; זײַן נײַגעריק ‹להוט› צוצו; האָבן  צו; זײַן נײַגעריק ‹להוט› צוצו;   צו; זײַן נײַגעריק ‹להוט› צו; זײ֜ער ‹שטאַרק› װעלן}
\entry{vehicle identification number}{דער אױטאָ\maq אידענטיפֿיציר\maq נומער, ־ן}
\entry{vehicle inspection program}{די אױטאָ\maq אינספּעקטיר\maq פּראָגראַם, ־ען}
\entry{be eager to be eager to}[[BALN] [KhÉYShEK] [LÓET/LÓER]]{זײַן אַ בעלן צו; האָבן חשק צו; זײַן נײַגעריק ‹להוט› צוצו; האָבן  צו; זײַן נײַגעריק ‹להוט› צוצו;   צו; זײַן נײַגעריק ‹להוט› צו; זײ֜ער ‹שטאַרק› װעלן}
\entry{vehicle identification number}{דער אױטאָ\maq אידענטיפֿיציר\maq נומער, ־ן}
\entry{vehicle inspection program}{די אױטאָ\maq אינספּעקטיר\maq פּראָגראַם, ־ען}
\entry{be eager to be eager to}[[BALN] [KhÉYShEK] [LÓET/LÓER]]{זײַן אַ בעלן צו; האָבן חשק צו; זײַן נײַגעריק ‹להוט› צוצו; האָבן  צו; זײַן נײַגעריק ‹להוט› צוצו;   צו; זײַן נײַגעריק ‹להוט› צו; זײ֜ער ‹שטאַרק› װעלן}
\entry{vehicle identification number}{דער אױטאָ\maq אידענטיפֿיציר\maq נומער, ־ן}
\entry{vehicle inspection program}{די אױטאָ\maq אינספּעקטיר\maq פּראָגראַם, ־ען}
\entry{be eager to be eager to}[[BALN] [KhÉYShEK] [LÓET/LÓER]]{זײַן אַ בעלן צו; האָבן חשק צו; זײַן נײַגעריק ‹להוט› צוצו; האָבן  צו; זײַן נײַגעריק ‹להוט› צוצו;   צו; זײַן נײַגעריק ‹להוט› צו; זײ֜ער ‹שטאַרק› װעלן}
\entry{vehicle identification number}{די \textenglish{tests-testing}}
\entry{vehicle identification number}{\textenglish{tests-longtestings}}

\end{multicols}

\parbox{0pt}{\h{דער אױטאָ\maq אידענטיפֿיציר\maq נומער, ־ן}}

\h{די אױטאָ\maq אינספּעקטיר\maq פּראָגראַם, ־ען די אױטאָ\maq אינספּעקטיר\maq פּראָגראַם, ־ען די אױטאָ\maq אינספּעקטיר\maq פּראָגראַם, ־ען די אױטאָ\maq אינספּעקטיר\maq פּראָגראַם, ־ען די אױטאָ\maq אינספּעקטיר\maq פּראָגראַם, ־ען די אױטאָ\maq אינספּעקטיר\maq פּראָגראַם, ־ען}

\end{document}

答案1

您的问题肯定来自于\hfil,但您可以通过告诉 TeX 您想要寻找涉及连字符的解决方案来解决您的问题。

基本上,当 TeX 构建一个段落时,换行算法会对每个空格和每个可能的连字符施加惩罚,然后确定哪个成本最低(惩罚方面)。

你可以通过把这个

\hyphenpenalty=-500

在您的序言中的某个地方。或者甚至在您的条目定义中,如果您不想在其余文本中鼓励使用连字符。

负面惩罚鼓励使用连字符,我尝试了您的文档,这解决了这个问题。观察: 正确的连字

答案2

这个问题困扰了我一段时间。这是我尽最大努力的结果。但它不如 A Gold Man 的答案好(自从我开始思考这个问题以来,它还是个新题目)。

HyphenChar=־您可以通过指定希伯来语字体来中断 maqqef 。

但是\hfil您的定义中的 仍然是一个问题。我通过将条目放入 a 中\vbox并用 a 计算\parshape,然后取消装箱以折叠第一行来解决了这个问题。然后您可以插入 an \hfill

不过,这也有一个缺点。您无法跨页或跨列拆分条目。您可能可以解决分页符的问题,但我认为绝对不能解决列拆分的问题,因为甚至\tcolorbox无法做到这一点。

无论如何,这里是 MWE:

\documentclass{article}

\usepackage{geometry}
\usepackage{multicol}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguage{hebrew}

\newfontfamily\hebrewfont{SBL BibLit}[Script=Hebrew,HyphenChar={־}]

\parindent=0em

\newlength\entrywidth
\newlength\entrysep
\newlength\entryindent
\entrysep=1em
\entryindent=1em

% \shapeentry adapted from Victor Eijkhout, TeX by Topic.
\newcounter{entryline}
\newbox\linebox \newbox\snapbox
\def\shapeentry{%
  \ifnum\value{entryline}=0
    \leftskip 0pt
    \rightskip 0pt plus 1fil
  \fi
  \setbox\linebox\lastbox
  \ifvoid
    \linebox
  \else
    \unskip\unpenalty
    {\shapeentry}%
    \stepcounter{entryline}%
    \setbox\snapbox\hbox{\unhcopy\linebox}%
    \ifnum\value{entryline}=1
      \mbox{\box\snapbox}\hfill\entryname\break
    \else
      \box\linebox\hskip\entryindent\break
    \fi
  \fi}

\DeclareDocumentCommand{\entry}{ m o m }{%
  \parindent=0em
  \setcounter{entryline}{0}
  \gdef\entryname{\textenglish{\textbf{#1}}}
  \settowidth{\entrywidth}{\entryname\hskip\entrysep}
  \begin{hebrew}
    \vbox{%
      \parshape=2
                \entrywidth \dimexpr\linewidth-\entrywidth
                \entryindent \dimexpr\linewidth-2\entryindent
      #3\IfNoValueF{#2}{\space\textenglish{\scriptsize #2}}\par\shapeentry}
  \end{hebrew}
  \vskip-\baselineskip
}

\setlength{\columnsep}{0.75pc}
\setlength{\columnseprule}{0.4pt}
\pagestyle{empty}

\begin{document}

\begin{multicols}{2}
  \entry{vehicle identification number}{דער אױטאָ־אידענטיפֿיציר־נומער, ־ן}
  \entry{vehicle inspection program}{די אױטאָ־אינספּעקטיר־פּראָגראַם, ־ען}
  \entry{be eager to be eager to}[[BALN] [KhÉYShEK] [LÓET/LÓER]]{זײַן אַ בעלן
    צו; האָבן חשק צו; זײַן נײַגעריק ‹להוט› צוצו; האָבן צו; זײַן נײַגעריק ‹להוט› צוצו;
  צו; זײַן נײַגעריק ‹להוט› צו; זײ֜ער ‹שטאַרק› װעלן}
  \entry{vehicle identification number}{דער אױטאָ־אידענטיפֿיציר־נומער, ־ן}
  \entry{vehicle inspection program}{די אױטאָ־אינספּעקטיר־פּראָגראַם, ־ען}
  \entry{be eager to be eager to}[[BALN] [KhÉYShEK] [LÓET/LÓER]]{זײַן אַ בעלן
    צו; האָבן חשק צו; זײַן נײַגעריק ‹להוט› צוצו; האָבן צו; זײַן נײַגעריק ‹להוט› צוצו;
  צו; זײַן נײַגעריק ‹להוט› צו; זײ֜ער ‹שטאַרק› װעלן}
  \entry{vehicle identification number}{דער אױטאָ־אידענטיפֿיציר־נומער, ־ן}
  \entry{vehicle inspection program}{די אױטאָ־אינספּעקטיר־פּראָגראַם, ־ען}
  \entry{be eager to be eager to}[[BALN] [KhÉYShEK] [LÓET/LÓER]]{זײַן אַ בעלן
    צו; האָבן חשק צו; זײַן נײַגעריק ‹להוט› צוצו; האָבן  צו; זײַן נײַגעריק ‹להוט› צוצו;
    צו; זײַן נײַגעריק ‹להוט› צו; זײ֜ער ‹שטאַרק› װעלן}
  \entry{vehicle identification number}{דער אױטאָ־אידענטיפֿיציר־נומער, ־ן}
  \entry{vehicle inspection program}{די אױטאָ־אינספּעקטיר־פּראָגראַם, ־ען}
  \entry{be eager to be eager to}[[BALN] [KhÉYShEK] [LÓET/LÓER]]{זײַן אַ בעלן
    צו; האָבן חשק צו; זײַן נײַגעריק ‹להוט› צוצו; האָבן  צו; זײַן נײַגעריק ‹להוט› צוצו;
    צו; זײַן נײַגעריק ‹להוט› צו; זײ֜ער ‹שטאַרק› װעלן}
\end{multicols}
\end{document}

在此处输入图片描述

答案3

也许我没有理解您的 \entry 定义,但我怀疑问题在于您没有告诉 latex 文本的哪些部分是希伯来语,因此它没有应用正确的连字规则。例如,我目前正在使用 paracol 和 polyglossia 编写一个多语言两列文档(面向翻译),并且只有当我明确声明其他(非英语)语言(英语是默认语言,如您的示例)时,我才会获得正确的连字行为。例如:

\documentclass[letterpaper,titlepage,twoside,openany,12pt]{book}

\usepackage{paracol} 
%more space between the columns to trigger more hyphenation
\setlength{\columnsep}{90 pt} 

\usepackage{polyglossia}
\setdefaultlanguage[variant=american]{english}
\setotherlanguages{icelandic,danish,norsk,swedish}

%encourage hyphenation for this example
\hyphenpenalty=0
\tolerance=900
\setlength{\emergencystretch}{0.2em}

\begin{document}

\begin{paracol}{2}

\switchcolumn[0]*
\noindent
Once upon a time, in a kingdom far far away (so far away that no one knows
its name) there was a king who had an only child, a daughter.  She was so
sullen and gloomy that no one had ever seen her laugh.  She was a grown
woman, very pretty and kind; but, she was always sad and never happy ---
either she cried or she sulked.  It was simply impossible to make her
smile.

\switchcolumn
\begin{danish}
\noindent
Der var engang en Konge i et Land langt langt borte, som der er ingen, der
ved Navn på; han havde kun en eneste Datter.  Hun var så sum og så sur,
at der var aldrig nogen, der havde set hende le.  Hun var nu en voksen Pige
og en køn Pige og en rar Pige, men altid var hun sorrigfuld og aldrig glad;
enten græd hun eller også surmulede hun.  Det var ikke til at slå et Smil
af hende med en Vognkæp.
\unskip
\end{danish}

\end{paracol}

\end{document}

(请注意右侧栏中所有带连字符的丹麦语单词)。

注意:除非我在 \end{language} 标签前包含 \unskip,否则会出现不需要的空格和换行符。

相关内容