自动以直立字体形式排版下标材料

自动以直立字体形式排版下标材料

正如这里讨论的例子: 数学模式中的下标应该是直立的吗? 下标通常应排版为直立。是否有可能自动实现这一点,例如在文档标题中插入某些内容?或者,如果在 LaTeX 中无法实现,LyX 中是否有选项?到目前为止,我都是这样做的:Q _ Alt Z R test这很慢。

答案1

如果您有很多下标,将以下代码放在序言中可能会有所帮助:

\makeatletter
 \begingroup
  \catcode`\_=\active
  \protected\gdef_{\@ifnextchar|\subtextup\sb}
 \endgroup
\def\subtextup|#1|{\sb{\textup{#1}}}
\AtBeginDocument{\catcode`\_=12 \mathcode`\_=32768}
\makeatother

然后您就可以书写、说话$A_|p|$并进入p直立文本模式。

平均能量损失

\documentclass{article}

\makeatletter
 \begingroup
  \catcode`\_=\active
  \protected\gdef_{\@ifnextchar|\subtextup\sb}
 \endgroup
\def\subtextup|#1|{\sb{\textup{#1}}}
\AtBeginDocument{\catcode`\_=12 \mathcode`\_=32768}
\makeatother

\begin{document}

$A_|p|$

\end{document}

输出

答案2

这是基于 TeX 的解决方案。

\def\subinrm#1{\sb{\rm#1}}
{\catcode`\_=13 \global\let_=\subinrm}
\mathcode`_="8000
\def\upsubscripts{\catcode`\_=12 } \def\normalsubscripts{\catcode`\_=8 }

\upsubscripts

$A_{lake}$, $\normalsubscripts \sum_{i=1}^\infty {1\over n}$

答案3

这是一个基于 LuaLaTeX 的解决方案。该解决方案假设用花括号括起来的下标材料应以直立的字体形状呈现。主要的输入语法要求是_{字符之间不能有空格。$R_{lake}$有效,但$R_ {lake}$无效。(空格里面但花括号是可以的。)

为了方便输入单字符下标(这种情况经常发生!),进一步假设不是用花括号括起来应该不是以直立的字体形状呈现。

最后,如果有下标材料被括在花括号中,但应该不是要用直立字母呈现,您要么需要明确地将材料置于数学模式,如下面第四项所示,要么在_和之间留出空隙{,如前所述。也就是说,必须写成$\sum_ {i=0}^\infty$

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}   
\usepackage{amsmath,luacode}
\begin{luacode}
function up_subs ( buff )
    return ( string.gsub ( buff , "_(%b{})" , "_{\\textnormal%1}" ) )
end
\end{luacode}
\AtBeginDocument{\directlua{luatexbase.add_to_callback(
    "process_input_buffer", up_subs, "up_subs")}}
\begin{document}

$R_t$ $R_{lake}$ $\sum_i$ $\sum_{$i{=}0$}^\infty$ % or: \sum_ {i=0}^\infty

\end{document}

答案4

发布日期这里, 这以上由 wipet 回答不适用于像这样的脚本类scrartcl,但可以轻松更新以执行以下操作:

\documentclass{scrartcl}
\usepackage{amsmath}

% typesetting indexes upright by default
\def\subinrm#1{\sb{\textnormal{#1}}}
{\catcode`\_=13 \global\let_=\subinrm}
\mathcode`_="8000
\def\upsubscripts{\catcode`\_=12 } \def\normalsubscripts{\catcode`\_=8 }
% the toggle for upright subscripts
\upsubscripts
% the toggle for italic subscripts
%\normalsubscripts

\begin{document}
    $A_{lake}$, $\normalsubscripts \sum_{i=1}^\infty {1\over n}$
\end{document}

如果你不需要重音字符(如变音符号),则应\mathrm使用\textnormal,因为大卫·卡莱尔指出。那么,该amsmath包也不是严格要求的。

相关内容