我的问题:
我必须编译一个 LaTeX 文件,其中包含一系列可能案例研究的一系列可能结果。由于我首先列出的结果并非\clistmapline
都有案例研究,因此我需要在创建该部分之前控制文件是否存在。我希望保持相同的列表,因为将来结果可能会增加,我只想包含一个控制语句来检查文件是否存在,如果文件存在,则执行某些任务(如果文件不存在,则不执行任何操作)。
在我的分析过程中,我在每个目录中创建了一个空文件,我期望在编译阶段将其用作“存在条件”,以向 LaTeX 传达必须创建某个部分的信息,但我发现空文件“不可扩展”。我不清楚可扩展是什么意思,我得到的结果是它\IfFileExists
无法正常工作(可扩展版本\InputIfFileExists
或\IfFileExists
)
伪代码:我需要的是类似这样的内容:
\clistmapinline{list1} {
IfFileExists{C:/desktop/folder #1/controlfile.out} {
\section{Section #1}
\clistmapinline{list2}
IfFileExists{C:/desktop/outcome/##1#1} {
\input{##1_#1.tex}
}
{
%else do nothing
}
}
}
我的代码(这不起作用,因为它不断返回错误未定义的控制序列和缺失\endcsname
插入)
% !TEX root = C:\Users\Filippo\Dropbox\smc\output\_report\loop_report.tex
\documentclass{article}
\usepackage{natbib}
\usepackage{expl3}
\usepackage{setspace}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{bookmark}
\ExplSyntaxOn
\cs_new_eq:NN \clistmapinline \clist_map_inline:nn
\ExplSyntaxOff
% -----------------------------------------
\newif\iffilename
\global\filenamefalse
\makeatletter
\newcommand\myunderscore{%
\iffilename
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi{\string_}{\textunderscore}%
}%
\makeatother
% -----------------------------------------
\begin{document}
\clistmapinline{ipc\myunderscore ruleoflaw, ipc\myunderscore politicalrights, ipc\myunderscore gender, ipc\myunderscore socprotection, ipc\myunderscore business, ipc\myunderscore health, ipc\myunderscore work, ipc\myunderscore edu, ipc\myunderscore security, ipc\myunderscore environment, ipc\myunderscore minority, ipc\myunderscore cvrights, ipc\myunderscore womenrights, ipc\myunderscore corrupt}{%
\IfFileExists{C:/Users/Filippo/Dropbox/smc/output/SYNTH_IPC/synth_#1/non_empty_folder.out}%
{
\section{SYNTH OUTCOME ON #1}%
\clistmapinline{AGO, ALB, ARE, ARG, ARM, AUS, AUT, AZE, BDI, BEL, BEN, BFA, BGD, BGR, BHR, BHS, BIH, BLR, BLZ, BOL, BRA, BRB, BRN, BTN, BWA, CAF, CAN, CHE, CHL, CHN, CIV, CMR, COD, COG, COL, COM, CPV, CRI, CYP, CZE, DEU, DJI, DNK, DOM, DZA, ECU, EGY, ESP, EST, ETH, FIN, FJI, FRA, GAB, GBR, GEO, GHA, GIN, GMB, GNB, GNQ, GRC, GRD, GTM, HND, HRV, HTI, HUN, IDN, IND, IRL, IRN, IRQ, ISL, ISR, ITA, JAM, JOR, JPN KAZ KEN KGZ KHM KOR KWT LAO LBN LBR LCA LKA, LSO, LTU, LUX, LVA, MAR, MDA, MDG, MDV, MEX, MKD, MLI, MLT, MMR, MNG, MOZ, MRT, MUS, MWI, MYS, NAM, NER, NGA, NIC NLD NOR NPL NZL OMN PAK PAN PER PHL POL PRT, PRY, QAT, ROU, RUS, RWA, SAU, SEN, SGP, SLE, SLV, SRB, STP, SUR, SVK, SVN, SWE, SWZ, SYC, SYR, TCD, TGO, THA, TJK, TKM, TTO, TUN, TUR, TWN, TZA, UGA, UKR, URY, USA, UZB, VCT, VEN, VNM, YEM, ZAF, ZMB, ZWE}{%
IfFileExists{./SITH_DATAOUT/##1_#1.tex}{
\subsection{Subsection ##1}%
\input{##1_#1.tex}%
} % IfFileexists 2 ends here
{% ELSE 2 DO NOTHING
}%
} % \clistmapline 2 ends here
}% IFFileExists 1 ends here
{ %ELSE 1 DO NOTHING
}%
}%clismapinline 1 ends here
\end{document}
请注意,我想要输入的文件包括 TeX 文件(如例所示)和图形(.eps
),分别以复合名称subsection_section.tex
和存储.eps
。
(此问题如下这个。感谢@frougon,我可以迭代结果和案例研究,我所缺少的是进行工作IfFileExists
。)
答案1
不可否认,这有点棘手。您的代码有两个问题。很抱歉这么说,但第一个是您的错。:-) 您发现下划线不能用于普通文本以产生下划线,因为它对 TeX 有特殊含义。由于您在 1) 文件存在测试和文件输入命令中使用包含下划线的文件名,以及 2) 在普通文本中使用包含下划线的文件名,并且您希望两者都来自相同输入(由于自动化),你使用了\myunderscore
来自Ulrich Diez 的回答。此宏根据 TeX 条件展开为\string_
或展开为,该条件在 Ulrich Diez 的代码中定义。适用于文件存在性测试和文件输入(虽然普通下划线就足够了),也适用于普通文本。但是,如果您希望此宏正确执行其工作,则需要使用\textunderscore
\iffilename
\string_
\textunderscore
\myunderscore
你自己 \filenametrue
或filenamefalse
选择适当的下划线类型!除非您定义命令本身使用\filenametrue
或可能使用的filenamefalse
位置(下面的代码就是这样)。所以,这里的问题是你忘记在适当的位置调用和(即,在文件存在测试之前、在文件输入之前以及在普通文本中使用之前)。\myunderscore
\filenametrue
filenamefalse
\myunderscore
第二个问题更难。当宏中\IfFileExists
有字符时,它的表现不太好#
then 子句或其else 子句。在第一级,您可以通过将某些#
字符加倍来设法解决,但在第二级\IfFileExists
测试中,由于#
字符被两级使用\clistmapinline
,这变得非常混乱。您可以通过将内循环代码隐藏在宏中来解决这个问题,从而使内循环##1
对外循环不可见\IfFileExists
。但我更喜欢基于expl3
和的方法\file_if_exist:nTF
,因为结果在使用的数量方面更可预测#
,也更易读——定义 T、F 和 TF 变体非常容易,我的代码就是这样做的。
您现在可能想知道这些 T、F 和 TF 变体是什么。好吧,在您的代码中,您需要放置一堆空括号{}
(后面跟着注释以避免太多混淆),因为别的您不需要的子句。好吧,expl3
有一个更好的方法。每当您有一个条件时(我们称之为)\iffoo:n
,其中n
意味着它需要一个“正常”参数——它可以有三种变体:
\iffoo:nTF {argument} {true code} {false code}
\iffoo:nT {argument} {true code}
\iffoo:nF {argument} {false code}
如果你需要真的和错误的分支,则使用TF
变体。如果您只需要真的分支,您可以使用T
变体并省去一对空括号。类似地,如果您只需要错误的分支,您可以使用F
变体。这通常会产生比总是需要{true code}
和{false code}
分支的旧方法更易读的代码。
在这种情况下,我为您实现了一个条件,它有三个变体:\filippo_file_if_exist:nTF
,\filippo_file_if_exist:nT
和\filippo_file_if_exist:nF
,以及它们各自的文档级对应项\MyFileIfExistTF
,\MyFileIfExistT
和\MyFileIfExistF
。对于您的特定示例,只T
需要变体,但您可能会发现其他变体对将来的工作很有用。这三个宏使用 的expl3
命令来执行文件输入,而无需考虑字符\file_if_exist:nTF
的讨厌行为,并且在测试之前以及测试结果已知时自动为您调用。因此,它们解决了上述两个问题,而无需人工干预。\IfFileExists
#
\filenametrue
\filenamefalse
为了方便您,我还定义了一个非常简单的\MyInput
宏,它开始一个新的 TeX 组,\filenametrue
在该组内执行操作,输入指定的文件并关闭该组。这又因为下划线而变得有用。但有一个警告:如果输入文件是\myunderscore
普通文本,您应该\filenamefalse
自己使用里面输入文件(我不知道是否有可能以某种方式注册\filenamefalse
,以便\input
其expl3
对应方\file_input:n
在文件内容之前将此标记插入输入流中)。如果你不明白,这很简单:如果你将其用作\myunderscore
普通文本(即用于排版)里面您输入的文件,最好以 开头\filenamefalse
。这是因为我的\MyInput
宏在输入您的文件之前设置\filenametrue
,并且本身无法\filenamefalse
在文件内写入:
\NewDocumentCommand \MyInput { m }
{
\group_begin:
\filenametrue
\file_input:n {#1}
\group_end:
}
记住这些,一切都会顺利进行。对于您以后的示例,请将每个级别的项目限制为两到三个:我们不需要 AGO、ALB、ARE、ARG、ARM、AUS、AUT、AZE、BDI、BEL、BEN、BFA、BGD、BGR、BHR、BHS、BIH、BLR、BLZ、BOL、BRA、BRB、BRN 等全部来了解您想要做什么!而且由于我必须创建测试文件来验证代码,简单的自解释名称和少量文件使事情更容易准备,也更容易让读者理解(例如,简化您的问题以匹配我下面使用的项目是个好主意)。
这是代码。:-)
\documentclass{article}
\usepackage{xparse}
\newif\iffilename % new conditionals are initially false
\makeatletter
\newcommand\myunderscore{%
\iffilename
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{\string_}{\textunderscore}%
}%
\makeatother
\ExplSyntaxOn
\cs_new_eq:NN \clistmapinline \clist_map_inline:nn
\prg_new_protected_conditional:Npnn \filippo_file_if_exist:n #1 { T, F, TF }
{
\group_begin:
\filenametrue
\file_if_exist:nTF {#1}
{ \group_end: \prg_return_true: }
{ \group_end: \prg_return_false: }
}
\NewDocumentCommand \MyFileIfExistTF { m }
{ \filippo_file_if_exist:nTF {#1} }
\NewDocumentCommand \MyFileIfExistT { m }
{ \filippo_file_if_exist:nT {#1} }
\NewDocumentCommand \MyFileIfExistF { m }
{ \filippo_file_if_exist:nF {#1} }
\NewDocumentCommand \MyInput { m }
{
\group_begin:
\filenametrue
\file_input:n {#1}
\group_end:
}
\ExplSyntaxOff
\begin{document}
\clistmapinline{ipc\myunderscore ruleoflaw, ipc\myunderscore politicalrights}
{%
\MyFileIfExistT{/path/to/folder #1/controlfile.out}
{%
\section{Synth outcome on #1}%
\clistmapinline{AGO, ALB, ARE}
{%
\MyFileIfExistT{/path/to/outcome/##1_#1.tex}
{%
\MyInput{/path/to/outcome/##1_#1.tex}%
}%
}%
}%
}%
\end{document}
注意:我在此示例中省略的几个行尾百分号均位于不会引起任何虚假空格的位置,仅供参考。但出于安全考虑,您可以随意添加它们 — 这样做不会造成任何损害,而且绝对没有问题。
controlfile.out
当目录folder ipc_ruleoflaw
和中都有一个文件,并且内循环考虑的folder ipc_politicalrights
所有文件都存在于目录中时,输出如下:.tex
outcome
例如ARE_ipc_ruleoflaw.tex
,如果从目录中删除,ALB_ipc_politicalrights.tex
则输出将变为:AGO_ipc_politicalrights.tex
outcome
controlfile.out
如果进一步从目录中删除该文件folder ipc_ruleoflaw
,您将获得仅剩一个部分的预期输出:
答案2
您的代码存在一些问题:
在使用之前,\myunderscore
您需要确保开关\iffilename
已正确切换。
\filenametrue
表示的后续实例\myunderscore
用于创建下划线,下划线是文件名的一部分,而下划线又是系统/机器上执行的某项指令的一部分,即\IfFileExists
或\input
。
\filenamefalse
表示的后续实例\myunderscore
用于将包含下划线的文本短语放入 .pdf 文件 / .dvi 文件中。
看一下顺序:
\clistmapinline{AGO, ALB, ARE, ARG, ARM, AUS, AUT, AZE, BDI, BEL, BEN, BFA, BGD, BGR, BHR, BHS, BIH, BLR, BLZ, BOL, BRA, BRB, BRN, BTN, BWA, CAF, CAN, CHE, CHL, CHN, CIV, CMR, COD, COG, COL, COM, CPV, CRI, CYP, CZE, DEU, DJI, DNK, DOM, DZA, ECU, EGY, ESP, EST, ETH, FIN, FJI, FRA, GAB, GBR, GEO, GHA, GIN, GMB, GNB, GNQ, GRC, GRD, GTM, HND, HRV, HTI, HUN, IDN, IND, IRL, IRN, IRQ, ISL, ISR, ITA, JAM, JOR, JPN KAZ KEN KGZ KHM KOR KWT LAO LBN LBR LCA LKA, LSO, LTU, LUX, LVA, MAR, MDA, MDG, MDV, MEX, MKD, MLI, MLT, MMR, MNG, MOZ, MRT, MUS, MWI, MYS, NAM, NER, NGA, NIC NLD NOR NPL NZL OMN PAK PAN PER PHL POL PRT, PRY, QAT, ROU, RUS, RWA, SAU, SEN, SGP, SLE, SLV, SRB, STP, SUR, SVK, SVN, SWE, SWZ, SYC, SYR, TCD, TGO, THA, TJK, TKM, TTO, TUN, TUR, TWN, TZA, UGA, UKR, URY, USA, UZB, VCT, VEN, VNM, YEM, ZAF, ZMB, ZWE}
似乎许多项目末尾的逗号都缺失了。
JPN KAZ KEN KGZ KHM KOR KWT LAO LBN LBR LCA LKA,
例如,对列表中单个元素取部分序列。
我想这不是故意的。不管怎样。无论如何,这会导致问题:该部分序列被视为文件名的组成部分。该组成部分包含空格。因此\IfFileExist
必须处理包含空格的文件名。这会导致各种不良影响。在某些平台上,只要整个文件名+文件路径用双引号 ( ) 括起来,它就可以正常工作"
:
% !TEX root = C:\Users\Filippo\Dropbox\smc\output\_report\loop_report.tex
\documentclass{article}
\usepackage{natbib}
\usepackage{expl3}
\usepackage{setspace}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{bookmark}
\ExplSyntaxOn
\cs_new_eq:NN \clistmapinline \clist_map_inline:nn
\ExplSyntaxOff
% -----------------------------------------
\newif\iffilename
\global\filenamefalse
\makeatletter
\newcommand\myunderscore{%
\iffilename
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi{_}{\textunderscore}%
}%
\newcommand\firstofone[1]{#1}%
\newcommand\noneofone[1]{}%
\makeatother
% -----------------------------------------
\begin{document}
\clistmapinline{%
ipc\myunderscore ruleoflaw, ipc\myunderscore politicalrights, ipc\myunderscore gender,
ipc\myunderscore socprotection, ipc\myunderscore business, ipc\myunderscore health,
ipc\myunderscore work, ipc\myunderscore edu, ipc\myunderscore security,
ipc\myunderscore environment, ipc\myunderscore minority, ipc\myunderscore cvrights,
ipc\myunderscore womenrights, ipc\myunderscore corrupt%
}{%
\global\filenametrue
\IfFileExists{%
"C:/Users/Filippo/Dropbox/smc/output/SYNTH_IPC/synth_#1/non_empty_folder.out"%
}%
{%
\global\filenamefalse
\section{SYNTH OUTCOME ON #1}%
\clistmapinline{%
AGO, ALB, ARE, ARG, ARM, AUS, AUT, AZE, BDI, BEL, BEN, BFA, BGD, BGR, BHR, BHS, BIH,
BLR, BLZ, BOL, BRA, BRB, BRN, BTN, BWA, CAF, CAN, CHE, CHL, CHN, CIV, CMR, COD, COG,
COL, COM, CPV, CRI, CYP, CZE, DEU, DJI, DNK, DOM, DZA, ECU, EGY, ESP, EST, ETH, FIN,
FJI, FRA, GAB, GBR, GEO, GHA, GIN, GMB, GNB, GNQ, GRC, GRD, GTM, HND, HRV, HTI, HUN,
IDN, IND, IRL, IRN, IRQ, ISL, ISR, ITA, JAM, JOR, JPN, KAZ, KEN, KGZ, KHM, KOR, KWT,
LAO, LBN, LBR, LCA, LKA, LSO, LTU, LUX, LVA, MAR, MDA, MDG, MDV, MEX, MKD, MLI, MLT,
MMR, MNG, MOZ, MRT, MUS, MWI, MYS, NAM, NER, NGA, NIC, NLD, NOR, NPL, NZL, OMN, PAK,
PAN, PER, PHL, POL, PRT, PRY, QAT, ROU, RUS, RWA, SAU, SEN, SGP, SLE, SLV, SRB, STP,
SUR, SVK, SVN, SWE, SWZ, SYC, SYR, TCD, TGO, THA, TJK, TKM, TTO, TUN, TUR, TWN, TZA,
UGA, UKR, URY, USA, UZB, VCT, VEN, VNM, YEM, ZAF, ZMB, ZWE
}{%
\global\filenametrue
\IfFileExists{"./SITH_DATAOUT/##1_#1.tex"}%
{%
\global\filenamefalse
\subsection{Subsection ##1}%
\global\filenametrue
\input{"./SITH_DATAOUT/##1_#1.tex"}%
}{}% Arguments of second \IfFileExists end here.
}% Second \clistmapinline ends here.
}{}% Arguments of first \IfFileExists end here.
}% First \clistmapinline ends here.
\global\filenamefalse
\end{document}
这种方式\IfFileExists
也会导致其他问题:\IfFileExists
在内部从其第二个和第三个参数定义临时宏。如果这些参数包含连续的哈希值,则在扩展这些临时宏时,这些哈希值的数量可能会减半。因此,我建议不要直接将内容放入第二个和第三个参数中,而是使用\firstofone
/ \noneofone
:
% !TEX root = C:\Users\Filippo\Dropbox\smc\output\_report\loop_report.tex
\documentclass{article}
\usepackage{natbib}
\usepackage{expl3}
\usepackage{setspace}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{bookmark}
\ExplSyntaxOn
\cs_new_eq:NN \clistmapinline \clist_map_inline:nn
\ExplSyntaxOff
% -----------------------------------------
\newif\iffilename
\global\filenamefalse
\makeatletter
\newcommand\myunderscore{%
\iffilename
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi{_}{\textunderscore}%
}%
\newcommand\firstofone[1]{#1}%
\newcommand\noneofone[1]{}%
\makeatother
% -----------------------------------------
\begin{document}
\clistmapinline{%
ipc\myunderscore ruleoflaw, ipc\myunderscore politicalrights, ipc\myunderscore gender,
ipc\myunderscore socprotection, ipc\myunderscore business, ipc\myunderscore health,
ipc\myunderscore work, ipc\myunderscore edu, ipc\myunderscore security,
ipc\myunderscore environment, ipc\myunderscore minority, ipc\myunderscore cvrights,
ipc\myunderscore womenrights, ipc\myunderscore corrupt%
}{%
\global\filenametrue
\IfFileExists{%
"C:/Users/Filippo/Dropbox/smc/output/SYNTH_IPC/synth_#1/non_empty_folder.out"%
}%
{\firstofone}{\noneofone}%
{%
\global\filenamefalse
\section{SYNTH OUTCOME ON #1}%
\clistmapinline{%
AGO, ALB, ARE, ARG, ARM, AUS, AUT, AZE, BDI, BEL, BEN, BFA, BGD, BGR, BHR, BHS, BIH,
BLR, BLZ, BOL, BRA, BRB, BRN, BTN, BWA, CAF, CAN, CHE, CHL, CHN, CIV, CMR, COD, COG,
COL, COM, CPV, CRI, CYP, CZE, DEU, DJI, DNK, DOM, DZA, ECU, EGY, ESP, EST, ETH, FIN,
FJI, FRA, GAB, GBR, GEO, GHA, GIN, GMB, GNB, GNQ, GRC, GRD, GTM, HND, HRV, HTI, HUN,
IDN, IND, IRL, IRN, IRQ, ISL, ISR, ITA, JAM, JOR, JPN, KAZ, KEN, KGZ, KHM, KOR, KWT,
LAO, LBN, LBR, LCA, LKA, LSO, LTU, LUX, LVA, MAR, MDA, MDG, MDV, MEX, MKD, MLI, MLT,
MMR, MNG, MOZ, MRT, MUS, MWI, MYS, NAM, NER, NGA, NIC, NLD, NOR, NPL, NZL, OMN, PAK,
PAN, PER, PHL, POL, PRT, PRY, QAT, ROU, RUS, RWA, SAU, SEN, SGP, SLE, SLV, SRB, STP,
SUR, SVK, SVN, SWE, SWZ, SYC, SYR, TCD, TGO, THA, TJK, TKM, TTO, TUN, TUR, TWN, TZA,
UGA, UKR, URY, USA, UZB, VCT, VEN, VNM, YEM, ZAF, ZMB, ZWE
}{%
\global\filenametrue
\IfFileExists{"./SITH_DATAOUT/##1_#1.tex"}%
{\firstofone}{\noneofone}%
{%
\global\filenamefalse
\subsection{Subsection ##1}%
\global\filenametrue
\input{"./SITH_DATAOUT/##1_#1.tex"}%
}% Argument of second \firstofone/\noneofone ends here.
}% Second \clistmapinline ends here.
}% Argument of first \firstofone/\noneofone ends here.
}% First \clistmapinline ends here.
\global\filenamefalse
\end{document}
也许您可以\IfFileExists
通过推动另一个\if
-switch 来省略一个 -test,该 -switch 在第二个循环中指示是否\section
已经放置:
% !TEX root = C:\Users\Filippo\Dropbox\smc\output\_report\loop_report.tex
\documentclass{article}
\usepackage{natbib}
\usepackage{expl3}
\usepackage{setspace}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{bookmark}
\ExplSyntaxOn
\cs_new_eq:NN \clistmapinline \clist_map_inline:nn
\ExplSyntaxOff
% -----------------------------------------
\newif\iffilename
\global\filenamefalse
\makeatletter
\newcommand\myunderscore{%
\iffilename
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi{_}{\textunderscore}%
}%
\newcommand\firstofone[1]{#1}%
\newcommand\noneofone[1]{}%
\newif\ifSectionAlreadyPlaced
\global\SectionAlreadyPlacedfalse
\makeatother
% -----------------------------------------
\begin{document}
\clistmapinline{%
ipc\myunderscore ruleoflaw, ipc\myunderscore politicalrights, ipc\myunderscore gender,
ipc\myunderscore socprotection, ipc\myunderscore business, ipc\myunderscore health,
ipc\myunderscore work, ipc\myunderscore edu, ipc\myunderscore security,
ipc\myunderscore environment, ipc\myunderscore minority, ipc\myunderscore cvrights,
ipc\myunderscore womenrights, ipc\myunderscore corrupt%
}{%
\global\SectionAlreadyPlacedfalse
\clistmapinline{%
AGO, ALB, ARE, ARG, ARM, AUS, AUT, AZE, BDI, BEL, BEN, BFA, BGD, BGR, BHR, BHS, BIH,
BLR, BLZ, BOL, BRA, BRB, BRN, BTN, BWA, CAF, CAN, CHE, CHL, CHN, CIV, CMR, COD, COG,
COL, COM, CPV, CRI, CYP, CZE, DEU, DJI, DNK, DOM, DZA, ECU, EGY, ESP, EST, ETH, FIN,
FJI, FRA, GAB, GBR, GEO, GHA, GIN, GMB, GNB, GNQ, GRC, GRD, GTM, HND, HRV, HTI, HUN,
IDN, IND, IRL, IRN, IRQ, ISL, ISR, ITA, JAM, JOR, JPN, KAZ, KEN, KGZ, KHM, KOR, KWT,
LAO, LBN, LBR, LCA, LKA, LSO, LTU, LUX, LVA, MAR, MDA, MDG, MDV, MEX, MKD, MLI, MLT,
MMR, MNG, MOZ, MRT, MUS, MWI, MYS, NAM, NER, NGA, NIC, NLD, NOR, NPL, NZL, OMN, PAK,
PAN, PER, PHL, POL, PRT, PRY, QAT, ROU, RUS, RWA, SAU, SEN, SGP, SLE, SLV, SRB, STP,
SUR, SVK, SVN, SWE, SWZ, SYC, SYR, TCD, TGO, THA, TJK, TKM, TTO, TUN, TUR, TWN, TZA,
UGA, UKR, URY, USA, UZB, VCT, VEN, VNM, YEM, ZAF, ZMB, ZWE
}{%
\global\filenametrue
\IfFileExists{"./SITH_DATAOUT/##1_#1.tex"}%
{\firstofone}{\noneofone}{}%
{%
\global\filenamefalse
\allowbreak % something that may trigger a page-break before the following
% \section/\subsection.
\ifSectionAlreadyPlaced
\else
\global\SectionAlreadyPlacedtrue
%\uppercase{%
\section{SYNTH OUTCOME ON #1}%
%}%
\fi
\subsection{Subsection ##1}%
\global\filenametrue
\input{"./SITH_DATAOUT/##1_#1.tex"}%
}% Argument of \firstofone/\noneofone ends here.
}% Second \clistmapinline ends here.
}% First \clistmapinline ends here.
\global\filenamefalse
\end{document}