![序幕](https://linux22.com/image/307591/%E5%BA%8F%E5%B9%95.png)
序幕
我想编写一个文档,只需注释掉一些命令并删除其他命令的注释符号,即可以黑体和拉丁字体输出。由于德语黑体排版规则要求对某些内容(外语表达、公式等)使用拉丁字体,因此我在(由 加载)\antiquafont
的帮助下定义了一个,并如 MWE 中所示。fontspec
mathspec
\antiqua{}
我所做的一切都是用 XeLaTeX 做的。
问题
该mhchem
包将周围的字体用作其\ce{}
命令。文档仅提到了输入的可能性sf
以及一些其他类似的、对我而言几乎没什么用的选项。由于化学式即使在黑体字文档中也应该用拉丁文排版,并且为了便于书写和编辑,我想定义一个新命令(或重新定义命令\ce{]
),以便所有内容\ce
通常都包含在\antiqua{}
周围环境中。
无效的解决方案和 MWE
到目前为止,我的尝试都失败了。我没有生成拉丁字体的输出,而是得到了黑体字的输出,由一个前导 0 和输入的公式组成。唯一始终有效的方法是将 括\ce{}
在\antiqua{}
or{\antiquafont }
环境中,但这正是我想要避免的解决方案。
\documentclass[12pt,a4paper,twoside]{scrreprt}
\usepackage[version=3]{mhchem}
\usepackage{mathspec}
\usepackage{xunicode}
\usepackage{xltxtra}
\setmathsfont(Digits,Latin,Greek){LiberationSerif}
\setmathrm{LiberationSerif}
\setmathsf{LiberationSans}
\newfontfamily\antiquafont[Mapping=tex-text]{LiberationSerif}
\newcommand\antiqua[1]{{\antiquafont #1}}
\setmainfont[Mapping=tex-text,Mapping=slong-German]{UnifrakturMaguntia}
\setsansfont[Mapping=tex-text,Mapping=slong-German]{UnifrakturCook}
% Test commands incoming:
\newcommand{\Ace[1]}{{\antiquafont \ce{#1}}}
\newcommand{\Bce[1]}{{\antiquafont\relax \ce{#1}}}
\newcommand{\Cce[1]}{\antiqua{\ce{#1}}}
\begin{document}
\chapter{test chapter}
This is all about the nasty \ce{H2O} which just won't turn into \Ace{H2O}
although {\antiquafont \ce{H2O}} works as fine as \antiqua{\ce{H2O}} does.
The isotope-enriched \Bce{D2O} and \Cce{T2O} don't work as I want them to,
either
\end{document}
按照出现的顺序,第一个给出格式正确的黑体 H 2 O,第二个、第五个和第六个给出格式正确的此处所示的 0H2O,中间的两个给出格式正确的拉丁字体H 2 O。
问题
- 为什么会这样?
- 有什么解决方案/解决方法?
答案1
正如其他人提到的,如果你写的话,你的方法就会起作用
\newcommand{\Ace}[1]{{\antiquafont \ce{#1}}}
但是,你可以跳过所有重新定义并编写
\usepackage[version=3,textfontname=antiquafont]{mhchem}
在你的序言中:
\documentclass{minimal}
\usepackage[version=3,textfontname=antiquafont]{mhchem}
\usepackage{mathspec}
\newfontfamily\antiquafont[Mapping=tex-text]{LiberationSerif}
\setmainfont[Mapping=tex-text,Mapping=slong-German]{UnifrakturMaguntia}
\begin{document}
This is all about the \ce{H2O}, which should not be in Fraktur.
\end{document}
答案2
问题很简单
\newcommand{\Ace[1]}
应该
\newcommand{\Ace}[1]
(其他 2 个新命令也一样)。请注意,如果您编写,则\newcommand{\Ace[1]}
您正在定义一个命令,该命令需要括号中的参数(而花括号中没有参数)。因此,在这种情况下,您仍然可以通过在主文档中\Ace
编写来实现所需的结果。\Ace[H2O]