在 WinEdt 中编译当前文本块

在 WinEdt 中编译当前文本块

在 WinEdt 中,有一个工具栏按钮用于编译文档的当前选择。但是是否可以在不手动选择的情况下编译当前文本块?通过文本块I 指的是用空行分隔的文本部分。

例如,如果我有以下文档:

\documentclass{article}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}% one
\draw[fill=red] (0,0) circle (1);
\end{tikzpicture}

\begin{tikzpicture}% two
\draw[fill=teal] (1,1) circle (2);
\end{tikzpicture}

\begin{tikzpicture}% three
\draw[fill=olive] (2,2) circle (3);
\end{tikzpicture}

\end{document}

并且我的光标在第二个tikzpicture环境内,我想通过按下某些键盘快捷键或单击某些工具栏按钮来编译这些第二个文本块。

答案1

\begin{tikzpicture}这很容易实现。唯一的限制是,当你启动我们将要定义的命令时,光标不能位于块的第一行(例如)。

现在,我们将重新定义“编译所选”命令来执行您想要的操作。

进入“选项”——>“选项界面”,双击“主菜单”项:

在此处输入图片描述

打开本地副本MainMenu.ini。在此文件中,将以下行替换为

  ITEM="Compile_Selected"
    CAPTION="Compile &Selected"
    CONFIG_FILTER="Default"
    IMAGE="CompileSel"
    MACRO="Exe('%b\Exec\Compile Selected.edt');"
    SHORTCUT="8312::Shift+F9"
    REQ_FILTER=`"%!M=TeX"*"%!m=TeX"`+
               `|"%!M=TeX:STY"|"%!M=TeX:AUX"|"%!m=TeX:STY"|"%!m=TeX:AUX"`
    REQ_DOCUMENT=1
    REQ_SELECTED_TEXT=1

  ITEM="Compile_Selected"
    CAPTION="Compile &Selected"
    CONFIG_FILTER="Default"
    IMAGE="CompileSel"
    MACRO="IfSel('0','=',!'ParUp;SelParDown');"+
          "Exe('%b\Exec\Compile Selected.edt');"
    SHORTCUT="8312::Shift+F9"
    REQ_FILTER=`"%!M=TeX"*"%!m=TeX"`+
               `|"%!M=TeX:STY"|"%!M=TeX:AUX"|"%!m=TeX:STY"|"%!m=TeX:AUX"`
    REQ_DOCUMENT=1
    // REQ_SELECTED_TEXT=1

和线条

  ITEM="TeX:Compile_Selected"
    CAPTION="Compile &Selected"
    CONFIG_FILTER="MiKTeX;TeX Live|Default"
    IMAGE="CompileSel"
    MACRO="Exe('%b\Exec\TeX\Compile Selected.edt');"
    SHORTCUT="8312::Shift+F9"
    REQ_FILTER=`"%!M=TeX"*"%!m=TeX"`+
               `|"%!M=TeX:STY"|"%!M=TeX:AUX"|"%!m=TeX:STY"|"%!m=TeX:AUX"`
    REQ_DOCUMENT=1
    REQ_SELECTED_TEXT=1

  ITEM="TeX:Compile_Selected"
    CAPTION="Compile &Selected"
    CONFIG_FILTER="MiKTeX;TeX Live|Default"
    IMAGE="CompileSel"
    MACRO="IfSel('0','=',!'ParUp;SelParDown');"+
          "Exe('%b\Exec\TeX\Compile Selected.edt');"
    SHORTCUT="8312::Shift+F9"
    REQ_FILTER=`"%!M=TeX"*"%!m=TeX"`+
               `|"%!M=TeX:STY"|"%!M=TeX:AUX"|"%!m=TeX:STY"|"%!m=TeX:AUX"`
    REQ_DOCUMENT=1
    // REQ_SELECTED_TEXT=1

此时按Shift+Ctrl+F9重新加载文件。

就是这样。

