我有一个用 perl 编写的脚本,它从 sql 数据库收集数据,然后在 latex 中生成打印报告。
我希望在脚本的乳胶部分放置一个 IF 循环,如果数据存在于 SQL 数据库中,则打印一组文本,如果不存在,则打印另一组文本。
看起来 etoolbox 在这里很有前途,但是它可以接受变量吗(我可以将其设置为任何值 - 1,0,T,F 等)?
我在网站上找到了这个例子,它展示了如何设置循环但没有变量(LaTeX 条件表达式)。
\newtoggle{paper}
设置为
\toggletrue{paper}
\togglefalse{paper}
如何使用它:
\iftoggle{paper}{%
% using paper
}{%
% electronic
}
编辑:我想知道我是否可以在 eftoolbox 切换中使用我脚本中先前的变量(例如 $myo_text)。
例如
\newtoggle{$myo_text}
或者还有其他方法吗? 是否有可能将变量带入脚本的 latex 部分来自 SQL 查询并在条件循环中使用它?
编辑 2:这是我的脚本中修剪过的乳胶块。刚才它可以很好地打印出这些 perl 变量($myo_test、$myo_reporter1 等)。
print FH <<END;
\\textbf{EXERCISE TOLERANCE TEST} \\newline
\\begin{small}
\\textbf{Stress Test:} $myo_test \\newline
\\textbf{Rest ECG:} $myx_rest_ecg \\newline
\\textbf{Stress ECG:} $myx_stress_ecg \\newline
\\textbf{Performed by:} $myx_performed1 \\newline
\\end{small}
\\textbf{Reported By:} $myo_reporter1 \\hspace{2em} \\textbf{Signature:}
\\end{document}
END
我想在这个乳胶块中放置一个循环,如果 $myo_text 为空白/空,则不会打印报告的这一部分。
答案1
LaTeX 不了解 perl 变量,你只需要编写正确的 latex。一般来说,最好在 perl 中测试,然后编写适当的 latex
就像是
if($myo_test !="") {
print FH <<END;
\\textbf{EXERCISE TOLERANCE TEST} \\newline
\\begin{small}
\\textbf{Stress Test:} $myo_test \\newline
\\textbf{Rest ECG:} $myx_rest_ecg \\newline
\\textbf{Stress ECG:} $myx_stress_ecg \\newline
\\textbf{Performed by:} $myx_performed1 \\newline
\\end{small}
\\textbf{Reported By:} $myo_reporter1 \\hspace{2em} \\textbf{Signature:}
END
}
但你可以使用任何乳胶测试为空例如\ifx\relax..\relax
并在乳胶中进行简单的测试
print FH <<END;
\\ifx\\relax$myo_test\\relax
\\else
\\textbf{EXERCISE TOLERANCE TEST} \\newline
\\begin{small}
\\textbf{Stress Test:} $myo_test \\newline
\\textbf{Rest ECG:} $myx_rest_ecg \\newline
\\textbf{Stress ECG:} $myx_stress_ecg \\newline
\\textbf{Performed by:} $myx_performed1 \\newline
\\end{small}
\\fi
\\textbf{Reported By:} $myo_reporter1 \\hspace{2em} \\textbf{Signature:}
\\end{document}
END
但无论哪种风格,LaTeX 访问 Perl 变量都是没有意义的,Perl 只是写出一个静态文件,以便稍后由 LaTeX 进行处理。