如何通过单个 Unicode 字符打印 \frac{1}{2}?

如何通过单个 Unicode 字符打印 \frac{1}{2}?

我正在寻找一个命令,该命令可以使用现代 TTF/OTF 字体中可用的字形打印简单的分数,如 1/2、1/3 等。理想情况下,如果我的文档是使用 (PDF)LaTeX 编译的,我希望此命令输出普通的\frac{1}{2},但如果编译器是 XeLaTeX 或 LuaLaTeX(和/或已加载)并且当前字体中提供所需的 Unicode 字符,则输出类似的内容。\frac{1}{3}$\text{\char"00BD}$fontspecunicode-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}

带有 Palatino 的粗俗分数的示例。

请注意,虽然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

相关内容