Latex [옵션]패키지 쌍을 \usepackage[옵션]{패키지}로 형식 지정

Latex [옵션]패키지 쌍을 \usepackage[옵션]{패키지}로 형식 지정

현재 자주 사용하는 기본 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

이 2단계 접근 방식은 더 간단해 보입니다.

$ printf '%s\n' 'package1' '[options]package2' | sed -e 's/[^]]*$/{&}/' -e 's/^/\\usepackage/'
\usepackage{package1}
\usepackage[options]{package2}
  • 첫 번째 단계인 에서는 줄 끝까지 s/[^]]*$/{&}/가능한 가장 긴 문자열을 일치시켜 프로젝트 이름을 중괄호 안에 넣습니다 .]
  • 두 번째 단계인 s/^/\\usepackage/는 단순히 \usepackage줄의 시작 부분에 추가됩니다.

관련 정보