방금 LaTeX 표현식을 PNG 파일로 저장하기 위한 간단한 쉘 스크립트를 작성했습니다. 이중 백슬래시 \\인 "다음 줄" LaTeX 구문을 제외하고는 잘 작동합니다.
예를 들어, 입력 표현식이 다음과 같을 때:
\left( \begin{array}{cc}1 & 2\\ 3 & 4\end{array} \right)
이중 백슬래시는 단일 백슬래시로 축소됩니다. 표현식에 백슬래시를 더 추가할 수 있다는 것을 알고 있지만 표현식이 이상한 LaTeX-bash 조합이 아닌 진정한 LaTeX이기를 원합니다.
내 스크립트:
#!/bin/bash
if [ $# -ne 2 ]; then
echo -e "Er moeten twee argumenten worden opgegeven:\n(1) LaTeX code\n(2) Bestandsnaam zonder extensie"
else
SaveDir="/home/pieter"
echo "\documentclass{article}\usepackage[utf8x]{inputenc}\pagestyle{empty}\begin{document}\[ $1 \]\end{document}" > /tmp/$2.tex
latex -output-directory /tmp -interaction=batchmode $2.tex
dvips -o /tmp/$2.ps -E /tmp/$2.dvi
convert -units PixelsPerInch -density 200 /tmp/$2.ps -trim $SaveDir/$2.png
fi
그렇다면 어떻게 이스케이프 문자를 무시하고 LaTeX 표현식을 문자 그대로 인쇄할 수 있습니까? sed를 사용하지 않는 것이 좋습니다.
답변1
모든 문자는 작은따옴표 사이에서 문자 그대로 해석됩니다. 큰따옴표를 사용했는데 일부 문자( $"\`
)가 큰따옴표 사이에 해석되었습니다. 바라보다
환경 변수에서 작은따옴표와 큰따옴표의 의미는 무엇입니까?그러나 귀하의 질문에 나오는 예에서는 문제의 문자를 전혀 사용하지 않습니다. 사용하지 않는 다른 잠재적인 문제 echo
( echo
내장 함수는 일부 쉘에서 백슬래시 확장을 수행하지만 명시적으로 활성화하지 않는 한 bash에서는 수행하지 않음) 및 $1
( echo $1
백슬래시 확장을 수행하지만 echo "$1"
bash에서는 그렇지 않음)).
문자열을 그대로 인쇄하는 안전하고 이식 가능한 방법은 다음과 같습니다.
printf '%s\n' "$1"
\n
문자열 뒤에 개행 문자를 원하지 않으면 제거하십시오.
이게 진짜 코드인가요? 그렇다면 매개변수를 전달하는 방식에 문제가 없는지 확인하세요. 다음과 같이 작성해야 합니다.
myscript '\left( \begin{array}{cc}1 & 2\\ 3 & 4\end{array} \right)' filename
TeX 조각에서 작은따옴표를 사용해야 하는 경우 이를 이스케이프해야 합니다 '\''
.
당신은 관심이 있을 수도 있습니다여기 문서이를 통해 소스 파일에 여러 줄 문자열을 편리하게 포함할 수 있습니다. 또는 여러 줄의 문자열을 작은따옴표로 묶을 수도 있습니다.
printf '%s' '\documentclass{article}
\usepackage[utf8x]{inputenc}
\pagestyle{empty}
\begin{document}
\[ '"$1"' \]
\end{document}
' >"/tmp/$2.tex"
큰따옴표도 사용해야 합니다 $2
. 특별한 이유가 없는 한 변수 대체에는 항상 큰따옴표를 사용하십시오.
답변2
TeX 출력을 스크립트 내에서 수정하려면 가장 안전한 방법은 다음과 같은 것을 사용하는 것입니다.
cat > $2.tex << 'ENDHEADER'
\documentclass{article}
\usepackage[utf8x]{inputenc}
\pagestyle{empty}
\begin{document}
\[
ENDHEADER
echo $1 >> $2.tex
cat >> $2.tex << 'ENDFOOTER'
\]
\end{document}
ENDFOOTER
cat
및 태그 사이의 데이터 END
는 교체 없이 그대로 출력됩니다. (추가된 모든 줄 바꿈이 괜찮다고 가정합니다.)
'
TeX를 인수로 전달할 때는 큰따옴표( )를 사용해야 합니다 .
./your_script '\left( \begin{array}{cc}1 & 2\\ 3 & 4\end{array} \right)'