有没有办法在 LyX/Latex 中打开或关闭文本的某些部分?
我正在考虑拥有一个类似环境的东西(我们称之为“TL”,即“交通灯”)和一个参数,t
如果我在开始时设置例如t=0
(意味着灯显示“红色”),那么位于 TL 环境中的所有文本都不会显示在编译后的文档中 - 而如果我设置t=1
(“绿色”)它们就会显示出来?
(我问过就像是这样的环境遵循了 LyX 可能有特殊机制来做到这一点的想法 - 因此任何解决方案,不一定是通过环境“硬编码”的解决方案,只要它们易于实现,都是受欢迎的。)
答案1
Lyx 解决方案:
Lyx 可以插入branches
,即带有文本块的框,可以通过标签类型激活或停用。
在Document→ Settings→中Branches您可以定义多个分支并将(De)activate)它们放在列表中Available Branches
。
然后,在主屏幕中,您可以使用 Insert→将一些选定的文本分配给其中任何一个Branch,或者如果未选择任何文本,则创建一个新的空框。该框将标有分支的名称和 ✖ 或 ✔ 符号以显示(停用)状态。
为了简单起见,您还可以从“插入”菜单中定义分支,并通过在分支框的标签上单击鼠标右键来在上下文菜单中激活或取消激活分支,但您会发现仅通过“文档”菜单也可以方便地使用不同的颜色突出显示分支。
例如,在包含多项选择题的考试中,您可以在每个问题后插入一个“简答题”分支,显示正确选项,以及另一个“长答题”分支,显示正确选项并解释为什么这是正确答案。然后,您可以获得一份仅包含问题的 PDF 版考试,另一份仅包含简答题的 PDF 版考试,以便快速检查每份考试,甚至还有一份包含长答题的 PDF 版考试,用于学生反馈。
答案2
您可以使用etoolbox
建立boolean
一个true
false
\newbool{hidetrafficlight}
\setbool{hidetrafficlight}{false}
然后根据它所取的值,使用\AtBeginEnvironment
从到etoolbox
环境comment
使用comment
从verbatim
包裹
% set conditional behaviour of environment
\ifbool{hidetrafficlight}{\AtBeginEnvironment{trafficlight}{\comment}%
\AtEndEnvironment{trafficlight}{\endcomment}}{}
完成 MWE
\documentclass{article}
\usepackage{lipsum}
\usepackage{etoolbox} % for booleans and much more
\usepackage{verbatim} % for the comment environment
% setup a new boolean
\newbool{hidetrafficlight}
\setbool{hidetrafficlight}{false}
% new environment
\newenvironment{trafficlight}{}{}
% set conditional behaviour of environment
\ifbool{hidetrafficlight}{\AtBeginEnvironment{trafficlight}{\comment}%
\AtEndEnvironment{trafficlight}{\endcomment}}{}
\begin{document}
\subsection*{Traffic light environment}
\begin{trafficlight}
\lipsum[1]
\end{trafficlight}
\subsection*{After traffic light}
\lipsum[2]
\end{document}
答案3
在 LaTeX 中,一个好的解决方案是使用\if
和\fi
。这在其他环境中使用比创建一个全新的环境来打开和关闭文本位要强大得多:
\newif\iflongversion
%\longversiontrue %<<< Uncomment as required
%\longversionfalse %<<< Uncomment as required
Short version text...
\iflongversion
Long version text....
\fi