![如何通过单个 Unicode 字符打印 \frac{1}{2}?](https://linux22.com/image/240622/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%E5%8D%95%E4%B8%AA%20Unicode%20%E5%AD%97%E7%AC%A6%E6%89%93%E5%8D%B0%20%5Cfrac%7B1%7D%7B2%7D%EF%BC%9F.png)
我正在寻找一个命令,该命令可以使用现代 TTF/OTF 字体中可用的字形打印简单的分数,如 1/2、1/3 等。理想情况下,如果我的文档是使用 (PDF)LaTeX 编译的,我希望此命令输出普通的\frac{1}{2}
,但如果编译器是 XeLaTeX 或 LuaLaTeX(和/或已加载)并且当前字体中提供所需的 Unicode 字符,则输出类似的内容。\frac{1}{3}
$\text{\char"00BD}$
fontspec
unicode-math
有人已经发明了这样的命令吗?
答案1
你可以尝试
\documentclass[a4paper]{article}
\usepackage{ifxetex,ifluatex}
\newif\ifunicode
\ifxetex\unicodetrue\else\ifluatex\unicodetrue\fi\fi
\ifunicode
\usepackage{unicode-math}
\setmainfont[Ligatures=TeX,Fractions=On]{XITS}
\setmathfont{XITS Math}
\makeatletter
\let\@@@frac\frac
\def\frac#1#2{\sbox0{#1/#2}\sbox2{#1\phantom{/}#2}%
\ifdim\wd0=\wd2 % no corresponding character
\@@@frac{#1}{#2}%
\else
\mbox{#1/#2}%
\fi}
\makeatother
\fi
\begin{document}
1/2$\frac{1}{2}\frac{12}{11}$
\end{document}
在这里,我假设粗俗的分数宽度与斜线形式的宽度不同,这似乎很可能发生。
然而我建议不是在数学语境中使用普通的分数。
答案2
这回答了你的问题标题,但没有回答你的解释(这似乎意味着你不能在 pdfLaTeX 中使用粗俗的分数)。该textcomp
包提供\textonehalf
、\textonequarter
和\textthreequarters
。如果你的字体和所选的编码支持这些,那么可以直接使用它们。(但是,如果你的字体不支持这些,你会收到一条错误消息,如"\textonequarter" unavailable in encoding OT1"
或一个奇怪的符号。)这适用于pdfLaTeX
:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{mathpazo}
\usepackage{textcomp}
\usepackage{nicefrac} % For comparison
\usepackage{xfrac} % Works better with other fonts
\begin{document}
\noindent Here are some vulgar fractions: \textonehalf, \textonequarter,
\textthreequarters.
\noindent Here are some \texttt{nicefrac} fractions: \nicefrac{1}{2},
\nicefrac{1}{4}, \nicefrac{3}{4}, \nicefrac{11}{7}.
\noindent Here are some \texttt{xfrac} fractions: \sfrac{1}{2},
\sfrac{1}{4}, \sfrac{3}{4}, \sfrac{11}{7}.
\end{document}
请注意,虽然xfrac
分数看起来不错,但它们的粗细与用字体设计的粗俗分数不同。不幸的是,textcomp
似乎只提供对这三个分数的访问。如果您使用 LuaTeX 或 XeTeX,那么您可能能够访问字体中提供的其他字形由 doncherry 描述。
答案3
@mforbes 的回答是正确的,但是可以简化:
- 不需要 mathpazo 包。
- 对于 XeLaTeX,fontspec 包就足够了,不需要 textcomp 包。
基于此,最小示例如下:
对于 pdfLaTeX:
% !TeX program = pdflatex
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{lmodern}
\begin{document}
\textonehalf \textonequarter \textthreequarters
\end{document}
对于 XeLaTeX:
\documentclass{article}
\usepackage{fontspec}
\begin{document}
\textonehalf \textonequarter \textthreequarters
\end{document}
结果:
答案4
不确定这是否是你想要的,但是诸如
\documentclass{article}
\usepackage{ucs}
\usepackage[utf8x]{inputenc}
\begin{document}
\unichar{"00BD}
\end{document}
使用pdftex
和进行编译xelatex
。