数学模式下的非斜体(罗马)下标

数学模式下的非斜体(罗马)下标

有没有办法将索引(下标)全局设置为非斜体?我知道具体情况具体分析

X_{\text{text goes here}}

但我必须在整个文档中改变这一点,这变得很麻烦。

答案1

可以通过重载_将所有下标设置为罗马字体,但这似乎是个坏主意,因为它可能会破坏一些意想不到的东西。

您可能想考虑定义一个产生直立下标的宏。我\subtxt在下面定义了这样一个宏()。由于在数学模式下似乎不太可能需要下划线,因此我还重新定义了在数学模式下使用它时\_扩展为\subtxt(否则会像正常情况一样产生下划线)。

\documentclass{article}

\usepackage{amsmath} %% <- necessary for correct scaling of subscripts

\begin{document}

\newcommand*\subtxt[1]{_{\textnormal{#1}}}
\DeclareRobustCommand\_{\ifmmode\expandafter\subtxt\else\textunderscore\fi}

\[
    X_i + X\subtxt{i} + X\_i + X\_{text goes here}
\]

\end{document}

输出

笔记:

  • 我使用\textnormal而不是\text因为使用后一个命令创建的下标的字体会根据周围文本而变化。例如,您可能不希望定理环境中的所有下标都采用斜体。参见例如这个答案了解更多信息。

  • 我使用\DeclareRobustCommand重新定义是\_因为这个宏的原始版本也是这样定义的。这不太重要,但可以找到更多信息这里

除非您在文档中将下划线用于其他目的,否则您现在可以进行搜索和替换将每个_下划线更改为\_

答案2

在此处输入图片描述

\documentclass{article}

\begin{document}
\sbox0{$$}

\scriptfont1=\scriptfont0


$X_{abc}+y_{max}$


\end{document}

请注意,这会影响脚本大小字体的所有数学用途,而不仅仅是下标。

答案3

我建议对这些下标使用不同的字符。一种方法是使用?在数学模式中很少使用的字符。另一种方法是(也许你可以找到一种轻松输入它的方法)。

\documentclass{article}
\usepackage{amsmath}
\usepackage{newunicodechar} % for using ↓

% the main command
\newcommand{\uprightsubscript}[1]{_{\textnormal{#1}}}

% this sets up the use of ?
\begingroup\lccode`~=`?\lowercase{\endgroup\let~}\uprightsubscript
\AtBeginDocument{\mathcode`?="8000 }

% this sets up the use of ↓
\newunicodechar{↓}{\uprightsubscript}

\textheight=2cm % just for making a smaller picture

\begin{document}

$x?{max}$ works\footnote{Also here $x?{max}$} and again $x?{max}$?

$x↓{max}$ works\footnote{Also here $x↓{max}$} and again $x↓{max}$?

\end{document}

在此处输入图片描述

答案4

这是一个基于 LuaLaTeX 的解决方案。只要_(下划线) 字符和花括号内的内容之间没有空格,花括号内的下标就会用直立 (“罗马”) 字母排版。如果下标项未用花括号括起来,例如 ,则$x_i$Lua 代码不会处理它。

如果出于某种原因,你不是想要让 Lua 函数对花括号中的下标项进行操作,只需确保_和 下标项之间有一个或多个空格即可。想要暂停 Lua 函数操作的一个明显原因是下标项包含应在数学模式下处理的数学材料。

要启动操作,请发出指令\upsubOn。要彻底终止操作,请执行\upsubOff

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}

\usepackage{amsmath,unicode-math}
\usepackage{luacode}
%% Lua-side code:
\begin{luacode}
function sub_up ( s )
  return ( s:gsub ( "_(%b{})" , "_{\\textnormal%1}" ) )
end
\end{luacode}
%% LaTeX-side code:
\newcommand\upsubOn{\directlua{luatexbase.add_to_callback( 
    "process_input_buffer" , sub_up , "subup" )}}
\newcommand\upsubOff{\directlua{luatexbase.remove_from_callback( 
    "process_input_buffer" , "subup" )}}
\AtBeginDocument{\upsubOn}  % activate the Lua function by default

\begin{document}
$X_{text goes here}$\quad $x_ {ab cd}$\quad $x_ {i_j},x_k^u$

\upsubOff
$X_{text goes here}$\quad $x_ {ab cd}$\quad $x_ {i_j},x_k^u$
\end{document}

相关内容