latex cli 工具是否存在

latex cli 工具是否存在

当我必须去寻找我的 tex 模板或下载模板或从记忆中重新创建一个模板时,我真的很恼火。是否存在适用于 Linux 的 Latex cli 工具,在终端中,我可以在终端中输入类似以下内容:

latex new article --name MyArticle

它将初始化必要的 tex 文件。

答案1

在我看来,最好的方法是设计自己的脚本,因为你经常需要不同的包和选项。为了方便起见,我设计了一个名为的脚本,edit.sh如果文件存在,它会调用编辑器,如果文件不存在,它会根据我的需要动态创建一个新的 .tex 文件。shell 脚本的优点是可以根据你的特殊需求调整文件

这是我的edit.sh

#!/bin/ksh
#if the file doesn't exist create it with a template script
if ! [[ -f $1 ]]; then     
    #checks file extension
    case $1 in
   # for .tex calls for cnv_tex.sh  
   *.tex ) cnv_tex.sh $1;;#echo $1 | cnv_tex.pl ;;
   #shell
   *.sh ) echo "#!/bin/ksh" > $1;;
    esac ;
fi
#edit the file with my default editor
$VISUAL $1;;

我过去常常从 Emacs 切换到 Vim,现在我不再依赖编辑器,也不必配置特定于编辑器的模板。

下面是我非常长的 cnv_tex.sh 的摘录。我绕过了字体选择机制,但保留了语言选择机制。总结一下:它要求选择引擎(ConTeXt、LaTeX、XeTeX 或 LuaTeX)。如果选择了 ConTeXt,它会询问我的目的并加载适当的环境。如果选择了 XeTeX、LaTeX 或 LuaTeX,它会要求提供文档类和语言,并根据这些内容填充模板。是的,我不是 shell 专家,所以我的脚本可以更优雅。

#!/bin/ksh

fichier=$1
#function to escape backslash while writing
function bremp {
   echo -E $1 >> ${fichier} ;}
#another one to unescape backslash
function rempl {
   echo $1 >> ${fichier} ;}
#engine
echo "[l]atex, l[u]alatex, [x]elatex ou [c]ontext ?"
read moteur

#create an array with used languages
echo "langue1 puis autres? en fr de pl ou nom entier"
read babel
set -A langues $babel 

#ConTeXt 
if [[ $moteur == 'c' ]] ; then 
   select finalite in article metapost atelier_informatique évaluation documents fiche_methodo sprawdziany cours_lfv buffer  ;
   do
      case $finalite in
         évaluation)
            cp $HOME/texmf/tex/context/cnv_eval.tex ${fichier} ;;
         (article|metapost) 
            if [[ ${finalite} == "article" ]] ;
            then bremp "\setuppapersize[A4]"
                 bremp "\setuplayout[width=17cm,height=27cm,"
                 bremp "   backspace=2cm,topspace=2cm,header=0cm]"
                 bremp "\setuphead[title][page=no,align=middle,textstyle=bold]"
                 bremp "\setuphead[section][textstyle=bold]" ;
            fi ;
            if [[ ${langues[0]} == "fr" ]] ; 
            then rempl "\setuplanguage[${langues[0]}]\n   [leftquote=\upperrightdoublesixquote"
                 bremp "    rightquote=\upperrightdoubleninequote]";
            fi
            rempl "\language[${langues[0]}]"
            rempl "\n\n\n\\starttext" 
            if [[ ${finalite} == "metapost" ]] ;
            then bremp "\startMPpage"
                 rempl "\n%variables\n"
                 bremp "\stopMPpage" ;
            fi
            bremp "\stoptext" ;;
         buffer) 
            echo "nom du tampon (buffer) ?" 
            read NomTampon
            rempl "\startbuffer[${NomTampon}]\n\stopbuffer" ;;
        #loading others environment
            *) bremp "\environment env_${finalite}"
               rempl "\n\n\starttext\n"
               bremp "\stoptext" ;;
         esac
      break ;
   done ; 
