我不明白如何在我的 XeLaTeX 文件中获取 ▼ (U+25BC;实心倒三角形)。以下几行是我的 XeLaTeX 的一部分,似乎与此问题相关。我希望修改文件以获取 ▼ (U+25BC;实心倒三角形),但没有进展。我想文件中的许多包都在相互冲突。如果您能分享一些针对这种情况的好方法,我将不胜感激。
供您参考,我使用的是基于 MacBook Pro 的 TeXShop 4.31 版 (XeLaTeX)。我应该在此文件中使用英文、梵文、藏文和繁体中文字母。
\usepackage{polyglossia, fontspec, xunicode}
\usepackage[Apara, Bpara,Cpara]{ednotes}
\usepackage{setspace}
\setmainlanguage{english}
\setotherlanguages{sanskrit}
\usepackage{xeCJK}
\setCJKsansfont[Path=/Users/XXX/Library/Fonts/]{NotoSerifCJK.ttc}
\usepackage{ucs}
\usepackage[utf8x]{inputenc}
\usepackage{textcomp}
\DeclareUnicodeCharacter{"2100}{\textcelsius}
\DeclareUnicodeCharacter{"2103}{\textcelsius}
\DeclareUnicodeCharacter{"25BC}{\textcelsius}
%%%%%Sigla and Symbols
\usepackage{enumitem}
\usepackage{setspace}
\usepackage{ltablex}
%%%%%critical_apparatus
\usepackage{bbding}
\usepackage{ulem}
\usepackage{xstring}
\usepackage{ifthen}
\usepackage{wasysym} %This line is related to \astrosun ⊙
\begin{document}
\char "2100\relax
\char "2103\relax
\char "25BC\relax
\end{document}
答案1
以下是简化的 MWE:
\documentclass{standalone}
\usepackage{polyglossia} % Includes fontspec
\usepackage{newunicodechar}
\defaultfontfeatures{Scale=MatchUppercase}
\setmainlanguage{english}
\setotherlanguage{sanskrit}
% \setmainfont, \newfontfamily\devanagarifontsf, \setCJKfont, etc.
% Alternatively, you could use babel.
\newfontfamily\symbolfont{DejaVu Sans Mono}
\newunicodechar{^^^^25bc}{{\symbolfont\symbol{"25BC}}} % ▼
\begin{document}
▼{^^^^25bc}
\end{document}
它使用fontspec
(由 加载polyglossia
) 设置包含字形的符号字体,并将newunicodechar
该符号切换到该字体。(如果您还想在数学模式下使用它,则需要使用 的更复杂的命令\ifmmode
,但您似乎不需要。)
一个问题是,您似乎从几个彼此不兼容的示例中粘贴了代码。例如,您只会将inputenc
和应用于传统的 7 位和 8 位字体,\DeclareUnicodeCharacter
而textcomp
不会应用于现代 Unicode 字体。我建议您从序言中删除任何您不确定是否需要的包。
另一个是\char
或\symbol
选择当前字体中给定位置的字形。这是您在序言中定义命令时想要的,但在文档中使用它时则不是。您将字符设置为活动状态,因此它会被命令替换,并且需要一些代码,TeX 引擎会将其视为您自己输入了该字符。那就是^^^^xxxx
。
您还将组合不同的国际化软件包,这可能对您有用,也可能没用。您可以尝试babel
使用\babelfont
一致的界面支持所有这四种语言。
多语言模板
评论中的后续问题可能有两种答案,具体取决于您想要什么。
如果你正在制作一个符号字典,并且只需要独立的字形,那么你可能需要ucharclasses
包。它允许您为晦涩难懂的汉字指定一种字体,例如 Babelstone Han,为您的星座符号指定另一种字体,等等。然后您输入一个字形,XeTeX 会自动显示正确字体中的每个字形。
如果您确实需要用四种语言排版整个单词和段落,以下序言可让您在 中进行此操作babel
。它需要 XeLaTeX。(实验性的 HarfTeX 也可能有效。)我还设置了名为 的命令和环境polyglossia
。
\documentclass{article} % Or whatever is appropriate.
% The next line is only to make the output narrower, to fit into an image
% on TeX.SX: Remove geometry from your document and just give the paper
% size as an option to the document class.
\usepackage[paperwidth=10cm]{geometry}
\usepackage{babel} % You would need the bidi option if using RTL.
\usepackage{newunicodechar} % For \newunicodechar
\usepackage{fontspec} % For \defaultfontfeature
% This allows you to typeset passages in these langauges. If you only need
% to display individual, stand-alone glyphs, `ucharclasses` is simpler and
% allows you to just type the leeters in as UTF-8.
\babelprovide[import, main, language=Default]{english}
\babelprovide[import]{sanskrit-devanagari}
\babelprovide[import]{chinese-traditional}
\babelprovide[import]{tibetan}
\defaultfontfeatures{Scale=MatchUppercase}
% Set these to your fonts of choice:
\babelfont{rm}
[Scale=1.0, Ligatures=Common]{Linux Libertine O}
\babelfont{sf}
[Ligatures=Common]{Linux Biolinum O}
\babelfont[chinese-traditional]{rm}
[Ligatures={Common, Discretionary}]{Noto Serif CJK TC}
\babelfont[chinese-traditional]{sf}
{Noto Sans CJK TC}
\babelfont[sanskrit-devanagari]{rm}
[Language=Default]{Noto Serif Devanagari}
\babelfont[sanskrit-devanagari]{sf}
[Language=Default]{Noto Sans Devanagari}
\babelfont[tibetan]{rm}
[Language=Default]{Noto Sans Tibetan}
\babelfont[tibetan]{sf}
[Language=Default]{Noto Sans Tibetan}
\newfontfamily\symbolfont{Linux Libertine}
% You might or might not need to set up these symbols specifically. They
% might just work.
\newunicodechar{^^^^2100}{{\symbolfont\symbol{"2100}}} % ℀
\newunicodechar{^^^^2103}{{\symbolfont\symbol{"2103}}} % ℃
\newunicodechar{^^^^25bc}{{\symbolfont\symbol{"25BC}}} % ▼
\newcommand\textenglish[1]{\foreignlanguage{english}{#1}}
\newcommand\textchinese[1]{\foreignlanguage{chinese-traditional}{#1}}
\newcommand\textsanskrit[1]{\foreignlanguage{sanskrit-devanagari}{#1}}
\newcommand\texttibetan[1]{\foreignlanguage{tibetan}{#1}}
% Enables \begin{chinese}, etc., for full paragraphs in another language.
\newenvironment{english}%
{\begin{otherlanguage}{english}}%
{\end{otherlanguage}}
\newenvironment{chinese}%
{\begin{otherlanguage}{chinese-traditional}}%
{\end{otherlanguage}}
\newenvironment{sanskrit}%
{\begin{otherlanguage}{sanskrit-devanagari}}%
{\end{otherlanguage}}
\newenvironment{tibetan}%
{\begin{otherlanguage}{tibetan}}%
{\end{otherlanguage}}
\begin{document}
This document is in English, \textsanskrit{संस्कृतम्},
\textchinese{繁體字} and \texttibetan{བོད་སྐད་}, brought to you by the symbols
{^^^^2100}, {^^^^2103} and {^^^^25bc}.
\end{document}
所用样品Google 的 Noto 字体,您可能需要下载。
您可能不想以这种方式定义诸如摄氏度之类的符号:您可能希望它与当前选定的字体相匹配。但是,如果您确实需要修补主字体没有的几个字形,示例将向您展示如何操作。
由于字体的怪癖,我设置了一些选项。例如,所有选项Language=Default
都用于隐藏字体不支持特定语言的警告消息。Noto 的藏文字体不支持藏文标签,而是使用这样的DFLT
选项,这是无害的,您可以忽略它们。如果您觉得麻烦Numbers=OldStyle
,可以使用这样的otfinfo
命令来检查字体支持哪些功能。
最小化 MWE
你问自己不需要哪些包。你肯定不需要inputenc
或textcomp
。这些包适用于传统的 8 位字体。如果不使用,你只需要polyglossia
或,但如果你只需要一种表意文字,你可能会觉得很方便。除了加载之外,你不需要加载,这会自动加载,而加载两次会有选项冲突的风险。(如果你真的想要,请在之前加载,而不是之后。)你可能不想要或。xeCJK
babel
xeCJK
fontspec
polyglossia
fontspec
ucs
xunicode
bbding
和包wasysym
都加载符号字体,因此如果您使用的符号是 Unicode,则不需要它们。例如,注释表明正在wasysym
为占星术太阳符号加载,即 ☉ (U+2609)。您仍然可以将字符设为\astrosun
中符号的别名wasysym
,但如果可以,我建议您坚持使用 Unicode。您将获得正确的缩放比例并能够从 PDF 文件中复制。
其他软件包看起来更重要,但您可以尝试删除其中一个,看看是否有问题。如果没有问题,则可能实际上没有使用。
答案2
首先,使用 XeLaTeX 时应避免使用xunicode
、ucs
和。inputenc
\DeclareUnicodeCharacter
将 U+2100 ACCOUNT OF 或 U+25BC BLACK DOWN-POINTING TRIANGLE 映射到 是相当奇怪的\textcelsius
。
Noto Serif CJK 字体包含 U+2100 和 U+25BC 的字形,但这些字符不会触发切换到 CJK 字体,因此应明确选择这种字体。
正如其他人提到的,newunicodechar
可以完成这项工作:
\documentclass{article}
\usepackage{polyglossia, fontspec}
\usepackage{xeCJK}
\usepackage[Bpara,Cpara]{ednotes}
\usepackage{setspace}
%%%%%Sigla and Symbols
\usepackage{enumitem}
\usepackage{ltablex}
%%%%%critical_apparatus
\usepackage{bbding}
\usepackage{ulem}
\usepackage{xstring}
\usepackage{ifthen}
\usepackage{wasysym} %This line is related to \astrosun ⊙
\usepackage{newunicodechar}
\setmainlanguage{english}
\setotherlanguages{sanskrit}
\setCJKmainfont{NotoSerifCJK}[Path=./,Extension=.ttc]
\newfontfamily{\various}{NotoSerifCJK}[Path=./,Extension=.ttc]
\newunicodechar{℀}{{\various ℀}}
\newunicodechar{▼}{{\various ▼}}
\begin{document}
℀
℃
▼
\end{document}
顺便说一句,如果不设置主字体,就无法设置 CJK 无衬线字体;此外,Noto Serif CJK 不是无衬线字体。
当然,您可以使用不同的字体来填充您使用的主字体中缺少的符号。
答案3
由于您已加载wasysym
,因此您可以\DOWNarrow
从该包中使用。它比 Unicode 字符稍大。
MWE,感谢戴维斯洛:
\documentclass{standalone}
\usepackage{polyglossia} % Includes fontspec
\usepackage{newunicodechar}
\usepackage{wasysym}
\defaultfontfeatures{Scale=MatchUppercase}
\setmainlanguage{english}
\setotherlanguage{sanskrit}
% \setmainfont, \newfontfamily\devanagarifontsf, \setCJKfont, etc.
% Alternatively, you could use babel.
\newfontfamily\symbolfont{DejaVu Sans Mono}
\newunicodechar{^^^^25bc}{{\symbolfont\symbol{"25BC}}} % ▼
\begin{document}
▼{^^^^25bc}\DOWNarrow
\end{document}
结果: