
Написание грубой грамматики в XeLaTeX и использование fontspec для изменения шрифта по умолчанию на Bitstream Charter вместо CM. Все работает нормально для первой страницы или около того вывода, но на второй странице шрифт резко меняется обратно на Computer Modern. Я не могу найти причину этого. Моя преамбула настроена так:
\usepackage[left=0.5in,right=0.5in,top=1in,bottom=1in]{geometry}
\renewcommand{\rmdefault}{bch}
\usepackage{fontspec}
\newfontfamily\la{Brill Roman}
\usepackage{xunicode}
\usepackage{xltxtra}
\usepackage{array}
\usepackage{multirow}
\renewcommand{\p}{\textipa}
Вывод на второй странице выглядит так:
А фактический код LaTeX для этой области работает следующим образом.
\item \la{V} $\to$ any of the vowels or diphthongs.
\item \la{C2} $\to$ optional; restricted to nasals, fricatives, and \la{/l/}.
\end{enumerate}
\item \la{N} -- syllabic nasal. May be any of the nasals.
\end{enumerate}
\large{\textbf{Stress}}
Stress is always on the penultimate syllable.
решение1
В современном дистрибутиве TeX имеется шрифт XCharter OpenType, поэтому вы можете использовать его вместо \renewcommand{\rmdefault}{bch}
него, что не даст вам ничего, кроме символов ASCII.
Более того \la
, как вы определили, это просто переключатель, который сообщает XeLaTeX, что с этого момента нужно использовать Brill.
Правильным документом будет
\documentclass{article}
\usepackage[left=0.5in,right=0.5in,top=1in,bottom=1in]{geometry}
\usepackage{fontspec}
\setmainfont{XCharter}
\newfontfamily\lafont{Brill Roman}[Color=FF0000]
\DeclareTextFontCommand{\la}{\lafont}
\usepackage{array}
\usepackage{multirow}
\newcommand{\p}{\textipa}
\begin{document}
\begin{enumerate}
\item \la{V} $\to$ any of the vowels or diphthongs.
\item \la{C2} $\to$ optional; restricted to nasals, fricatives, and \la{/l/}.
\item \la{N} -- syllabic nasal. May be any of the nasals.
\end{enumerate}
{\large\textbf{Stress}\par}
Stress is always on the penultimate syllable.
\end{document}
Обратите внимание, что \la
сейчасделаетпринимает аргумент, но \large
не делает. Текст в шрифте Charter, в то время как текст в аргументе \la
будет в Brill (я покрасил их в красный цвет просто для большей выразительности в примере, уберите эту Color=FF0000
опцию).
Если среди ваших системных шрифтов нет XCharter
, вы можете использовать более сложную настройку:
\setmainfont{XCharter}[%
Extension=.otf,
UprightFont=*-Roman,
ItalicFont=*-Italic,
BoldFont=*-Bold,
BoldItalicFont=*-BoldItalic,
]
Обратите внимание, что xunicode
и xltxtra
обычно не следует загружать.
В зависимости от доступной вам версии fontspec
вам может потребоваться изменить порядок обязательных и необязательных аргументов на \setmainfont
и \newfontfamily
:
\newfontfamily\lafont[Color=FF0000]{Brill Roman}
\setmainfont[%
Extension=.otf,
UprightFont=*-Roman,
ItalicFont=*-Italic,
BoldFont=*-Bold,
BoldItalicFont=*-BoldItalic,
]{XCharter}
В этом случае лучше обновить дистрибутив TeX.
решение2
в
\la{N}
{}
ничего не делают, не \la
принимают аргумент, переключают шрифт для оставшейся части текущей группы. В данном случае это \end{enumerate}
Так что в этот момент шрифт (и любые другие локальные объявления) возвращаются к значениям, которые у них были в \begin{enumerate}
.
Неясно, намеревались ли вы \la
просто изменить шрифт N
или вы хотели изменить шрифт для документа while, в этом случае вы могли бы использовать
\setmainfont{Brill Roman}