我正在尝试排版一本使用罗马尼亚语变音符号的书。由于我必须使用特定字体,所以我必须使用类似这样的字体来“构造”字符:
\newcommand\chara {a}
\newcommand\charA {A}
\makeatletter
\def\kernbrevea#1{\kern#1\dimexpr0.47em-\strip@pt\fontdimen1\font\dimexpr-0.2em\relax\relax}
\def\kernbreveA#1{\kern#1\dimexpr0.56em-\strip@pt\fontdimen1\font\dimexpr-0.34em\relax\relax}
\makeatother
\catcode`\ă=\active
\def ă{\raisebox{.0em}\u\kernbrevea{-}{\chara}\kernbrevea{+}\kernbrevea{-}}
\catcode`\Ă=\active
\def Ă{\raisebox{.24em}\u\kernbreveA{-}{\charA}\kernbreveA{+}\kernbreveA{-}}
结果令人满意。我设法构建了对使用我需要的 truetype 文件的支持(按照我在网上找到的各种教程),它似乎工作正常,除了当这个字母在段落的行末结束的情况。就像这样:
我怀疑上面的 \def 命令后面的代码有问题,但我不得不承认我对 LaTeX 完全是新手,我放弃了尝试理解所列命令的语法……我几乎没有改变地从另一个示例中获取它们,而且可能非常愚蠢,我不知道。有人能帮我解决这个问题吗?
我知道我应该切换到另一种没有问题的字体,但不幸的是,我必须使用 ElegantGaramond 的这个特定变体。
谢谢你!
后期编辑
好的,两个主要问题已经解决:使用罗马尼亚语变音符号和损坏的(可能)字体。LaTeX 尽了最大努力,让我能够展示这些。
但现在我有一个恼人的问题。这是我隔离的代码,其中包含了我感兴趣的所有内容:
\documentclass[10pt,a4paper,openany]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[romanian]{babel}
\usepackage{pxfonts}
\usepackage{eg}
\pdfmapfile{+eg.map}
\begin{document}
\newcommand\chara{a}
\newcommand\charA{A}
\newcommand\chars{s}
\newcommand\charS{S}
\newcommand\chart{t}
\newcommand\charT{T}
\makeatletter
\def\kernbrevea#1{\kern#1\dimexpr0.47em-\strip@pt\fontdimen1\font\dimexpr-0.2em\relax\relax}
\def\kernbreveA#1{\kern#1\dimexpr0.56em-\strip@pt\fontdimen1\font\dimexpr-0.34em\relax\relax}
\makeatother
\catcode`ă =\active
\def ă{\raisebox{.0em}\u\kernbrevea{-}{\chara}}
\catcode`Ă=\active
\def Ă{\raisebox{.24em}\u\kernbreveA{-}{\charA}\kernbreveA{+}\kernbreveA{-}}
\catcode`ş=\active
\def ş{\c{\chars}}
\catcode`Ş=\active
\def Ş{\c{\charS}}
\catcode`ţ=\active
\def ţ{\c{\chart}}
\catcode`Ţ=\active
\def Ţ{\c{\charT}}
Some test text using romanian diacritics:
şŞţŢăĂîÎâÂ
Kerning: hăh măh xăx VĂV WĂW
\end{document}
渲染效果如下图所示:
因此文本看起来不错,但出现了一些不需要的内容。显然,两次出现的“=,”不是故意的……好吧,我可以理解是“\catcode`\ă=\active”行中的某些内容产生了这种情况,因为在日志中我有以下内容:
! Missing number, treated as zero.
<to be read again>
\protect
l.26 \catcode`ă
=\active
A number should have been here; I inserted `0'.
(If you can't figure out why I needed to see a number,
look up `weird error' in the index to The TeXbook.)
! Package inputenc Error: Keyboard character used is undefined
(inputenc) in inputencoding `utf8'.
See the inputenc package documentation for explanation.
Type H <return> for immediate help.
...
l.26 \catcode`ă
=\active
You need to provide a definition with \DeclareInputText
or \DeclareInputMath before using this key.
! Missing number, treated as zero.
<to be read again>
\protect
并且 ș 定义会产生两个类似的错误。我不明白的是为什么其他定义(形式或语法显然相同)没有产生错误?
我制作了一个 zip 文件all.zip 可在 wetransfer 上获取 10 天它可能包含重现文档的所有文件,以防有人想要复制问题。很可能我对 LaTeX 一窍不通,无法理解问题出在哪里。我所能做的就是困惑地看着代码……
感谢您的帮助。
答案1
问题是如果紧排字符后面紧跟着粘连符(比如一个空格),它就会变成可行的换行点,并且会和后面的粘连符一起在换行处消失。
但是,就你的情况而言,二字距,因此只有第二个可以被视为换行符,而第一个保持不变(这是一个正字距)。
我不明白两个尾随的字距相互抵消的原因(除非后面跟着粘连符)。
只需将其移除即可。
对你的宏有一个不同的建议,假设\u{a}
并且\u{A}
不会产生正确的输出:
\documentclass{article}
\usepackage[latin2]{inputenc}
\newcommand{\abreve}{\addbreve{a}}
\newommand{\Abreve}{\addbreve{A}}
\newcommand{\addbreve}[1]{%
\leavevmode\vbox{\offinterlineskip
\ialign{\hfil##\hfil\cr\u{}\cr\noalign{\vskip-1ex}#1\cr}%
}%
}
\catcode`ă=\active \protected\def ă{\abreve}
\catcode`Ă=\active \protected\def Ă{\Abreve}
\lccode`Ă=`ă
\uccode`ă=`Ă
\begin{document}
destinată să
\MakeUppercase{destinată să}
\end{document}
您可以更自由地调整重音的间距和定位,也许可以对 ă 和 ă 的情况进行不同的分支。
如果使用utf8
as 编码,方法应该有点不同:
\documentclass[10pt,a4paper,openany]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[romanian]{babel}
\usepackage{pxfonts}
\usepackage{newunicodechar}
\usepackage{etoolbox}
\usepackage{eg}
\pdfmapfile{+eg.map}
\makeatletter
\def\kernbrevea#1{\kern#1\dimexpr0.47em-\strip@pt\fontdimen1\font\dimexpr-0.2em\relax\relax}
\def\kernbreveA#1{\kern#1\dimexpr0.56em-\strip@pt\fontdimen1\font\dimexpr-0.34em\relax\relax}
\makeatother
\newunicodechar{ă}{\raisebox{.0em}\u\kernbrevea{-}{a}}
\newunicodechar{Ă}{\raisebox{.24em}\u\kernbreveA{-}{A}}
\begin{document}
Some test text using romanian diacritics:
şŞţŢăĂîÎâÂ
Kerning: hăh măh xăx VĂV WĂW
\MakeUppercase{ă}
\end{document}
不需要为其他字符给出定义。