スキップしてメイン コンテンツに移動

複数の文書で共通して使いたい文書の置き場所(LaTeX)

LaTeXでLebesgue積分のノートと複素解析のノート,Lie群のノートを作成しているのですが,実数関数についての微積分の内容をすべてのノートに共通させたいと以前から考えていました.

サブフォルダに置いてある文章ならば,import.styを使って読み込むことも可能ですが,同水準のフォルダ間の文章の読み込みは望みの挙動をしてくれる解決策を知りませんでした.
import.styを使うと,サブディレクトリ以外の他ディレクトリのファイルも読み込むことが可能なようです.しかし私が試した限りでは,警告やエラーが出ないものの,期待したファイルを読み込んでいない結果が得られました.またimport.styを使うと,YaTeX側で認識をしてくれないという問題があります(個人的にはこれが一番の問題).


仮に共有したい微積分のノートが「$HOME/notes/calculus」に置いてあるとします.

  • \inputコマンドを使うのであれば,これは相対パスを理解してくれるようなので,\input{../calculus/integral}といった記述をしても問題なくタイプセットを行うことが可能です.

しかし\includeコマンドを使おうと思うと,相対パス表記はLaTeX側で解釈してもらえないようで,エラーが出てしまいます.大規模の文章を扱うときには,\includeonlyコマンドを使って分割タイプセットを行いたいので,\inputしか使えないのは不満が残ります.

  • 別の解決策として1つのPC(OS)しか使わないのであれば,共通させたい文書を入れるフォルダを作って,その他の各文書のフォルダにはシンボリックリンクを貼っておけば良さそうです.
しかしこれにも問題点があって,私はLaTeXのノートをDropboxに保存して複数のPCで共有しているのですが,シンボリックリンクを使った方法だとDropbox上で実ファイルとして認識されてしまうようで,他のPCでは実ファイル化してしまい余計に扱いがややこしくなりました.

現在はMacやLinuxの環境では
  • ~/.bashrcなどに変数TEXINPUTSを
    export TEXINPUTS=$HOME/notes/calculus:$TEXINPUTS
    と記述してTeX側から共有したいファイルの場所が見えるようにする.
という解決策に落ち着きそうです.この方法だと,\include{integral}といった形で読みこめばよく,また\includeonlyコマンドも用いることができます.多くのディレクトリを追加すると,同じファイル名のものがあるときにかなりまずいことが起こりそうな予感がするので,ファイル名には慎重になる必要がありそうです.

YaTeXでincludeonlyの自動補完機能を使うとフルパスを記述されてしまうので,その点がなんとかならないかなとは思いますが,大分やりたいことに近づいたと思います.


2014/06/28:追記: TEXINPUTSを書き換える方法では,上記のように書き換えた場合,$HOME/notes/calculus内にauxファイルがあると,mainファイルに作成されたauxファイルよりもそちらを先に読みにいってしまうため,目次や式番号などが正しく作成されません.共有する文書を入れたディレクトリ内からはauxファイルを削除しておくようにしましょう.