现在,当您启动命令“编译所选内容”(Shift+F9)时,其行为与以前选定文本时的行为相同。但是,当您没有选定文本时,它会抓取两个空行之间的块内容并进行编译。

答案2

最后我终于写出了一个 WinEdt 宏,它克服了 Karl Koeller 解决方案的缺点。这个宏是从Compile Selected.edt文件修改而来的。

// Compiles current paragraph in current TeX Document.

  Requires(20110504); // Requires this build of WinEdt to work properly
  // Already Running...
  IfConsoleRunning(!"ShowConsole(1);>
    Prompt('Another application is already running in WinEdt''s Console.');>
    ShowConsole(1);FocusConsole(1);Exit;");
  SaveDoc;

  PushTagsandRegisters;

  SetOK(1);  // Just in case ...
  SetErrorFlag(0);

  Assign('Compile-Flag','');
  Assign('Main_File','%!F');

  LetReg(7,'%P');
  LetReg(6,'%N');

  SaveFind;
  SetRegEx(1);
  SetFindStr("<>");
  SetFindinFilesCurrent(1);
  SearchReset;
  FindInFiles;
  RestoreFind;
  SetTracking(0);
  SetWrap(-1);
  FindNext(-4,-1);
  Loop(!|>
    GetFindItem(3,3);>
    IfOK(!'>
      IfNum(%!3+1,%!l,"<=",!"LetRegNum(4,%!3+1);","LetRegNum(5,%!3+1);Stop;");>
    ','Stop;');>
    FindNext(1,-1);|);
  //Prompt("%!l  %!4-%!5");
  LetReg(9,"");
  Loop(!|>
    IfNum(%!4,%!5,'<=',!'GetLine(3,%!5);InsertByIndex(9,"%!9","%!3%\");LetRegNum(5,%!5-1);'>
    ,'Stop');>
  |);
  //Prompt("%!9");
  RestoreWrap;
  SetTracking(1);

:Start:: ============================================================

  StartWorking("Compile current paragaph ...");

  // Create Temporary File using the same (unicode) format as the Main File %F...
  OpenOutput("%!7\%!6.tmp",0,0,0,"%F");  // Open temporary TeX file for writing
  WrL("%% -*- Mode: TeX -*-");
  Translate(2,"%!m","%!9",9);            // Translate Output?
  FindInString("%!9",!"<\\begin\{document\}",1,1,11);
  IfOK("JMP('Preamble_OK');");           // Main File already contains \begin{document}
  GetPreamble("\begin{document}",8);     // Get Preamble in Register 8
  // Default Preamble (if necessary add more packages terminated with %\>):
  IfOK(!'Relax;',!|LetReg(8,>
    !'\documentclass{article}%\'+>
    !'\usepackage{amsmath}%\'+>
  );|);
  Translate(2,"%!M","%!8",8);            // Translate Output?
  WrL("%!8");                            // Write String
  WrL("\begin{document}");               // LaTeX begin...
  WrL;                                   // Empty Line (just in case)
:Preamble_OK:: ======================================================
  WrL("%!9");                            // Write String
  WrL;                                   // Empty Line (just in case)
  WrL("\end{document}");                 // LaTeX end...
  CloseOutput;                           // Close temporary file

  SetMainFile("%!7\%!6.tmp");            // Reset the Main File

:PDF:: ==============================================================

  Exe('%b\Exec\TeX\PDFLaTeX.edt');
  IfStr("%$('Compile Status');",!"OK",!"<>",!"JMP('Cleanup');");
  IfFileExists("%P\%N.pdf",!"Relax;",!"JMP('Cleanup');");
  Exe('%b\Exec\PDF\PDF Search.edt');
  JMP('Cleanup');

:Cleanup:: ==========================================================

  SetMainFile("%$(|Main_File|);");       // Reset the Main File
  Exe("%b\Exec\%!C\ExeMode.edt");
  UpdateStatus;
  FocusConsole(-1);

  SetExitHandler;

  PopTagsandRegisters;
  StopWorking;
  Assign('Compile-Flag','');

End;

相关内容