LaTeX用の独自の洗練されたスタイルを作成する

背景



TeXで統一されたドキュメントを定期的に作成する場合、独自のスタイルを作成すると作業が大幅にスピードアップします。



私の通常の文書は、学童向けのタスクを含むリーフレットを作成することです。 次のように表示されます。PNGまたはPDF (およびsosoまたはso

ここにあるほぼすべてのデザイン(および結果の個別のラベル)は自動的に作成されます。

(誰かがそれを必要とするなら、私はドキュメントと使用例を含むパッケージを配ることができます)



自分のスタイルを作成するときに、さまざまな「トリック」を共有したいと思います。

自分のチームを作成するというテーマにまったく属していない場合は、 Lvovskyなどを読むのが最善です。





ロシア語の文字を含むコマンド(および数式でロシア語を使用する方法とPDFでロシア語を追加する方法)





ロシア語の文字で構成されるチームを作成すると便利な場合がよくあります。 たとえば、

  \ ,  ...
      
      







そのようなコマンドを作成する際の障壁は、デフォルトでTeXがロシア語の文字を完全な文字ではないと見なすことです(間違ったcatcode(Knuthを参照)。

TeXにあなたの欲求を説明するには、大きくても理解できるものを満たす必要があります

 \catcode156=11\catcode201=11\catcode212=11\catcode223=11\catcode234=11\catcode245=11 \catcode188=11\catcode202=11\catcode213=11\catcode224=11\catcode235=11\catcode246=11 \catcode192=11\catcode203=11\catcode214=11\catcode225=11\catcode236=11\catcode247=11 \catcode193=11\catcode204=11\catcode215=11\catcode226=11\catcode237=11\catcode248=11 \catcode194=11\catcode205=11\catcode216=11\catcode227=11\catcode238=11\catcode249=11 \catcode195=11\catcode206=11\catcode217=11\catcode228=11\catcode239=11\catcode250=11 \catcode196=11\catcode207=11\catcode218=11\catcode229=11\catcode240=11\catcode251=11 \catcode197=11\catcode208=11\catcode219=11\catcode230=11\catcode241=11\catcode252=11 \catcode198=11\catcode209=11\catcode220=11\catcode231=11\catcode242=11\catcode253=11 \catcode199=11\catcode210=11\catcode221=11\catcode232=11\catcode243=11\catcode254=11 \catcode200=11\catcode211=11\catcode222=11\catcode233=11\catcode244=11\catcode255=11
      
      





よりコンパクトであるが、あまり明らかではない(russhl.styスタイルから取得)

 \def\reserved@a#1#2{\@tempcnta#1\relax\@tempcntb#2\relax\reserved@b} \def\reserved@b{\ifnum\@tempcnta>\@tempcntb\else\reserved@c\@tempcnta\advance\@tempcnta\@ne\expandafter\reserved@b\fi} \def\reserved@c#1{\catcode#1=11\relax} \reserved@a{192}{223} % - \reserved@a{224}{255} % - \catcode156=11 %  \catcode188=11 % 
      
      







その後、チーム内のロシア文字に関する問題はなくなります。



ロシア語と数式


数式でロシア文字をロシア文字として使用する場合は、mathtextパッケージが保存されます。



ロシア語とPDF


既製のpdfファイルを検索するときに通常のロシア語の文字を取得したい場合は、cmapパッケージが役立ちます。 ただし、さらに優れた解決策があります。グリフユニコード.texファイルに文字のかなりの部分のunicodコードを含めることができ、完成したpdfでギリシャ文字と多くの数学記号を検索(およびコピーアンドペースト)できます。



環境とスタイルの複雑なパラメーター(および任意のサイズと行送りの設定方法)





パラメーターで指定できるように、環境またはスタイルを作成する方法:

 [Par1=Value1, Par2=Value2, dump]
      
      







多くの場合、これは非常に便利です。



答えはkeyval.styパッケージによって与えられます。



どうする


まず、スタイルを接続します。

 \usepackage{keyval}
      
      







次に、キーの処理方法を定義します。

 \define@key {  } {  } [  ] (   ,        ) {  }
      
      







ここで、テキストを解析するコマンドを呼び出します。正しい変数ごとに、対応する\ define @キーに書き込まれたものを実行します

 \setkeys {  } {,   }
      
      







環境の例




したがって、たとえば、行間のスペースが明示的に示され、フォントサイズも選択される環境を作成する必要があります。 (提供されたテキストについてはYandex.Reportsに感謝します)



コード:

 \documentclass[12pt]{article} \usepackage[textwidth=5cm]{geometry} \usepackage[T2A]{fontenc} \usepackage[cp1251]{inputenc} \usepackage[russian]{babel} \usepackage{keyval} \sloppy \makeatletter \newlength{\wid} %  ---   \newtoks{\fnt} %  ---   \newlength{\skp} %  ---    \define@key{key}{font}[12]{\fnt={#1}} %   font,     (   ,  12) \define@key{key}{skip}{\skp=#1} \define@key{key}{width}{\wid=#1} \newenvironment{test}[1]% %      {\setkeys{key}{#1}% %   \begin{minipage}{\wid} %     \fontsize{\the\fnt}{\skp}\selectfont %       }% {\par\end{minipage}} %   \makeatother % @    \begin{document} \begin{test}{font=6,skip=14pt,width=5cm}    .  , ,      ,  .  , ,    ,     .    . \end{test} \bigskip \begin{test}{width=7cm,skip=13pt,font}    .  , ,      ,  .  , ,    ,     .    . \end{test} \end{document}
      
      





結果:

画像



(KnutまたはLvovskyの\ fontsizeと\ selectfontについて読みます)



複雑なスタイルオプション


今、より難しいタスクは、スタイルにそのようなパラメーターを持たせることです。

問題を解決するために、geometry.styスタイルがどのように機能するかを研究する必要がありました。



ここではすべてが非常に似ていますが、スタイルの最初にパラメーターを強制的に解析する小さなコードを追加する必要があります。 例を挙げましょう、それで十分です:



例(およびmagコマンドをドキュメントフィールドで正しく機能させる方法)




test.sty


 \ProvidesPackage{test.sty} \RequirePackage[T2A]{fontenc} \RequirePackage[cp1251]{inputenc} \RequirePackage[russian]{babel} \RequirePackage{keyval} %     ,     \define@key{key}{mag}{\mag#1} % , ,     \let\@tempa\@empty% \edef\@tempa{\@ptionlist{\@currname.\@currext}}% \@for\CurrentOption:=\@classoptionslist\do{% \@ifundefined{KV@#2@\CurrentOption}{}{\edef\@tempa{\@tempa,\CurrentOption,}}}% \edef\@tempa{\noexpand\setkeys{key}{\@tempa}}% \@tempa% \AtEndOfPackage{\let\@unprocessedoptions\relax}% %    ,       dvi,   pdf. %   ,  dvi  pdf    , %       ( true),   --- . % -   . \global\setlength\paperheight {297truemm}% \global\setlength\paperwidth {210truemm}% \global\setlength\pdfpageheight{297truemm}% \global\setlength\pdfpagewidth {210truemm}% \global\setlength\textheight {260truemm}% \global\setlength\textwidth {180truemm}% \global\setlength\hoffset {-1truein}% \global\setlength\voffset {-1truein}% \global\setlength\pdfhorigin {1truein}% \global\setlength\pdfvorigin {1truein}% \global\setlength\oddsidemargin{15truemm}% \global\setlength\topmargin {5truemm}% \global\setlength\leftskip {0truemm}% \global\setlength\rightskip {0truemm}%
      
      





test.tex


 \documentclass[12pt]{article} \usepackage[mag=2000]{test} \begin{document} ! \end{document}
      
      





(ドキュメントを任意に拡大縮小できるmagコマンドは非常に優れています。ただし、できるだけ早く呼び出す必要があります。たとえば、1cmまたは1inは拡大縮小に影響しますが、1truecmまたは1trueinは影響しません。したがって、すべてのフィールドでtrueを使用する必要があります-units、ただし他のすべての場所では通常です。このため、geometryパッケージはmagではうまく機能しません。さらに、pdfとdviのページサイズ(およびオフセット)に異なるサイズ(paperheightやpdfpageheightなど)が使用されます。さらに多くの問題。上記のコードはそれらすべてを考慮に入れています)



他に何?





TeXを使用して独自のスタイルを作成してから8年以上、私はかなり多くの異なるトリック、トリック、および一般的に文献でカバーされていない自明でない瞬間を蓄積しました。

関心がある場合は、これも強調表示できます。



例:

  1. ポータブルビルドを作成し、WinEdtを構成します(トレントでのビルド)
  2. PDFでの直接検索と逆検索のWinEdtセットアップ(dviを忘れることがあります)(habr についてはすでに少し書いています
  3. その場でドキュメントの構造を「分析」するチームを作成します-たとえば、複雑なコンジットを自動的に作成し、その場でサードパーティのファイルにデータを書き込みます(たとえば、後で電子コンジットに使用される特別なxmlをその場で作成します)
  4. perl-、python-、metapost-、またはサードパーティのコードのその場での処理と実行
  5. その結果、他人のドキュメントを不正確にコンパイルすることにより、たとえば、データを削除したり、ウイルスプログラムを実行したりできます。 など (例;-)
  6. 図面、グラフなどを作成および追加します。 TeX、メタポスト、IPE、GeoAlgebraなどで直接 (これについても、すでに1つ2つ3つでしたが、トピックは広大です。



All Articles