将宏参数视为十六进制数

将宏参数视为十六进制数

我正在编写一个宏来输出 Unicode 代码点U+1F642

答案1

\char是一个 TeX 原语,以 a 为参数<number>没有需要使用括号作为参数的分隔符。

LaTeX 提供了\symbol它的包装器。

\newcommand{\unicode}[2]{%
  \texttt{U+#1} \symbol{"#1} \texttt{#2}%
}

应该\char

\newcommand{\unicode}[2]{%
  \texttt{U+#1} \char"#1\space\space\texttt{#2}%
}

(第一个\space被吞噬作为<number>终结者,第二个被排版)。

最小示例:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{CMU Serif}

\newcommand{\unicode}[2]{%
  \texttt{U+#1} \symbol{"#1} \texttt{#2}%
}

\begin{document}

\unicode{0180}{LATIN SMALL LETTER B WITH STROKE}

\unicode{04AF}{CYRILLIC SMALL LETTER STRAIGHT U}

\end{document}

但是,如果您希望为某些字符指定不同的字体,则定义如下。请注意参数的顺序。

\documentclass{article}
\usepackage{fontspec}
\setmainfont{CMU Serif}
\newfontfamily{\djvusans}{DejaVu Sans}

\newcommand{\unicode}[3][]{%
  \texttt{U+#2} {#1\symbol{"#2}} \texttt{#3}%
}

\begin{document}

\unicode{0180}{LATIN SMALL LETTER B WITH STROKE}

\unicode{04AF}{CYRILLIC SMALL LETTER STRAIGHT U}

\unicode[\djvusans]{1F0CA}{PLAYING CARD TEN OF DIAMONDS}

\end{document}

在此处输入图片描述

如果您希望可选参数放在最后(但我不推荐这样做),您可以使用\NewDocumentCommand由 提供的,xparse它由 加载fontspec

\documentclass{article}
\usepackage{fontspec}
\setmainfont{CMU Serif}
\newfontfamily{\djvusans}{DejaVu Sans}

\NewDocumentCommand{\unicode}{mmO{}}{%
  \texttt{U+#1} {#3\symbol{"#1}} \texttt{#2}%
}

\begin{document}

\unicode{0180}{LATIN SMALL LETTER B WITH STROKE}

\unicode{04AF}{CYRILLIC SMALL LETTER STRAIGHT U}

\unicode{1F0CA}{PLAYING CARD TEN OF DIAMONDS}[\djvusans]

\end{document}

相关内容