將 Latex [option] 套件對格式化為 \usepackage[option]{package}

將 Latex [option] 套件對格式化為 \usepackage[option]{package}

我目前有一組經常使用的預設 LaTeX 包,格式如下:

package1
[options]package2
[options]package3
package4
...

我希望能夠將其轉換為 \usepackage[options]{package} 或 \usepackage{package} 的標準 LaTeX 表示法,這取決於套件是否有其他選項。我已經成功創建了 sed/regex 命令來轉換帶有選項的行,但它錯過了沒有選項的套件。

echo "[option]package" | sed 's/.*\(\[[^]]*\]\)\(.*\)/\\usepackage\1{\2}/'
>> \usepackage[option]{package}

當它在只有一個包的線上運行時,它會失敗(正如我所期望的)。

echo "package" | sed 's/.*\(\[[^]]*\]\)\(.*\)/\\usepackage\1{\2}/'
>> package

這是正規表示式問題嗎?

答案1

請驗證這是否適合您:

$ echo -e "[options]package3\npackage4" | sed 's/^\(\[[^]]*\]\)\?\(.*\)/\\usepackage\1{\2}/'
\usepackage[options]{package3}
\usepackage{package4}

我替換.*^以匹配行的開頭,並添加\?以使括號可選。

答案2

這種兩步驟方法似乎更簡單:

$ printf '%s\n' 'package1' '[options]package2' | sed -e 's/[^]]*$/{&}/' -e 's/^/\\usepackage/'
\usepackage{package1}
\usepackage[options]{package2}
  • 第一步,s/[^]]*$/{&}/透過匹配 以外的最長可能字串],將項目名稱放入大括號中,直到行尾。
  • 第二步s/^/\\usepackage/,簡單地加入\usepackage到行的開頭。

相關內容