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

관련 정보