如何在编译LaTeX时自动排序kuerzel.tex中的\acro缩略语条目
解决方案
方案1:替换为acro宏包(原生支持自动排序,推荐)
你当前使用的acronym宏包本身没有内置自动排序功能,替换为功能更完善的acro宏包仅需修改少量配置即可实现按短名/长名自动排序,且兼容原有\ac等命令的使用习惯。
修改后的main.tex代码如下:
\documentclass{report} \usepackage[ngerman]{babel} \usepackage[demo]{graphicx} % 替换原来的acronym宏包,配置自动排序 \usepackage[ nohyperlinks, printonlyused, % 排序规则:de对应德语字母序,sort-by=short按方括号内短名排序,改成long即按长名排序 sorting=de, sort-by=short ]{acro} \usepackage{hyperref} \usepackage[ngerman]{cleveref} \usepackage[parfill]{parskip} % 直接引入原有kuerzel.tex即可,不需要修改内容 \input{kuerzel} \begin{document} % 原来的acronym环境替换为printacronyms \printacronyms[name=Abkürzungen, sort=true] Der \ac{eugh} ist das oberste rechtsprechende Organ der \ac{eu}. Die \ac{eu} ist dabei ein Staatenverbund aus 27 europäischen Ländern. Und \ac{gr} hat eine sehr gute Landwirtschaft, welcher stark gefördert werden sollte. \end{document}
编译时使用pdflatex -> biber -> pdflatex*2的编译链即可自动完成排序,最终输出的缩略语列表就是你需要的字母序结果。
方案2:保留acronym宏包,用Python脚本预排序kuerzel.tex
如果不想改动现有文档的宏包配置,可以在编译前用简单的Python脚本先对kuerzel.tex的条目排序:
import re from locale import setlocale, LC_ALL, strcoll # 设置德语排序规则,Windows环境可改为'de_DE' setlocale(LC_ALL, 'de_DE.UTF-8') # 匹配\acro{id}[短名]{长名}的正则表达式 acro_pattern = re.compile(r'\\acro\{.*?\}\[(.*?)\]\{(.*?)\}') def get_sort_key(line, sort_by_short=True): match = acro_pattern.search(line.strip()) if not match: return line # sort_by_short=True按方括号内短名排序,False按第二个大括号内长名排序 return match.group(1) if sort_by_short else match.group(2) with open('kuerzel.tex', 'r', encoding='utf-8') as f: lines = f.readlines() # 执行排序 sorted_lines = sorted(lines, key=lambda x: strcoll(get_sort_key(x, sort_by_short=True))) with open('kuerzel_sorted.tex', 'w', encoding='utf-8') as f: f.writelines(sorted_lines)
运行脚本后会生成排序后的kuerzel_sorted.tex,把原来的\input{kuerzel}改成\input{kuerzel_sorted}即可。你也可以把脚本运行命令加入编译脚本/LaTeX编辑器的预处理步骤,实现每次编译自动排序。
内容的提问来源于stack exchange,提问作者Test
相关产品推荐
相关产品推荐

