`latexmk`

latexmk 的學(xué)習(xí)(自用)

其實(shí)是把翻譯給咕掉了, 先把實(shí)用的東西寫了, 方便查閱, 剩下的嘛, 考完研再說(shuō)吧, 也沒準(zhǔn)哪天心血來(lái)潮就寫了

先把這個(gè)東西寫了, 隨用隨查, 然后也說(shuō)一下遇到的坑什么的(如果有的話)

命令行中的 latexmk

latexmk 的通用格式為

latexmk [options] [file]

其中 file 可以直接寫文件名, 如果直接寫 foo 的話, latexmk 會(huì)按照 foo.tex 來(lái)處理. 有一些符號(hào)在文件名中是不能用的: $, %, \,`(這個(gè)東西不能放在代碼塊里……), &這個(gè)符號(hào)不能作為文件名的開頭, 還有一些控制字符也不可以, 不過我估計(jì)沒人會(huì)閑的用控制字符來(lái)做 .tex 的文件名...

幾個(gè)常用的 option

-auxdir=FOO 或者 -aux-directory=FOO

設(shè)置存放輔助文件的文件夾, 但是這個(gè)命令只能在 MiKTeX 版本的 latex中使用, 我這里是 TeX Live, 沒有辦法做測(cè)試.

-bibtex

當(dāng)源文件需要用 .bbl 文件作為參考文獻(xiàn)的時(shí)候, 運(yùn)行 bibtex 或者 biber 來(lái)更新 .bbl 文件. 這個(gè)選項(xiàng)可以將 latexmkrc 中的 $bibtex_use 的值設(shè)置為 2 來(lái)實(shí)現(xiàn).

-bibtex-

從不運(yùn)行 bibtex 或者 biber. 同時(shí)將 .bbl 文件看做珍貴的 ( 原文為 precious ), 也就是在執(zhí)行清理命令的時(shí)候不會(huì)刪除 .bbl 文件. 如果我們接受到的文件中只有 .bbl 而沒有 .bib 的時(shí)候會(huì)啟用這個(gè)選項(xiàng). 這個(gè)選項(xiàng)可以將latexmkrc 中的 $bibtex_use 的值設(shè)置為 0 來(lái)實(shí)現(xiàn).

bibtex-cond

如果源文件中存在 .bib 文件, 則運(yùn)行 bibtexbiber 來(lái)重寫 .bbl 文件, 如果沒有 .bib 文件, 則不運(yùn)行 bibtexbiber, 這個(gè)選項(xiàng)也會(huì)將 .bbl 文件看做珍貴的. 這個(gè)選項(xiàng)可以將latexmkrc 中的 $bibtex_use 的值設(shè)置為 1 來(lái)實(shí)現(xiàn).

-command

列出 latexmk 在處理文件時(shí)可以使用的命令, 然后退出.

-c

清理所有由 latex , bibtex, 以及 biber 生成的可再生的文件, 除了 .dvi, postscript, 和 .pdf 文件. 會(huì)刪除的文件有 .log, .aux, latexmk 創(chuàng)建的數(shù)據(jù)文件, 還有 @generated_exts 中指定擴(kuò)展名的文件, 同時(shí)還有 $clean_ext 指定的文件.

-C

清理 -c 選項(xiàng)中的所有文件, 以及 .pdf, .dvi, postscript 文件, 以及 $clean_full_ext 指定的文件.

-cd

在進(jìn)行處理之前切換到有源程序的文件夾, 并將所有的文件生成在這個(gè)文件夾里. 舉例: 如果你的文件夾結(jié)構(gòu)為 parent/subfolder/main.tex, 你在 parent 文件夾下, 命令行執(zhí)行

latexmk -cd -xelatex subfolder/main

后, 會(huì)進(jìn)入 subfolder 文件夾進(jìn)行編譯, 并將輔助文件和輸出文件生成在 subfolder 文件夾下. 這里注意路徑的分隔符要使用 / , 哪怕是 Windows.

-f

強(qiáng)制執(zhí)行 latexmk 哪怕遇到了 error. 一般情況下, 當(dāng) latexmk 遇到了 latex 或者其他程序在接下來(lái)的運(yùn)行中無(wú)法處理的問題的時(shí)候, 將不會(huì)給出處理結(jié)果.

接下來(lái)的運(yùn)行指的是 如果沒有 error 出現(xiàn), 運(yùn)行其他程序或者重新運(yùn)行latex 的時(shí)候會(huì)編譯完成 ( 這段其實(shí)我沒看懂, 原文是 "Further processing" means the running of other Programs or the rerunning of latex (etc) that would be done if no errors had occurred. ) 額外地, 如果你想讓 latex 程序遇到 error 之后不出現(xiàn)給用戶處理 error 的暫停 , 你需要使用一些可以傳遞給程序的選項(xiàng), 比如 -interaction=nonstopmode. 舉例: 當(dāng)文檔里有一個(gè)嚴(yán)重的錯(cuò)誤, 比如沒有定義的命令, 使用 -f 的話

latexmk -f -xelatex main

在遇到錯(cuò)誤的時(shí)候依舊會(huì)暫停來(lái)等待用戶處理, 而使用 -interaction=nonstopmode 的話

latexmk -interction=nonstopmode -xelatex main

latexmk 會(huì)一氣呵成運(yùn)行到最后, 哪怕沒有文件輸出.

-g

強(qiáng)制完整地運(yùn)行一遍 latexmk, 哪怕在 latexmk 覺得源文件自從上次編譯之后沒有改動(dòng)

-h, -help

打印 latexmk 的幫助信息.

-jobname=STRING

把輸出文件中的文件名設(shè)置為 STRING, 而不是源文件名, 這個(gè) STRING 中不能帶空格. 如果要使用占位符 %A 的話也可以, 比如

latexmk -xelatex -jobname=%A-xelatex main

這樣輸出文件名就變成了 main-xelatex.***.

-outdir=FOO 或者 -output-directory=FOO

設(shè)置存放所有輸出文件的文件夾.

-pdf

當(dāng)使用 pdflatex 的時(shí)候輸出 .pdf 文件.

-pdflatex

使用 pdflatex 編譯, 并且關(guān)閉 .dvi.ps 文件的生成.

-pv

運(yùn)行預(yù)覽程序, 因?yàn)榫幾g中文文檔用的 xelatex 不會(huì)生成 .dvi.ps 文件, 所以也不存在預(yù)覽哪個(gè)文件的問題, 直接就是運(yùn)行 .pdf 文件的預(yù)覽.

-r <rcfile>

<rcfile> 中的內(nèi)容執(zhí)行 latexmk. 但是要注意調(diào)用順序, latexmk 總是會(huì)先調(diào)用標(biāo)準(zhǔn)初始的 latexmkrc 文件, 如果不存在初始的 latexmkrc 文件的情況下再去調(diào)用 <rcfile>. 但是如果 <rcfile> 中指定了一個(gè)初始的 latexmkrc 文件, 那么這個(gè)文件會(huì)在所有的標(biāo)準(zhǔn)初始的 latexmkrc 文件之前運(yùn)行.

-v, -version

打印 latexmk 的版本號(hào).

-xelatex

使用 xelatex 編譯程序, 同時(shí)關(guān)閉 .dvi.ps 的生成.

以上是我在閱讀文檔的過程中覺得我會(huì)用的到的選項(xiàng), 如果有更多的話會(huì)再補(bǔ)充

RC 文件中的 latexmk

如何在 RC 文件中設(shè)置變量

變量的格式應(yīng)如下

設(shè)置一個(gè)值為字符串的變量:

$bibtex='bibtex %O %B';

設(shè)置一個(gè)值為數(shù)字的變量:

$preview_mode=1;

設(shè)置一個(gè)值為數(shù)組的變量:

@default_files=('paper', 'paper1');

也可以用下面的語(yǔ)句來(lái)給數(shù)組變量添加值:

push @default_files, 'paper2';

可以注意到簡(jiǎn)單的標(biāo)量變量的名字的開頭都是 $, 而數(shù)組變量的名字的開頭是 @, 每個(gè)語(yǔ)句都以分號(hào) ; 結(jié)尾. 字符串應(yīng)該用單引號(hào)括起來(lái), 不建議使用雙引號(hào).

命令規(guī)定的格式

一些變量會(huì)設(shè)置 latexmk 用于工作的命令, 比如通過 .tex 文件生成 .dvi 文件, 或者去瀏覽一個(gè) .ps 文件.

占位符

如果你想讓 latexmk 在通常是 latex 的位置使用 elatex 命令, 而且想讓它使用 --shell-escape 選項(xiàng), 要像下面這么寫

latex='elatex --shell-escape %O %S';

那兩個(gè)前面帶 % 的就是占位符, 在運(yùn)行命令之前他們會(huì)被替換為適當(dāng)?shù)闹? 因此 %S 會(huì)被替換為 elatex 應(yīng)用的源文件名, %O 會(huì)被替換為任何 latexmk 將作用在這個(gè)命令上的選項(xiàng), 比如如果你在調(diào)用 latexmk 的時(shí)候使用了 -silent 選項(xiàng), %O 會(huì)被替換為 -interaction=batchmode. 下面列出可用的占位符

  • %A: 主 .tex 文件的文件名. 不同于 %R, %A 不會(huì)被設(shè)置別名(jobname) 而受影響;
  • %B: 最近命令中的基礎(chǔ)名 (base name). 比如一個(gè) document.ps 文件從一個(gè) document.dvi 轉(zhuǎn)化得到, 那么這個(gè)文件名就是 document
  • %D: 終點(diǎn) (destination) 文件名. 比如一個(gè) .ps 文件由一個(gè) .dvi 文件轉(zhuǎn)化得到, 那么終點(diǎn)文件名就是這個(gè) .ps 文件名.
  • %O: 例子中提到的選項(xiàng).
  • %P: 如果變量 $pre_tex_code 不空, 那么 %P 會(huì)被替換為 $pre_tex_code\input{SOURCE} 后面的內(nèi)容, 其中 SOURCE 是資源文件 (source file) 的名字. 這讓 TeX 代碼可以在資源文件被讀入之前就傳給 *latex 引擎. 如果 $pre_tex_code 為空, 那么 %P%S等價(jià).
  • %R: 根文件名, 這是主 .tex 文件的基礎(chǔ)名, 但是這個(gè)值可以被 -jobname 選項(xiàng)或者 $jobname 變量改變.
  • %S: 源文件名. 比如當(dāng)轉(zhuǎn)化一個(gè) .dvi 文件到 .ps 的時(shí)候, .dvi 的文件名就是源文件名.
  • %T: The name of the primary .tex file.
  • %U: 如果變量 $pre_tex_code 不空, 那么這個(gè)值就被傳遞給 %U, 如果為空, 那么它被替換為一個(gè)空字符 (null string).
  • %Y: 輔助文件所在的文件夾名. 如果文件夾名不是以合法符號(hào)結(jié)束, 那么就會(huì)被添加一個(gè)文件夾分隔符 /. 注意: 如果設(shè)置了 $out_dir 卻沒設(shè)置 $aux_dir, 那么latexmk 就把 $aux_dir 設(shè)置為 $out_dir.
  • %Z: 輸出文件夾名. 如果 $out_dir 不空, 且沒以合法符號(hào)結(jié)束, 那么就會(huì)被添加一個(gè)文件夾分隔符 /.

(說(shuō)實(shí)在的我暫時(shí)沒分清這么多 name 到底是什么 name, 比如 basename, roof filename, primary tex file...)

如果有什么原因你要使用一個(gè) % 字符, 還不是上面標(biāo)出的情況, 那么用 %%.

注意: 在文件名傳遞的過程中會(huì)被適當(dāng)?shù)靥砑右?hào), 所以不要自行添加引號(hào), 即使文件名中有空格. ( 如果你的 TeX 文件名中有空格, 那么一些過老版本的 TeX 程序可能不會(huì)很好地處理它們. ) 如果 latexmk 的引號(hào)不能正確地工作, 你也可以將它關(guān)閉, 在變量 $quote_filenames 的設(shè)置中.

20200406 更新

昨天在使用 latexmk -xelatex -pvc main 的時(shí)候發(fā)現(xiàn) SumatraPDF 不能主動(dòng)更新 PDF 文件, 而使用 latexmk -pdflatex -pvc main 就可以更新, 甚至將 rc 文件中的 $pdflatex 設(shè)置為

$pdflatex="xelatex -file-line-error -halt-on-error  -interaction=nonstopmode -synctex=1 %O %S";

都可以更新 pdf 文件. 原因是 latexmk 選項(xiàng)中的 -xelatex 的默認(rèn)選項(xiàng)是 xelatex %O %S 下面直接引用 texdoc latexmk 中的原文

Note about xelatex: latexmk uses xelatex to make an .xdv rather than .pdf file, with the .pdf file being created in a separate step. This is enforced by the use of the -no-pdf option. If %O is part of the command for invoking xelatex, then latexmk will insert the -no-pdf option automatically, otherwise you must provide the option yourself.

-no-pdfxelatex 特有的選項(xiàng).

綜上所述, 產(chǎn)生這個(gè)問題的原因是: 在使用 latexmk-xelatex 選項(xiàng)時(shí), latexmk 會(huì)執(zhí)行 xelatex %O %S, 而這個(gè) %O 中帶了 (latexmk 選項(xiàng)) 中的 -no-pdf 選項(xiàng), 于是在沒有配置 rc 文件的時(shí)候, latexmk -xelatex main = xelatex -no-pdf -record main.

問題出現(xiàn)了就可以給出解決辦法:

  1. rc 中的 $xelatex 選項(xiàng)的配置為不帶 %O 的命令, 如 $xelatex="xelatex %S" 即可, 但是這么做的后果是不能將臨時(shí)添加在 latexmk 中的 xelatex 的選項(xiàng)傳遞給 xelatex, 比如像上面一樣配置 $xelatex, 那么在使用 latexmk -synctex=1 main 的時(shí)候, 不會(huì)執(zhí)行 -synctex=1 這個(gè)選項(xiàng).
  2. 修改 rc 文件中的 $pdflatex 選項(xiàng)為 $pdflatex="xelatex %O %S" 這樣可以接受臨時(shí)添加的選項(xiàng), 后果是不能使用 pdflatex 編譯.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末铛绰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子镣屹,更是在濱河造成了極大的恐慌窖梁,老刑警劉巖笋敞,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡董虱,警方通過查閱死者的電腦和手機(jī)咙轩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門获讳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人活喊,你說(shuō)我怎么就攤上這事丐膝。” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵帅矗,是天一觀的道長(zhǎng)偎肃。 經(jīng)常有香客問我,道長(zhǎng)浑此,這世上最難降的妖魔是什么累颂? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮凛俱,結(jié)果婚禮上紊馏,老公的妹妹穿的比我還像新娘。我一直安慰自己蒲犬,他們只是感情好朱监,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著原叮,像睡著了一般赫编。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奋隶,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天擂送,我揣著相機(jī)與錄音,去河邊找鬼唯欣。 笑死团甲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的黍聂。 我是一名探鬼主播躺苦,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼产还!你這毒婦竟也來(lái)了匹厘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤脐区,失蹤者是張志新(化名)和其女友劉穎愈诚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牛隅,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡炕柔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了媒佣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匕累。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖默伍,靈堂內(nèi)的尸體忽然破棺而出欢嘿,到底是詐尸還是另有隱情衰琐,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布炼蹦,位于F島的核電站羡宙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏掐隐。R本人自食惡果不足惜狗热,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望虑省。 院中可真熱鬧斗搞,春花似錦、人聲如沸慷妙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)膝擂。三九已至,卻和暖如春隙弛,著一層夾襖步出監(jiān)牢的瞬間架馋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工全闷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留叉寂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓总珠,卻偏偏與公主長(zhǎng)得像屏鳍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子局服,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 剛裝了電腦钓瞭,這幾天一直在整理資料還有倒騰軟件。今天打開Word突然覺得它很難用淫奔,因?yàn)樗?jīng)常出現(xiàn)格式混亂的情況山涡。這時(shí)...
    BSC_5622閱讀 47,954評(píng)論 0 19
  • 目錄 [TOC] 本系列是有關(guān)LaTeX的學(xué)習(xí)系列,共計(jì)19篇唆迁,本章節(jié)是第5篇鸭丛。前一篇:04LaTeX學(xué)習(xí)系列之-...
    張一根閱讀 22,849評(píng)論 1 4
  • 一份簡(jiǎn)短的LaTeX介紹 第一章 LaTeX須知 1.1 概述 1.1.1 TeX TeX是高德納開發(fā)的,以排版數(shù)...
    左岸右水閱讀 2,071評(píng)論 0 0
  • LaTeX 唐责,是一種基于 TeX 的排版系統(tǒng)鳞溉,由美國(guó)計(jì)算機(jī)科學(xué)家萊斯利·蘭伯特在20世紀(jì)80年代初期開發(fā),利用這種...
    海上波濤閱讀 1,452評(píng)論 0 0
  • 機(jī)械鍵盤由于獨(dú)特的手感鼠哥,越來(lái)越受到大家的青睞穿挨。 其每一顆按鍵都有一個(gè)單獨(dú)的開關(guān)來(lái)控制閉合月弛,這個(gè)開關(guān)也被稱為“軸”,...
    超級(jí)老兔子閱讀 399評(píng)論 0 0