我正在编写 IEEE 事务双列格式的文档。内联数学方程式渲染不正确,主要是符号之间有不需要的空格(如下面我突出显示的)。我理解 Latex 必须调整文本间距以对齐列。是否有任何方法可以指示 Latex 拆分数学模式表达式以减少冗余空格插入?
\documentclass{IEEEtran}[10pt]
\usepackage{amsfonts}
\begin{document}
A bilinear pairing defined to be $ \mathcal{G} = (p,\mathbb{G}_a,\mathbb{G}_b,\mathbb{G}_T,e,P_a,P_b)$ where we choose $\mathbb{G}_a=\langle P_a \rangle$
\end{document}
答案1
我认为你有两个选择:
在内联数学公式中插入一个或多个精心选择的
\allowbreak
指令,以允许在逗号后换行,或者将内联方程转换为显示方程,因为 (i) 该方程可能足够重要,值得进行这种处理,并且 (ii) 您正在处理相当窄的列。
\documentclass{IEEEtran}
\usepackage{amsfonts} % for "\mathbb" macro
\begin{document}
A bilinear pairing defined to be
$\mathcal{G}=(p, \mathbb{G}_a, \mathbb{G}_b, \mathbb{G}_T, e, \allowbreak P_a, \allowbreak P_b)$,
where we choose $\mathbb{G}_a=\langle P_a\rangle$, \dots
\begin{center} --------- or --------- \end{center} % just for visual interest
A bilinear pairing defined to be
\[
\mathcal{G}=(p, \mathbb{G}_a, \mathbb{G}_b, \mathbb{G}_T, e, P_a, P_b)\,,
\]
where we choose $\mathbb{G}_a=\langle P_a\rangle$, \dots
\end{document}
附录,灵感来自 Manuel 的评论。虽然对于眼前的例子来说可能有点过度,但在数学模式下,拥有一个允许在逗号后换行的函数或宏可能会很有用。如果切换到 LuaLaTeX 是您的选项,那么以下代码应该会引起您的兴趣。它设置了两个名为\breakatcommas
和的 TeX 宏\nobreakatcommas
,分别启用和禁止在逗号处换行。问题\breakatcommas
前应该允许这种换行的行(们),并\nobreakcommas
在有问题的行(们)之后发出。
% !TEX TS-program = lualatex
\documentclass{IEEEtran}
\usepackage{amsfonts} % for '\mathbb' macro
\usepackage{luacode,luatexbase}
\begin{luacode}
function breakatcommas ( line )
line = string.gsub ( line, ",", ",\\allowbreak" )
return line
end
\end{luacode}
\newcommand\breakatcommas{\directlua{luatexbase.add_to_callback
( "process_input_buffer", breakatcommas, "breakatcommas") }}
\newcommand\nobreakatcommas{\directlua{luatexbase.remove_from_callback
( "process_input_buffer", "breakatcommas") }}
\begin{document}
A bilinear pairing defined to be
\breakatcommas
$\mathcal{G}=(p, \mathbb{G}_a, \mathbb{G}_b, \mathbb{G}_T, e, P_a, P_b)$
\nobreakatcommas
where we choose $\mathbb{G}_a=\langle P_a \rangle$, \dots
\end{document}