#LaTeX and Co
else
#classes
   select classe in article beamer lfv report book draft moderncv ltugprocp ;
   do case $classe in
      (article|book|draft)
         mainopt=12pt
         set -A packages [margin=2cm]{geometry} {url} {graphicx} ;;
      beamer)
         mainopt=11pt,noamsmath
         set -A masques usetheme{} usecolortheme{} useinnertheme{} useoutertheme{} \
            setbeamertemplate{blocks}[rounded] setbeamertemplate{navigation%symbols}{} ;;
      lfv)
         mainopt=12pt,noamsmath,t
         set -A packages {lfv}
         select couleurs in magpie frigatebird cormorant;
         do break ;
         done ;;
      report)
         mainopt=12pt
         set -A packages [a4paper,vmargin={3cm,3.5cm},inner=3cm,outer=2cm]{geometry} {url} {graphicx};;
      ltugprocp)
         mainopt=polish
         set -A packages {url};;
      esac
      break;
   done 

   #title 
   echo "Titre?"
   read titre
   echo "Auteur? ([d]t)"
   read auteur
   case $auteur in
       "d") auteur=Damien\ Thiriet;;
   esac

   #let's write it on the file
   bremp "\documentclass[${mainopt}]{${classe}}" 
   for i in ${packages[*]}; do
      bremp "\usepackage$i"  ; 
   done
   for i in ${masques[*]}; do
      rempl "%\\${i}" ;
   done
   case $classe in
      (beamer)
         #navigation symbols
         /usr/bin/sed -i '/navigation/s/%symbols/ symbols/' ${fichier} ;;
      (lfv)
         /usr/bin/sed -i '/documentclass/s/lfv/beamer/' ${fichier}
         bremp "\usecolortheme{${couleurs}}";;
   esac


   ############languages
   #loop to load languages
   i=0
   while [[ ${langues[$i]} != '' ]] ; do
   #convert codes to babel and polyglossia language names
    case ${langues[$i]} in
        "de") langues[$i]=german;;
        "en") langues[$i]=english;;
        "fr") langues[$i]=french;;
        "pl") langues[$i]=polish ;;
    esac
    #increment
    ((i++));
   done 
  #how many languages
   maxi=${#langues[*]}
   case $moteur in
      (x|u)
         #load luaotfload if luatex
         rempl "\n\usepackage{ifluatex}" 
         bremp "\ifluatex"
         bremp "   \usepackage{luaotfload}"
         bremp "\fi"
         #polyglossia
         bremp "\usepackage{polyglossia}" 
         #language options
         if (( $maxi == 1));
         then 
            rempl "\setdefaultlanguage{${langues[0]}}\n\n";
         elif (( $maxi == 2 ));
         then
            bremp "\setmainlanguage{${langues[0]}}"
            rempl "\setotherlanguage{${langues[1]}}\n\n";
         elif (( $maxi >= 3 ));
         then
            bremp "\setmainlanguage{${langues[0]}}"
            #je supprime la première langue du vecteur
            langues[0]=''
            #comme cela langue[*] donne les langues secondaires, tr remplace espace par ,
            rempl "\setotherlanguages{$(echo ${langues[*]}|tr ' ' ',')}\n\n";
         fi

      "l")
          for i in $langues;
          do
             case $i in
              polish)
                  bremp "\usepackage{polski}";;
              francais)
                  bremp "\usepackage{lmodern}";;
              esac
          done
          bremp "\usepackage[utf8]{inputenc}"
         if (( $maxi == 1));
         then 
              bremp "\usepackage[${langues[0]}]{babel}";
          else
             #je place la langue principale en paramètre à part
             principale=$langues[0]
             #ce qui me permet de la supprimer pour obtenir un vecteur avec les langues secondaires
             langues[0]=''
             bremp "\usepackage[$(echo ${langues[*]}|tr ' ' ','),$principale]{babel}";
           fi;;
   esac

   #call for bibliography (after polyglossia)
   case $classe in
      (beamer|book|report|article|draft|ltugprocp)
         bremp "%\usepackage[sorting=none]{biblatex}"
         bremp "%\bibliography{}";;
   esac

   #last infos
   rempl "\\\title{$titre}\n\\\author{$auteur}\n\date{}\n\n"
   rempl "\\\begin{document}\n\\maketitle\n\n\end{document}";
fi

我也大量使用编辑器中的 shell 脚本。如果你读过波兰语,我为 GUST(波兰用户组)写了一篇关于这个主题的论文。

相关内容