如何让 TeXstudio 知道定义的变量?

如何让 TeXstudio 知道定义的变量?

我的 LaTeX 文档由许多文件组成,.tex这些文件分布在分层目录结构中。如下所示:

> myBook.tex
> myBook_structure.tex

> part1_Introduction
    |
    |--- Introduction_to_FreeRTOS
    |       |-- someFile.tex
    |       '-- someFile.tex
    |
    '--- How_to_use_FreeRTOS
            |-- someFile.tex
            '-- someFile.tex

> part2_FreeRTOS_examples
    |
    |--- First_example
    |       |-- someFile.tex
    |       '-- someFile.tex
    |
    '--- Second_Example
            |-- someFile.tex
            '-- someFile.tex
...

myBook_structure.tex文件跟踪整个项目结构。我通过定义目录路径来实现这一点:

    %% myBook_structure.tex
    %% --------------------
    \def\part1ch1{./part1_Introduction/Introduction_to_FreeRTOS}
    \def\part1ch2{./part1_Introduction/How_to_use_FreeRTOS}
    \def\part2ch1{./part2_FreeRTOS_examples/First_example}
    \def\part2ch2{./part2_FreeRTOS_examples/Second_example}
    ...

现在我可以使用这些目录路径来包含特定.tex文件:

    %% myBook.tex
    %% -----------

    \input{./myBook_structure}
    ..
    \begin{document}
        ..
        %% Include a file from chapter 1 within part 1:
        \include{\part1ch1/someFile}
        %% Include a file from chapter 2 within part 1:
        \include{\part1ch2/someFile}
        ..
    \end{document}

这非常方便。假设我将目录名称更改Introduction_to_FreeRTOSFreeRTOS_intro。我所需要做的就是更改文件中的一行myBook_structure.tex

    %% myBook_structure.tex
    %% --------------------
    \def\part1ch1{./part1_Introduction/FreeRTOS_intro} %% <- this line changed
    \def\part1ch2{./part1_Introduction/How_to_use_FreeRTOS}
    ... all other lines remain the same

它运行完美。项目编译时没有错误,并按预期提供 pdf 文档。即使在 TeXstudio 中也是如此。我只需单击“编译”按钮,它就会输出预期的 pdf 文档。

但有一个问题。TeXstudio 在显示左侧的项目树时有点困惑。TeXstudio 不会展开宏\part1ch1,也不知道在哪里查找文件。TeXstudio 左侧边缘的项目树现在完全没用了 - 我无法再从一个文件跳转到另一个文件。

在此处输入图片描述

我该如何解决这个问题,以便可以继续使用我最喜欢的 LaTeX IDE?

编辑:

显然,LaTeX 不接受包含数字的定义关键字。因此,以下代码不被接受:

    \def\part1ch1{...}

但这是可以接受的:

    \def\myFirstChapter{...}  %% <- no digits in name 'myFirstChapter'

这个不幸的事实使我建立整洁文档结构的计划更加困难。任何有关此问题的帮助都将不胜感激。

答案1

如果你

\def\part1ch1{./part1_Introduction/Introduction_to_FreeRTOS}
\def\part1ch2{./part1_Introduction/How_to_use_FreeRTOS}

那么第二个\def会覆盖第一个,如果你尝试

\part1ch1

你收到错误消息

! Use of \part doesn't match its definition.

因为您实际上正在(重新)定义\part,这显然不是您想要的。

\def如果您不完全清楚自己在做什么,请避免。

其实比这简单多了。你的myBook_structure.tex文件可以

\makeatletter
\newcommand{\namedir}[2]{\@namedef{kmuller@#1}{#2}}
\newcommand{\usedir}[1]{\@nameuse{kmuller@#1}}
\makeatother

\namedir{part1ch1}{./part1_Introduction/Introduction_to_FreeRTOS}
\namedir{part1ch2}{./part1_Introduction/How_to_use_FreeRTOS}
\namedir{part2ch1}{./part2_FreeRTOS_examples/First_example}
\namedir{part2ch2}{./part2_FreeRTOS_examples/Second_example}

在文档中你可以说

\input{./myBook_structure}

\begin{document}

%% Include a file from chapter 1 within part 1:
\input{\usedir{part1ch1}/someFile}
%% Include a file from chapter 2 within part 1:
\input{\usedir{part1ch2}/someFile}

\end{document}

(请注意,\include由于多种原因,这不是正确的工具。)

相关内容