防止某些字符出现在行首

防止某些字符出现在行首

我正在做一个图书项目(梵文),其中的诗句被分解成单个单词,每个单词的含义都如下面的 MWE 所示。左侧是原文中的单词,右侧是这些单词的详细说明。每行根据需要使用符号=->;(unicode 2404)。我将MWE 中的unicode 替换为 ascii 。|

我想防止=->;全部出现在每行的开头。我设法通过将 字符与 中的前一个单词一起包装来实现这一点\mbox{}。但是,对其他字符执行相同操作不会产生相同的结果。

\documentclass{report}

\usepackage[outline]{contour}

\begin{document}
\begin{sloppypar}
\noindent
\textbf{pratipadārthaḥ} \contour{black}{$\Rightarrow$}
\textit{\textbf{kayācit}} =  kayācit kanyayā ;
\textit{\textbf{nalam}} =   nalam ;
\textit{\textbf{ālokya}} =  dṛṣṭvā ;
\textit{\textbf{lalajje}} =  lajjā \mbox{prāptā |}
\textit{\textbf{kayā api}} = kayācit kanyayā ;
\textit{\textbf{tat+bhāsi}} $\rightarrow$  tat = nalasya,  bhāsi =  kāntyām ;
\textit{\textbf{hṛdā}} =  cittena ;
\textit{\textbf{mamajje}} =  majjanaṃ \mbox{kṛtam |}
\textit{\textbf{kā api}} =  kācit kanyā ;
\textit{\textbf{tam}} =   taṃ nalam ;
\textit{\textbf{smaram eva}} =  manmatham eva ;
\textit{\textbf{mene}} =  \mbox{bhāvitavatī|}
\textit{\textbf{anyā }} =  anyā  kanyā ;
\textit{\textbf{manobhū+vaśabhūyam}} $\rightarrow$  manobhū = manmathasya,  vaśabhūyam =  vaśatvam ;
\textit{\textbf{bheje}} =  \mbox{prāptavatī |}
\end{sloppypar}

\end{document}

输出中问题区域用红色标记

在上面的输出中,=;出现在行首。根据文本的不同,其他字符也可能出现在此位置。有办法防止这种情况发生吗?更广泛地说,我需要将此更改应用于大约 1000 个已经输入的文本块,并且正在寻找一种可以应用最少更改的解决方案。如果没有这样的解决方案,我也很乐意使用其他解决方案。

答案1

(仅总结之前的评论,以便该查询可被视为已收到“官方”答复)

在 TeX 和 LaTeX 文档中,输入字符~默认定义为“连接符”或“不可中断空格”。因此,如果您将所有; |$\to$和替换为、~=和,您将摆脱大多数不必要的换行符。~; ~|~$\to$~=

我还会执行\raggedright关闭连字符(和对齐)的操作。这样您就不必在\mbox指令中将各种单词括起来。

在此处输入图片描述

\documentclass{report}
\newcommand\textbfit[1]{\textbf{\textit{#1}}}
\usepackage[outline]{contour}

\begin{document}
\raggedright
\textbf{pratipadārthaḥ} \contour{black}{$\Rightarrow$}
\textbfit{kayācit}~= kayācit kanyayā~;
\textbfit{nalam}~= nalam~;
\textbfit{ālokya}~= dṛṣṭvā~;
\textbfit{lalajje}~= lajjā prāptā~|
\textbfit{kayā api}~= kayācit kanyayā~;
\textbfit{tat\textup{+}bhāsi}~$\to$ tat~= nalasya, bhāsi~= kāntyām~;
\textbfit{hṛdā}~= cittena~;
\textbfit{mamajje}~= majjanaṃ kṛtam~|
\textbfit{kā api}~= kācit kanyā~;
\textbfit{tam}~= taṃ nalam~;
\textbfit{smaram eva}~= manmatham eva~;
\textbfit{mene}~= bhāvitavatī|
\textbfit{anyā }~= anyā kanyā~;
\textbfit{manobhū\textup{+}vaśabhūyam}~$\to$ manobhū~= manmathasya, vaśabhūyam~= vaśatvam~;
\textbfit{bheje}~= prāptavatī~|
\end{document}


附录针对 OP 的评论:如果你可以自由地使用 LuaLaTeX 而不是 XeLaTeX,并且如果你对 Lua 的字符串函数比较熟悉,那么设置一个 Lua 函数来扫描输入材料(就像一个预处理器)并在 、 、 和 之前创建必要的不可破坏的空间是相当;简单=|$\to$ 自动地:如果这些字符前有一个可断开的空格,则将其替换为不可断开的空格,如果还没有空格,插入一个新的不可中断空格。以下示例显示了如何执行此操作。请注意,我故意弄乱了输入,使得字符前没有空格,而在其他情况下则有一个或多个空格字符。

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{report}
\newcommand\textbfit[1]{\textbf{\textit{#1}}}
\usepackage[outline]{contour}

\usepackage{luacode} % for 'luacode' env.
% Define a Lua function called 'nobreakspace' 
\begin{luacode}
function nobreakspace ( s )
  s = s:gsub ( "%s-([=;|])"    , "~%1" ) -- a Lua char. class that contains = ; | 
  s = s:gsub ( "%s-(%$\\to%$)" , "~%1" )
  s = s:gsub ( "+", "\\textup{+}" ) -- don't render '+' symbols in italics
  return s
end
\end{luacode}

% Define LaTeX utility macros to activate and deactivate the Lua function:
\newcommand\NobreakspaceOn{\directlua{luatexbase.add_to_callback (
  "process_input_buffer", nobreakspace, "nobreakspace") }}
\newcommand\NobreakspaceOff{\directlua{luatexbase.remove_from_callback (
  "process_input_buffer", "nobreakspace") }}

\begin{document}
\NobreakspaceOn % <-- Activate the Lua function *by assigning it to the 
                %     'process_input_buffer' callback)

\raggedright 
\textbf{pratipadārthaḥ} \contour{black}{$\Rightarrow$}
\textbfit{kayācit} = kayācit kanyayā;
\textbfit{nalam} = nalam;
\textbfit{ālokya} = dṛṣṭvā;
\textbfit{lalajje}   = lajjā prāptā  |
\textbfit{kayā api} = kayācit kanyayā ;
\textbfit{tat+bhāsi}$\to$ tat = nalasya, bhāsi = kāntyām;
\textbfit{hṛdā} = cittena;
\textbfit{mamajje} = majjanaṃ kṛtam  |
\textbfit{kā api} = kācit kanyā;
\textbfit{tam}          = taṃ nalam    ;
\textbfit{smaram eva} = manmatham eva ;
\textbfit{mene} = bhāvitavatī  |
\textbfit{anyā} = anyā kanyā;
\textbfit{manobhū+vaśabhūyam}    $\to$ manobhū = manmathasya, vaśabhūyam = vaśatvam;
\textbfit{bheje} = prāptavatī|
\end{document}

相关内容