我正在尝试打印参考书目中的文件路径。它应该是可读的,而不是可点击的。因此,它不必在 URL 规则方面正确,例如无空格等。但是它不能正确显示变音符号,如 ä。
我的 MWE 看起来像这样:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[backend=biber]{biblatex}
\usepackage{hyperref}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{mean_well_rcp-1600_2018,
langid = {english},
title = {RCP-1600 ä},
file = {C:/Test ha Földer/file},
shorttitle = {RCP-1600},
date = {2018-01-15},
author = {MEAN\textasciitilde{}WELL}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\DeclareFieldFormat{file}{\mkbibacro{file:}\addcolon\space#1}
\renewbibmacro{finentry}{%
\finentry\addspace
\printfield{file}%
}
\begin{document}
\cite{mean_well_rcp-1600_2018}
\printbibliography
\end{document}
日志文件:测试日志
答案1
url
、doi
和 等字段field
是逐字字段。逐字字段可以包含特殊字符,如$
、%
,#
而不会扰乱 LaTeX。字段的内容\detokenize
在打印前会经过净化 (d),因此特殊字符会按其本身打印,而不会具有其通常的特殊含义。
对于inputenc
非 ASCII 字符,如ö
、ä
、 ...,它们被视为活动字符。但是当它们被\detokenize
d 时,它们会失去活动状态并再次变为纯 UTF-8 字符。然后 LaTeX 无法按预期处理这些字符。您可以使用以下代码验证
\detokenize{ö$}
在您的文档中,它显示为
Ãű$
而不是ö
关于缺失的错误$
。
有一些解决方法,但并不特别令人满意
- 使用 Unicode 引擎,例如 LuaLaTeX 或 XeLaTeX。Unicode 引擎将非 ASCII 字符视为单个普通字符,而不是宏(活动字符),因此这些字符在通过逐字字段时不会被破坏。
- 使用非逐字字段(或将类型
field
从逐字更改为文字),这样将允许非 ASCII 字符(如、ä
和ö
)ß
工作,但您不能再使用特殊字符(如$
、、、\
)#
,&
否则 LaTeX 会抱怨。 - 使用旧编码,例如
latin1
。这些旧编码本身仅支持 256 个字符,但支持的非 ASCII 字符将被视为其自身,而不是活动字符(latin1
/ISO 8859-1 支持ä
、ö
、ü
、ß
、é
)。与 LuaLaTeX 和 XeLaTeX 一样,它们在去标记化后仍能继续存在。
答案2
申请\scantokens
:
\begin{filecontents}{\jobname.bib}
@misc{mean_well_rcp-1600_2018,
langid = {english},
title = {RCP-1600 ä},
file = {C:/Test ha Földer/file},
shorttitle = {RCP-1600},
date = {2018-01-15},
author = {MEAN\textasciitilde{}WELL}
}
\end{filecontents}
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[backend=biber]{biblatex}
\usepackage{hyperref}
\addbibresource{\jobname.bib}
\DeclareFieldFormat{file}{\mkbibacro{file:}\addcolon\space\scantokens{#1\relax}}
\renewbibmacro{finentry}{%
\finentry\addspace
\printfield{file}%
}
\begin{document}
\cite{mean_well_rcp-1600_2018}
\printbibliography
\end{document}