我正在使用 XeLaTeX 和 BibLateX 撰写人文学科的论文。我经常使用中文(拼音)、韩语(McCune-Reischauer)、日语(Hepburn)、满语(Norman)等的转录。此外,偶尔也会引用和引用使用变音符号的欧洲语言,例如法语。
到目前为止,我所有的中文音标都是用带音调符号的拼音书写的(´ 重音符号和 ` 重音符号、ˇ háček 和 ¯ 长音符)。然而,许多期刊不鼓励在音标中使用音调符号。因此,我正在寻找一种方法来去除文本中的中文变音符号。在我看来,我面临两个问题:
我想删除参考书目的拼音变音符号,而不必再次在 .bib 文件中重新输入它们,并且
我只想删除中文转录中的变音符号,而不是日语中的长音符号(例如Tōkyō)或法语中印刷相同的重音符号(例如problème)。
有没有办法做到这一点?
更新:
这是我使用 PLK 提供的代码进行的尝试。不幸的是,它对我来说不起作用:
\documentclass[utf8,12pt,letterpaper]{article}
\usepackage{setspace}
\usepackage[fallback]{xeCJK}
\usepackage{fontspec}
\defaultfontfeatures{Ligatures=TeX}
\setmainfont{Linux Libertine O}
\newcommand{\mainfontCJK}[0]{HanaMinA}
\setCJKmainfont[Scale=0.9]{\mainfontCJK}
\setCJKfallbackfamilyfont{\CJKrmdefault}[Scale=0.9]{NanumMyeongjo}
\XeTeXlinebreaklocale "zh"
\XeTeXlinebreakskip = 0pt plus 1pt
\usepackage[notes,strict,isbn=false,backend=biber,bibencoding=utf8,hyperref=true]{biblatex-chicago}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=author, match=\regexp{[\x{300}\x{301}\x{304}\x{30c}]}, replace={}]
}
}
}
\DeclareNosort{
\nosort{type_names}{\regexp{[\x{300}\x{301}\x{304}\x{30c}]}}
}
\DeclareNoinit{
\noinit{\regexp{[\x{300}\x{301}\x{304}\x{30c}]}}
}
\addbibresource{MY BIBLIOGRAPHY HERE}
\begin{document}
\cite{WeiYuan18422004ShengwuJi}
\printbibliography
\end{document}
引用像往常一样出现,带有变音符号(请忽略名称的奇怪格式,我通常使用其他东西来修复它,但我没有在这个最小的例子中包含它):
更新
上面示例中使用的参考书目条目:
@book{WeiYuan18422004ShengwuJi,
author = {Wèi, 魏源, Yuán},
title = {Shèngwǔjì},
titleaddon = {圣武记},
usere = {Record of the sacred wars},
publisher = {Yuèlù shūshè},
date = {2004},
origdate = {1842},
address = {Chángshā},
edition = {\autocap{c}ritical edition},
maintitle = {Wèi Yuán quánjí},
volume = {3}
}
答案1
如果您将 biber 与 biblatex 结合使用(如果您需要像这样的 UTF-8 支持,那么您可能应该这样做),那么使用 biber 映射功能可以实现这一点。例如,要从作者中删除尖音符、格雷夫斯、马克龙和哈切克,请在您的序言中输入以下内容:
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=author, match=\regexp{[\x{300}\x{301}\x{304}\x{30c}]}, replace={}]
}
}
}
请注意,这会在读取 .bib 时动态剥离它们,因此您的 bib 不会被修改。
此外,您可能希望删除这些内容以进行排序和/或生成首字母,在这种情况下您还可以将其添加到序言中:
\DeclareNosort{
\nosort{type_names}{\regexp{[\x{300}\x{301}\x{304}\x{30c}]}}
}
\DeclareNoinit{
\noinit{\regexp{[\x{300}\x{301}\x{304}\x{30c}]}}
}
仅删除中文的问题应该由 .bib 处理,它应该有某种方式将中文条目与其他条目区分开来 - 也许是HYPHENATION
或LANGUAGE
字段。然后上面的第一个代码片段变成了这样:
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=language, match=chinese, final]
\step[fieldsource=author, match=\regexp{[\x{300}\x{301}\x{304}\x{30c}]}, replace={}]
}
}
}
当然,这一切都假设您使用 UTF-8 编码 .bib(您可以使用 biber 来实现)。如果您使用 TeX 宏,那么正则表达式会更复杂一些...
另一种方法是使用 Unicode 类来删除所有 Unicode MARK 字素而不是单个字素:
\step[fieldsource=author, match=\regexp{\p{Mark}}, replace={}]