biber 工具重新格式化正则表达式:如何应用大小写运算符?

biber 工具重新格式化正则表达式:如何应用大小写运算符?

我正在尝试使用的工具模式来biber清理 bib 文件,以便使用 biblatex 进行处理。一种转换是将冒号后的字幕拆分到字幕字段中。这很有效。同时,我想确保字幕以大写字母开头。但应用\uperl 样式正则表达式的标准运算符不起作用。

这是一个测试biber-tool.conf

<?xml version="1.0" encoding="UTF-8"?>
<config>
  <sourcemap>
    <maps datatype="bibtex" map_overwrite="1">
      <map map_overwrite="1">
        <map_step map_field_source="title" map_match="([^:]*): (.*)" map_final="1"/>
        <map_step map_field_set="title" map_field_value="$1"/>
        <map_step map_field_set="subtitle" map_field_value="\u$2"/>
      </map>
    </maps>
  </sourcemap>
</config>

这是测试 bib 文件:

@Article{atkin-2022-PeirceSpeculativeGrammarLogic,
  author       = {Atkin, A. K.},
  title        = {Peirce's Speculative Grammar: logic as Semiotics},
  journaltitle = {History and Philosophy of Logic},
  date         = {2022-01-09},
  pages        = {1-2},
  doi          = {10.1080/01445340.2021.2017112}
}

现在,运行biber --tool --configfile=biber-tool.conf test.bib结果将产生以下输出 bib 文件:

@ARTICLE{atkin-2022-PeirceSpeculativeGrammarLogic,
  AUTHOR = {Atkin, A. K.},
  DATE = {2022-01-09},
  DOI = {10.1080/01445340.2021.2017112},
  JOURNALTITLE = {History and Philosophy of Logic},
  PAGES = {1--2},
  SUBTITLE = {\ulogic as Semiotics},
  TITLE = {Peirce's Speculative Grammar},
}

请注意,\u运算符并未应用,但会逐字出现在输出中。

手册中包含了在源映射配置讨论中biber使用类似运算符的内容,但在工具模式部分中没有提到此类运算符。工具模式下的正则表达式实现是否不同?\L

答案1

这是在 github 上回答

这里的问题是,这map_value不是正则表达式,而只是一个插入了过去匹配项的文字字符串。您需要使用map_replace才能在替换文本中使用正则表达式。因此,您要执行此操作的方法是先将整个标题复制到副标题,然后在副标题字段上使用匹配/替换来执行您需要的操作。

以下biber-tool.conf对我有用:

<?xml version="1.0" encoding="UTF-8"?>
<config>
  <sourcemap>
    <maps datatype="bibtex" map_overwrite="1">
      <map map_overwrite="0">
        <map_step map_field_source="title" map_match="([^:]*): (.*)" map_final="1"/>
        <map_step map_field_set="subtitle" map_origfieldval="1"/>
      </map>
      <map map_overwrite="1">
        <map_step map_field_source="title" map_match="([^:]*): (.*)" map_final="1"/>
        <map_step map_field_set="title" map_field_value="$1"/>
        <map_step map_field_source="subtitle" map_match="([^:]*): (.*)" map_replace="\u$2"/>
      </map>
    </maps>
  </sourcemap>
</config>

相关内容