我想为内联分数添加合适的序数后缀,类似于engord
软件包oberdiek
。
让我澄清一下。我想使用宏\engordfrac{2}{3}
来自动获取内联文本分数2/3在输出中。同样,\engordfrac{4}{5}
应该产生4/5在输出中。
我在下面第二段中加入了 MWE 来说明 engord 包的示例以及所需的输出。
\documentclass{article}
\usepackage{nicefrac}
\usepackage{engord}
\begin{document}
This is the \engordnumber{1} ever time the runner finished
\engordnumber{2} in the race. This was her \engordnumber{14}
ever race. % just an example demonstration of engord package capabilities
\bigskip
Oh no! I paid \nicefrac{2}{3}rd of the price you paid for
only \nicefrac{1}{4}th of the quantity. % need to replace nicefrac with a suitable macro
\end{document}
我该如何实现这一点?如果普通的 TeX 很难,luatex
那么如果它有帮助,对我来说就有用。它不一定必须基于xfrac
或nicefrac
只要达到预期结果即可。我只是在标题中建议这样做,因为这些在排版上看起来更好。
附言:我不确定排版 2/3、1/4 和其他内联分数的正确方法(印刷上可接受的)是什么。
答案1
(更新答案以充分利用 LuaLaTeX)
既然您可以使用 LuaLaTeX,我认为设置一个 Lua 函数来复制engord
包中的部分工作是很自然的。具体来说,在下面显示的代码中,Lua 函数myord
确定给定整数的后缀字符串应该是、、st
还是。后缀字符串可以以两种不同的方式附加到的输出,具体取决于后缀字符串是应该是全尺寸的(如屏幕截图所示)还是与分母项的大小相同。下面的代码提供了两个 LaTeX 宏来执行此任务。选择更适合您的格式需求的形式。nd
rd
th
\nicefrac
\nicefrac
\documentclass{article}
\usepackage{nicefrac}
\makeatletter\let\percentchar\@percentchar\makeatother
\directlua{ % define a function that prints 2-letter ordinal strings
function myord ( n ) % n: some positive number
n = n \percentchar 100 % modulo-100
if m>3 and m<21 then tex.sprint ( "th" )
elseif m \percentchar 10 == 1 then tex.sprint ( "st" )
elseif m \percentchar 10 == 2 then tex.sprint ( "nd" )
elseif m \percentchar 10 == 3 then tex.sprint ( "rd" )
else tex.sprint ( "th" )
end
end
}
\newcommand\myord[1]{\directlua{myord(#1)}} % LaTeX "wrapper macro"
\newcommand{\myfracA}[2]{\nicefrac{#1}{#2}\myord{#2}}
\newcommand{\myfracB}[2]{\nicefrac{#1}{#2\myord{#2}}}
\begin{document}
\myfracA{2}{3}, \myfracA{3}{4}
\myfracB{2}{3}, \myfracB{3}{4}
\end{document}
答案2
这就是你所追求的吗?
\documentclass{article}
\usepackage{nicefrac}
\usepackage{engord}
\newcommand{\ordfrac}[2]{\nicefrac{#1}{\engordnumber{#2}}}
\begin{document}
This is the \engordnumber{1} ever time the runner finished
\engordnumber{2} in the race. This was her \engordnumber{14}
ever race. % just an example demonstration of engord package capabilities
\bigskip
Oh no! I paid \ordfrac{2}{3} of the price you paid for
only \ordfrac{1}{4} of the quantity. % need to replace nicefrac with a suitable macro
\end{document}