序幕

序幕

序幕

我想编写一个文档,只需注释掉一些命令并删除其他命令的注释符号,即可以黑体和拉丁字体输出。由于德语黑体排版规则要求对某些内容(外语表达、公式等)使用拉丁字体,因此我在(由 加载)\antiquafont的帮助下定义了一个,并如 MWE 中所示。fontspecmathspec\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. 为什么会这样?
  2. 有什么解决方案/解决方法?

答案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]

相关内容