Mad*_*ara 3 bash latex yaml docker github-actions
我有一个存储库,文件夹内有一个 LaTex 文件。文件夹命名为Literature Review,文件命名为Review.tex。我是 docker 和 GitHub Actions 的新手。我尝试了很多不同的组合来设置文件路径:
Literature Review/Review.tex
我已经尝试了 StackOverflow 上建议的很多方法,但似乎我太天真了,无法正确理解实现 xD
我在某处读到,为了避免转义序列,我们可以使用\在空格之前使用 a 。然而,这并没有多大区别。
工作流在构建时返回以下错误:
Run echo ${MANUSCRIPT_PATH}.tex
echo ${MANUSCRIPT_PATH}.tex
${LATEX} ${MANUSCRIPT_PATH}.tex
${BIBTEX} ${MANUSCRIPT_PATH}.aux
${LATEX} ${MANUSCRIPT_PATH}.tex
${LATEX} ${MANUSCRIPT_PATH}.tex
shell: /bin/bash -e {0}
env:
MANUSCRIPT_PATH: Literature\ Review/Review
LATEX: pdflatex -shell-escape
BIBTEX: bibtex
Literature\ Review/Review.tex
This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=pdflatex)
\write18 enabled.
entering extended mode
! I can't find file `Literature'.
<to be read again>
\
<*> Literature\
Review/Review.tex
(Press Enter to retry, or Control-D to exit)
Please type another input file name:
! Emergency stop.
<to be read again>
\
<*> Literature\
Review/Review.tex
! ==> Fatal error occurred, no output PDF file produced!
Transcript written on texput.log.
Error: Process completed with exit code 1.
Run Code Online (Sandbox Code Playgroud)
我的yml文件如下所示:
name: paper-maker
on: push
jobs:
build:
runs-on: ubuntu-latest
env:
# This needs fixing
MANUSCRIPT_PATH: 'Literature\ Review/Review' # exclude the '.tex' / '.pdf' extension!
LATEX: pdflatex -shell-escape
BIBTEX: bibtex
steps:
- uses: actions/checkout@v1
- name: Install texlive
run: |
sudo apt-get install texlive-publishers \
texlive-latex-recommended \
texlive-latex-extra \
texlive-fonts-recommended \
texlive-fonts-extra
- name: Build paper
run: |
echo ${MANUSCRIPT_PATH}.tex
${LATEX} ${MANUSCRIPT_PATH}.tex
${BIBTEX} ${MANUSCRIPT_PATH}.aux
${LATEX} ${MANUSCRIPT_PATH}.tex
${LATEX} ${MANUSCRIPT_PATH}.tex
- name: Push paper
run: |
git checkout --orphan ${GITHUB_REF##*/}-pdf
git rm -rf .github/
git rm -rf .
git add -f ${MANUSCRIPT_PATH##*/}.pdf
git -c user.name='paper-maker' -c user.email='paper-maker' commit -m "update pdf"
git push -q -f https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }} ${GITHUB_REF##*/}-pdf
Run Code Online (Sandbox Code Playgroud)
不要尝试单独转义空格字符,只需将结果路径放在双引号中:
MANUSCRIPT_PATH: Literature Review/Review
Run Code Online (Sandbox Code Playgroud)
${LATEX} "${MANUSCRIPT_PATH}.tex"
${BIBTEX} "${MANUSCRIPT_PATH}.aux"
${LATEX} "${MANUSCRIPT_PATH}.tex"
${LATEX} "${MANUSCRIPT_PATH}.tex"
Run Code Online (Sandbox Code Playgroud)
似乎反斜杠转义是在变量替换之前处理的,这就是您的方法不起作用的原因。
无论如何,将最终路径放在双引号中是长期确立的最佳实践。
编辑:详细说明一下,这与 Docker 或 YAML 无关。只需在 bash 中尝试一下这段代码:
mkdir -p a\ b && echo "foo" > a\ b/c.txt
P='a\ b/c' cat $P.txt
Run Code Online (Sandbox Code Playgroud)
你会得到
cat: a\: No such file or directory
cat: b/c.txt: No such file or directory
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,反斜杠在变量替换中没有转义后面的空格。相反,shell 的行为就像您提供了两个参数'a\'和'b/c.txt'。
| 归档时间: |
|
| 查看次数: |
7859 次 |
| 最近记录: |