他にも色々な解決法があるようです.
のあたりが参考になります.
\let\include=\inputとするものや,texmf.cnfの中のopenout_any, openin_anyという変数をa (any)にするものもありました.後者はカレントディレクトリの上位ディレクトリの読み書きを許すことになるので,セキュリティー上よろしくないようです.野良TeXファイルをタイプセットしないのであればこれでよいのかも.

    このブログの人気の投稿

    OpenCv-PythonとpdfLaTeXで自炊pdfファイルの位置調整

    この記事は TeX & LaTeX Advent Calendar 2021 の11日目の記事です. 10日目は t_kemmochi さん,12日目は yukishita さんです.   動機  書籍の自炊にブックエッジスキャナーの AvisionのFB2280E を利用しています。書籍を裁断せずに1ページずつスキャンを行うため、本の開き具合などの要因で本の序盤、中盤、終盤で得られるスキャン画像の位置ずれが大きくなります。以前からpdfLaTeXを利用して位置調整をしていたのですが、OpenCvを利用して自動化できそうだったので試してみました。 やること 本記事では、pdf化した文書画像の版面(文字の印刷された部分の意味で使います)を半自動的に計算してpdfの画像の位置調整をするために、OpenCvとpdfLaTeXを利用する方法を解説します。手順としては Pythonの画像認識用ライブラリであるOpenCvを利用して版面を計算する。 テンプレートエンジンライブラリのJinja2を使って画像のバウンディングボックスなどを記述したLaTeXファイルを作成する。 pdfLaTeXでpdfを読み込み、位置の調整されたpdfを作成する。 という流れになっています。作業環境としては、 Visual Studio CodeをRemove - WSL拡張機能と併用 しています。PythonやそのライブラリはWSL上のUbuntuにインストールし、他にもpdfファイルを他のファイル形式にするためにpoppler-utilsなんかもインストールしました。 参考記事 OpenCvを利用した文書画像のレイアウト解析については ブログSomething Like Programming内の記事 Document Layout Analysis githubリポジトリ rbaguila/document-layout-analysis OpenCv-Pythonチュートリアル を参考にしました。 pdfLaTeXがpdf加工に使えるという話と、pdfpagesパッケージの存在は doraTeXさんのブログTeX Alchemist Onlineの記事 pdfTeX による見開きPDFの結合・分割 で知ったように思います。 画像pdfをpdfpagesで取り込む ま...

    定理環境をmdframedからtcolorboxへ乗り換え

    追記:2016/05/02 以前に掲載していた定理環境のマクロでは、カウンターが変化しないような記述をしてしまっていたので、全面的に書き換えました。 追記:2016/06/06 tcolorboxのオプションを追加できるように書き直しをしました( tcolorboxを使った定理環境 )。 LaTeXの話です。 これまで定理環境の修飾にmdframed.styを利用してきました。 mdframedを用いた定理環境の修飾(platex+dvipdfmx, tikz) しかし上の投稿で用いた記述をしていると、定理環境がページの下部にきたとき、まれに以下のように環境が新しいページに送られてしまい変なところで改ページが起こります。 TeX-LaTeX Stack Exchangeでも同様の不具合が報告されていて、mdframed.styの作者が回答して解決しているようなのですが、私の場合は上手く行きませんでした。タイトル部分の位置の計算に問題があるようです。 そういう訳で、mdframed.styよりも高い表現力を持つtcolorbox.styには興味を持っていました。今回は、mdframed.styで記述していた部分を、ソースの変更無しにtcolorboxで置き換えてみたので、その紹介をします。 tcolorbox.styで置き換えた結果は次のようになりました。 見た目はほとんど変わっていません。中のboxは別のtcolorbox環境です。 この定理環境のソースコードは次のようになります。 \usepackage{tcolorbox} \usepackage{varwidth} \tcbuselibrary{breakable} \tcbuselibrary{skins} \definecolor{frameinnercolor}{RGB}{49,44,44} \newcounter{theorem} \numberwithin{theorem}{section}% numberwithinはamsmath.styで定義されている \newenvironment{theorem}[2][]{% %#1 = タイトル, #2 = 定理環境名 \refstepcounter{theorem}% \newtcolorbox{...

    定理を再掲したときに定理番号も揃える(amsmathのtagと似た挙動の定理環境を作る).

    LaTeXの話題です.amsmath.styで定義されているtagコマンドは,数式環境の式番号部分を自由な文字列で置き換えることができるようになっています.下に例を挙げます. この画像を生成するLaTeXのコードは次のようになります. \documentclass[a4paper,dvipdfmx,uplatex]{jsarticle} \usepackage[dvipdfmx,bookmarks=true,bookmarksnumbered=true,% ,colorlinks=true,linkcolor=blue]{hyperref}% \usepackage{showkeys} \usepackage{amsmath} \numberwithin{equation}{section} Unknown environment 'document' 最初のequation環境にeq:eulerというlabelをつけ,第2のequation環境ではtagコマンドを使って数式番号部分に¥ref{eq:euler}と書くことで,実際に表示される式番号が第1のequation環境のものと同じになっています.この第2のequation環境にはeq:euler2というlabelを付けており,これを¥eqref{eq:euler2}と参照すると表示される番号は第1のequation環境のものであるにも関わらず,リンクをクリックすると第2のequation環境にジャンプします. このような現象が起こるのは,上記のファイルをタイプセット...