pdflatex 中的自动直立下标

pdflatex 中的自动直立下标

有一段时间我使用米科斯解决方案问题基于 lualatex 自动排版下标。现在我想切换回 pdflatex(因为编译时间和更好的 preformat/mylatexformat 支持)但保留此解决方案提供的语法。

在此答案@Svend Tveskæg 展示了一个也适用于 pdflatex 的解决方案,但语法略有不同。现在我想修改这个解决方案,使其像 Micos 解决方案一样运行,但适用于 pdflatex。

特别是,它应该使用{}作为分隔符(而不是|),并且如果我留下像这样的间隙,它还会切换回斜体$v_ {x,\max}$

我尝试像这样替换@Svend Tveskæg 中的分隔符,但是不起作用:

\documentclass{article}

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

\begin{document}

$A_1 A_p A_{p} A_ {p} $

\end{document}

错误信息:

This is pdfTeX, Version 3.141592653-2.6-1.40.23 (TeX Live 2021) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./Upright.tex
LaTeX2e <2021-11-15> patch level 1
L3 programming layer <2022-02-21>
(/usr/local/texlive/2021/texmf-dist/tex/latex/base/article.cls
Document Class: article 2021/10/04 v1.4n Standard LaTeX document class
(/usr/local/texlive/2021/texmf-dist/tex/latex/base/size10.clo))
! Illegal parameter number in definition of _.
<to be read again> 
                   1
l.8 \def\subtextup\catcode{#1
                             }{\sb{\textnormal{#1}}}

以下是我目前使用过的内容:

% Automatically upright subscripts with lualatex
\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesPackage{uprightsub}
  [2021/09/06 v1.0 upright math via lualatex]


\RequirePackage{amsmath,luacode}

%%See https://tex.stackexchange.com/questions/156641/typeset-subscript-material-automatically-in-upright-font-shape

\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")}}

\endinput
%%
%% End of file `uprightsub.sty'.

如果有另一个 pdflatex 解决方案能够显示出所需的行为,那么我们也会欢迎。

编辑

如果我编译使用像这样的 lualatex 解决方案

\documentclass{article}

\usepackage{uprightsub}

\begin{document}

$A_1 A_p A_{p} A_ {p} $

\end{document}

输出为

在此处输入图片描述

这将是此示例所需的输出。

答案1

如果您不了解 TeX,那么尝试修改 TeX 代码将会很困难。

无论如何,只需这样做(使用nospace版本来“尊重”空间)

%! TEX program = pdflatex
\documentclass{article}
\usepackage{amsmath}
\usepackage{ltxcmds}

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

\begin{document}

$A_1 A_p A_{p} A_ {p} $

\end{document}

如果我正确理解了这个输出输出应该是你想要的。

相关内容