0%

给zotero撰写脚本批量修改参考文献语言

下载各类使用的csl文件

  • 在zotero的设置->引用->获取更多样式位置搜索
    • picture 1
  • 或者在网站搜索
  • 然后导入

    撰写javascript脚本批量修改

  • 大部分样式是根据文献的”语言”属性设置文献的中英文,从而决定使用et al还是等作为省略标记。
  • 因此需要批量对文献的语言属性做出设置,中文的设置为zh-CN,英文的设置为en-US
  • 下面代码的判断方式是作者名称中是否含有汉字,含有认为语言是中文,否则是英文
  • 全选所有文件
    • picture 0
    • 在这个目录下按下Ctrl+A
  • 打开工具→开发者→Run JavaScript
    // 检查作者姓名中是否包含中文字符的函数
    function containsChinese(str) {
    const regex = /[\u4e00-\u9fa5]/; // 中文字符的 Unicode 范围
    return regex.test(str);
    }

    // 替换后的语言
    const newLanguageCN = "zh-CN";
    const newLanguageEN = "en-US";

    // 以下内容无需修改
    zoteroPane = Zotero.getActiveZoteroPane();
    items = zoteroPane.getSelectedItems();
    var cnCount = 0; // 中文条目计数
    var enCount = 0; // 英文条目计数
    var rn = 0; // 替换条目个数

    for (item of items) {
    var la = item.getField("language");

    // 获取文章的作者信息
    var authors = item.getCreators();
    var hasChineseName = false;

    // 检查作者是否包含中文名字
    for (const author of authors) {
    if (containsChinese(author.lastName) || containsChinese(author.firstName)) {
    hasChineseName = true;
    break;
    }
    }

    // 根据是否包含中文名字决定语言设置
    if (hasChineseName) {
    item.setField("language", newLanguageCN); // 中文名字则设置为 zh-CN
    cnCount += 1; // 中文条目计数
    } else {
    item.setField("language", newLanguageEN); // 否则设置为 en-US
    enCount += 1; // 英文条目计数
    }
    rn += 1;
    await item.saveTx();

    }

    // 输出中文和英文条目的数量
    return `已替换的条目总数: ${rn}。其中中文条目: ${cnCount},英文条目: ${enCount}`;