我需要使用以下语法引用在线资源:
@InCollection{crisp,
title = {The CRISP-DM reference model},
booktitle = {Crisp-Dm 1.0},
address = {США},
date = {1999},
url = {https://web.archive.org/web/20220401041957/https://www.the-modeling-agency.com/crisp-dm.pdf},
urldate = {2022-10-02},
language = {russian},
}
重点是接收自动实现的 url 和 urldate 部分的正确结果(“Режим обращения”=Access mode 和“Дата обращения”="accessed")。它在 tex studio 上可以工作,但在 overleaf 上我得到了一系列符号。我有 uft8、babel、T2A,但是它们不起作用。你能帮助我吗?谢谢!
答案1
TeXstudio 和 Overleaf 只是用于
- 输入/编辑/保存 .tex 输入文件。
- 调用属于 TeX 发行版的程序来处理/编译 .tex 输入文件。
如果您可以访问安装了 TeX 发行版的系统上的命令行/shell 提示符/控制台提示符来运行程序,那么也可以从命令行/shell 提示符/控制台提示符调用 TeX 发行版的程序。
使用 Overleaf 时,TeX 发行版不会安装在您的本地计算机上,而是安装在 Overleaf/Digital Science & Research Solutions Ltd 的服务器上。使用 Overleaf 时,您无法通过命令行/shell 提示符/控制台提示符直接访问属于 TeX 发行版的程序。当 Overleaf 的“在线 LaTeX 和 Rich Text 协作写作和发布工具”在您的互联网浏览器中运行时,该工具会为您访问/调用这些程序,例如,当您在处理 .tex 输入文件时单击“重新编译”按钮时。
为了了解发生了什么,需要了解 TeX 发行版(发布/版本等)以及可能正在使用的操作系统。实际 TeX 运行的 .log 文件在这里可能会有用。
(当单击“日志和输出文件”符号上的“重新编译”按钮并选择“原始日志”时,Overleaf 会提供此信息。)
由于您尚未提供任何有助于诊断的信息,而且我也没有水晶球 ;-),所以我只能盲目猜测。
为了解释这种盲目猜测,我首先需要讲一些有关 LaTeX 的事实:
LaTeX 可以看作是加载到 TeX 编译器的大量宏集合。如今的 TeX 编译器可以,例如,
- Donald Ervin Knuth 的传统 TeX 引擎
- Hàn Thế Thành 的 pdfTeX 引擎
- XeTeX(由 Jonathan Kew 和 Arthur Rosendahl 编写)
- LuaTeX 由 LuaTeX 团队(Hans Hagen、Hartmut Henkel、Taco Hoekwater、Luigi Scarso)开发。
过去,将大量宏读取/加载到 TeX 编译器中并进行所有宏分配等操作需要花费大量时间。因此,养成了在加载宏集合后立即创建/转储 TeX 程序所处状态的内存映像的习惯,此后直接加载此内存映像。这样,程序/编译器和宏集合就可以一次性使用,这比先加载 TeX 程序/编译器,然后运行它,然后加载大量宏集合要快得多。
如果使用的“LaTeX 编译器”基于 XeTeX(XeLaTeX)或 LuaTeX(LuaLaTeX),那么底层 TeX 引擎先验/从一开始就“假定”输入文件的字符以多字节编码“utf8”进行编码。
如果使用的“LaTeX 编译器”基于 Donald E. Knuth 的传统 TeX 引擎(LaTeX)或 Hàn Thế Thành 的 pdfTeX 引擎(pdfLaTeX),那么底层的 TeX 引擎“假定”.tex 输入文件的字符以某种 8 位/单字节输入编码进行编码(其中,使用 TeX 分布 MiKTeX 和 TeX Live 7 位 ASCII,即根据美国信息交换标准代码表示字符代码点的字节 0(十进制)到 127(十进制),是子集)。
如果使用这种 8 位引擎/“单字节字符引擎”,.tex 输入文件不是以 ASCII/iso8859-1(latin1)/cp1252/whatever 单字节编码进行编码,而是以多字节编码 utf-8 进行编码,则需要使用选项“utf8”加载 inputenc 包,以便(可能)解决问题。
如果在尝试处理 utf-8 编码的 .tex 输入文件时未加载该选项,则不会假定字节组合形成单个字符,而是将每个单个字节单独用作单个字符,这会导致 TeX 显示意外的字素/符号序列。如今,基于这些传统的 8 位/单字节字符 TeX 引擎的编译器默认支持以 unicode 编码的 .tex 输入文件,当 LaTeX 在处理前言后检测到包 inputenc 尚未使用其他选项加载时,会自动加载带有选项“utf8”的包 inputenc。
但 TeX Live 和 MiKTeX 的旧版本/发行版并非如此。因此,如果在较旧的 TeX 平台/TeX 发行版上使用基于传统 8 位/单字节字符 TeX 引擎的 LaTeX 来处理以 utf-8 编码且包含超出 ASCII 范围的字符(ASCII 是 utf-8 的严格子集)的 .tex 输入文件,则需要在前言中明确加载包 inputenc。
因此,我猜测,当通过 Overleaf 网站工作时,使用的是较旧的 TeX Live 发行版,而该发行版默认情况下未启用 unicode 支持。
据我所知,Overleaf 底层使用一些最小 Linux 安装的 docker 镜像加载一个容器,其中安装了一些 TeX Live 发行版。
单击显示 Overleaf 网站的浏览器窗口左上角的“菜单”按钮后,将打开一个侧边栏,在侧边栏下方您可以选择许多其他项目,例如“编译器”和“TeX Live 版本”。
可能是基于传统 8 位 TeX 的 pdflatex 或 latex,并且选择了一些旧版本作为“TeX Live 版本”,其中使用 pdflatex/latex unicode 支持通过自动加载带有选项 utf8 的 inputenc 包尚未提供,因此您需要在文档的序言中添加一些内容,例如\usepackage[utf8]{inputenc}
。
作为编译器,您可以选择 XeLaTeX 或 LuaLaTeX(它们是原生 utf8 引擎)和/或选择最新的 TeX Live 版本 2022,其中使用基于传统 8 位 TeX 的 pdflatex 或 latex,可以自动加载带有选项 utf8 的包 inputenc。
也许在使用 TeX Studio 输入 .tex 输入文件的机器上,使用了最新的 TeX 发行版(例如 TeX Live 版本 2020 或 2021 或 2022)或 MiKTeX 22.<任何月份>.<任何日期>,因此任何 latex 编译器都默认提供 utf8 支持。(对于 LuaLaTeX 和 XeLaTeX,底层 TeX 引擎从一开始就“原生”地“假定”.tex 输入文件以 utf-8 编码。对于传统的 LaTeX/pdfLaTeX,如果在前言中未加载 inputenc,则在处理前言后会自动使用选项“utf8”加载 inputenc 包。)