academia-mcp 1.3.0__py3-none-any.whl → 1.4.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
academia_mcp/files.py CHANGED
@@ -5,6 +5,7 @@ from pathlib import Path
5
5
  DIR_PATH = Path(__file__).parent
6
6
  ROOT_PATH = DIR_PATH.parent
7
7
  DEFAULT_WORKSPACE_DIR_PATH: Path = DIR_PATH / "workdir"
8
+ DEFAULT_LATEX_TEMPLATES_DIR_PATH: Path = DIR_PATH / "latex_templates"
8
9
 
9
10
 
10
11
  class WorkspaceDirectory:
@@ -0,0 +1,398 @@
1
+ % Partial rewrite of the LaTeX2e package for submissions to the
2
+ % Open Conference of AI Agents for Science (agents4science):
3
+ %
4
+ % - Based on the NeurIPS 2025 style file by Roman Garnett et al.
5
+ % - Style modified for visual distinction (e.g., title rule)
6
+ % - Conference name, year, and details updated
7
+ % - Track options simplified for a general conference
8
+ %
9
+ % Last revision: July 2025
10
+
11
+ \NeedsTeXFormat{LaTeX2e}
12
+ \ProvidesPackage{agents4science_2025}[2025/07/22 agents4science 2025 submission/camera-ready style file]
13
+
14
+ % declare final option, which creates camera-ready copy
15
+ \newif\if@agentsfinal\@agentsfinalfalse
16
+ \DeclareOption{final}{
17
+ \@agentsfinaltrue
18
+ \@anonymousfalse
19
+ }
20
+
21
+ % declare nonatbib option, which does not load natbib in case of
22
+ % package clash (users can pass options to natbib via
23
+ % \PassOptionsToPackage)
24
+ \newif\if@natbib\@natbibtrue
25
+ \DeclareOption{nonatbib}{
26
+ \@natbibfalse
27
+ }
28
+
29
+ % declare preprint option, which creates a preprint version ready for
30
+ % upload to, e.g., arXiv
31
+ \newif\if@preprint\@preprintfalse
32
+ \DeclareOption{preprint}{
33
+ \@preprinttrue
34
+ \@anonymousfalse
35
+ }
36
+
37
+ % determine the track of the paper in camera-ready mode
38
+ \newif\if@main\@maintrue
39
+ \DeclareOption{main}{
40
+ \@maintrue
41
+ \newcommand{\@trackname}{\@agentsordinal\ Open Conference of AI Agents for Science (agents4science \@agentsyear).}
42
+ }
43
+
44
+ % For anonymous or non-anonymous
45
+ \newif\if@anonymous\@anonymoustrue
46
+
47
+ % For workshop papers
48
+ \newcommand{\@workshoptitle}{}
49
+ \newcommand{\workshoptitle}[1]{\renewcommand{\@workshoptitle}{#1}}
50
+
51
+ \newif\if@workshop\@workshopfalse
52
+ \DeclareOption{sglblindworkshop}{
53
+ \@workshoptrue
54
+ \@anonymousfalse
55
+ \newcommand{\@trackname}{\@agentsordinal\ Open Conference on AI Agents for Science (agents4science \@agentsyear) Workshop: \@workshoptitle.}
56
+ }
57
+ \DeclareOption{dblblindworkshop}{
58
+ \@workshoptrue
59
+ \newcommand{\@trackname}{\@agentsordinal\ Open Conference on AI Agents for Science (agents4science \@agentsyear) Workshop: \@workshoptitle.}
60
+ }
61
+
62
+ \ProcessOptions\relax
63
+
64
+ % fonts
65
+ \renewcommand{\rmdefault}{ptm}
66
+ \renewcommand{\sfdefault}{phv}
67
+
68
+ % change this every year for notice string at bottom
69
+ \newcommand{\@agentsordinal}{1st}
70
+ \newcommand{\@agentsyear}{2025}
71
+ \newcommand{\@agentslocation}{Virtual}
72
+
73
+ % acknowledgments
74
+ \usepackage{environ}
75
+ \newcommand{\acksection}{\section*{Acknowledgments and Disclosure of Funding}}
76
+ \NewEnviron{ack}{%
77
+ \acksection
78
+ \BODY
79
+ }
80
+
81
+ % load natbib unless told otherwise
82
+ \if@natbib
83
+ \RequirePackage{natbib}
84
+ \fi
85
+
86
+ % set page geometry
87
+ \usepackage[verbose=true,letterpaper]{geometry}
88
+ \AtBeginDocument{
89
+ \newgeometry{
90
+ textheight=9in,
91
+ textwidth=5.5in,
92
+ top=1in,
93
+ headheight=12pt,
94
+ headsep=25pt,
95
+ footskip=30pt
96
+ }
97
+ \@ifpackageloaded{fullpage}
98
+ {\PackageWarning{agents4science_2025}{fullpage package not allowed! Overwriting formatting.}}
99
+ {}
100
+ }
101
+
102
+ \widowpenalty=10000
103
+ \clubpenalty=10000
104
+ \flushbottom
105
+ \sloppy
106
+
107
+ % font sizes with reduced leading
108
+ \renewcommand{\normalsize}{%
109
+ \@setfontsize\normalsize\@xpt\@xipt
110
+ \abovedisplayskip 7\p@ \@plus 2\p@ \@minus 5\p@
111
+ \abovedisplayshortskip \z@ \@plus 3\p@
112
+ \belowdisplayskip \abovedisplayskip
113
+ \belowdisplayshortskip 4\p@ \@plus 3\p@ \@minus 3\p@
114
+ }
115
+ \normalsize
116
+ \renewcommand{\small}{%
117
+ \@setfontsize\small\@ixpt\@xpt
118
+ \abovedisplayskip 6\p@ \@plus 1.5\p@ \@minus 4\p@
119
+ \abovedisplayshortskip \z@ \@plus 2\p@
120
+ \belowdisplayskip \abovedisplayskip
121
+ \belowdisplayshortskip 3\p@ \@plus 2\p@ \@minus 2\p@
122
+ }
123
+ \renewcommand{\footnotesize}{\@setfontsize\footnotesize\@ixpt\@xpt}
124
+ \renewcommand{\scriptsize}{\@setfontsize\scriptsize\@viipt\@viiipt}
125
+ \renewcommand{\tiny}{\@setfontsize\tiny\@vipt\@viipt}
126
+ \renewcommand{\large}{\@setfontsize\large\@xiipt{14}}
127
+ \renewcommand{\Large}{\@setfontsize\Large\@xivpt{16}}
128
+ \renewcommand{\LARGE}{\@setfontsize\LARGE\@xviipt{20}}
129
+ \renewcommand{\huge}{\@setfontsize\huge\@xxpt{23}}
130
+ \renewcommand{\Huge}{\@setfontsize\Huge\@xxvpt{28}}
131
+
132
+ % sections with less space
133
+ \providecommand{\section}{}
134
+ \renewcommand{\section}{%
135
+ \@startsection{section}{1}{\z@}%
136
+ {-2.0ex \@plus -0.5ex \@minus -0.2ex}%
137
+ { 1.5ex \@plus 0.3ex \@minus 0.2ex}%
138
+ {\large\bf\raggedright}%
139
+ }
140
+ \providecommand{\subsection}{}
141
+ \renewcommand{\subsection}{%
142
+ \@startsection{subsection}{2}{\z@}%
143
+ {-1.8ex \@plus -0.5ex \@minus -0.2ex}%
144
+ { 0.8ex \@plus 0.2ex}%
145
+ {\normalsize\bf\raggedright}%
146
+ }
147
+ \providecommand{\subsubsection}{}
148
+ \renewcommand{\subsubsection}{%
149
+ \@startsection{subsubsection}{3}{\z@}%
150
+ {-1.5ex \@plus -0.5ex \@minus -0.2ex}%
151
+ { 0.5ex \@plus 0.2ex}%
152
+ {\normalsize\bf\raggedright}%
153
+ }
154
+ \providecommand{\paragraph}{}
155
+ \renewcommand{\paragraph}{%
156
+ \@startsection{paragraph}{4}{\z@}%
157
+ {1.5ex \@plus 0.5ex \@minus 0.2ex}%
158
+ {-1em}%
159
+ {\normalsize\bf}%
160
+ }
161
+ \providecommand{\subparagraph}{}
162
+ \renewcommand{\subparagraph}{%
163
+ \@startsection{subparagraph}{5}{\z@}%
164
+ {1.5ex \@plus 0.5ex \@minus 0.2ex}%
165
+ {-1em}%
166
+ {\normalsize\bf}%
167
+ }
168
+ \providecommand{\subsubsubsection}{}
169
+ \renewcommand{\subsubsubsection}{%
170
+ \vskip5pt{\noindent\normalsize\rm\raggedright}%
171
+ }
172
+
173
+ % float placement
174
+ \renewcommand{\topfraction }{0.85}
175
+ \renewcommand{\bottomfraction }{0.4}
176
+ \renewcommand{\textfraction }{0.1}
177
+ \renewcommand{\floatpagefraction}{0.7}
178
+
179
+ \newlength{\@agentsabovecaptionskip}\setlength{\@agentsabovecaptionskip}{7\p@}
180
+ \newlength{\@agentsbelowcaptionskip}\setlength{\@agentsbelowcaptionskip}{\z@}
181
+
182
+ \setlength{\abovecaptionskip}{\@agentsabovecaptionskip}
183
+ \setlength{\belowcaptionskip}{\@agentsbelowcaptionskip}
184
+
185
+ % swap above/belowcaptionskip lengths for tables
186
+ \renewenvironment{table}
187
+ {\setlength{\abovecaptionskip}{\@agentsbelowcaptionskip}%
188
+ \setlength{\belowcaptionskip}{\@agentsabovecaptionskip}%
189
+ \@float{table}}
190
+ {\end@float}
191
+
192
+ % footnote formatting
193
+ \setlength{\footnotesep }{6.65\p@}
194
+ \setlength{\skip\footins}{9\p@ \@plus 4\p@ \@minus 2\p@}
195
+ \renewcommand{\footnoterule}{\kern-3\p@ \hrule width 12pc \kern 2.6\p@}
196
+ \setcounter{footnote}{0}
197
+
198
+ % paragraph formatting
199
+ \setlength{\parindent}{\z@}
200
+ \setlength{\parskip }{5.5\p@}
201
+
202
+ % list formatting
203
+ \setlength{\topsep }{4\p@ \@plus 1\p@ \@minus 2\p@}
204
+ \setlength{\partopsep }{1\p@ \@plus 0.5\p@ \@minus 0.5\p@}
205
+ \setlength{\itemsep }{2\p@ \@plus 1\p@ \@minus 0.5\p@}
206
+ \setlength{\parsep }{2\p@ \@plus 1\p@ \@minus 0.5\p@}
207
+ \setlength{\leftmargin }{3pc}
208
+ \setlength{\leftmargini }{\leftmargin}
209
+ \setlength{\leftmarginii }{2em}
210
+ \setlength{\leftmarginiii}{1.5em}
211
+ \setlength{\leftmarginiv }{1.0em}
212
+ \setlength{\leftmarginv }{0.5em}
213
+ \def\@listi {\leftmargin\leftmargini}
214
+ \def\@listii {\leftmargin\leftmarginii
215
+ \labelwidth\leftmarginii
216
+ \advance\labelwidth-\labelsep
217
+ \topsep 2\p@ \@plus 1\p@ \@minus 0.5\p@
218
+ \parsep 1\p@ \@plus 0.5\p@ \@minus 0.5\p@
219
+ \itemsep \parsep}
220
+ \def\@listiii{\leftmargin\leftmarginiii
221
+ \labelwidth\leftmarginiii
222
+ \advance\labelwidth-\labelsep
223
+ \topsep 1\p@ \@plus 0.5\p@ \@minus 0.5\p@
224
+ \parsep \z@
225
+ \partopsep 0.5\p@ \@plus 0\p@ \@minus 0.5\p@
226
+ \itemsep \topsep}
227
+ \def\@listiv {\leftmargin\leftmarginiv
228
+ \labelwidth\leftmarginiv
229
+ \advance\labelwidth-\labelsep}
230
+ \def\@listv {\leftmargin\leftmarginv
231
+ \labelwidth\leftmarginv
232
+ \advance\labelwidth-\labelsep}
233
+ \def\@listvi {\leftmargin\leftmarginvi
234
+ \labelwidth\leftmarginvi
235
+ \advance\labelwidth-\labelsep}
236
+
237
+ % create title
238
+ \providecommand{\maketitle}{}
239
+ \renewcommand{\maketitle}{%
240
+ \par
241
+ \begingroup
242
+ \renewcommand{\thefootnote}{\fnsymbol{footnote}}
243
+ % for perfect author name centering
244
+ \renewcommand{\@makefnmark}{\hbox to \z@{$^{\@thefnmark}$\hss}}
245
+ % The footnote-mark was overlapping the footnote-text,
246
+ % added the following to fix this problem
247
+ \long\def\@makefntext##1{%
248
+ \parindent 1em\noindent
249
+ \hbox to 1.8em{\hss $\m@th ^{\@thefnmark}$}##1
250
+ }
251
+ \thispagestyle{empty}
252
+ \@maketitle
253
+ \@thanks
254
+ \@notice
255
+ \endgroup
256
+ \let\maketitle\relax
257
+ \let\thanks\relax
258
+ }
259
+
260
+ % rules for title box at top of first page (modified for agents4science style)
261
+ \newcommand{\@toptitlebar}{
262
+ \hrule height 2\p@
263
+ \vskip 0.2in
264
+ \vskip -\parskip%
265
+ }
266
+ \newcommand{\@bottomtitlebar}{
267
+ \vskip 0.2in
268
+ \vskip -\parskip
269
+ \hrule height 2\p@
270
+ \vskip 0.09in%
271
+ }
272
+
273
+ % create title (includes both anonymized and non-anonymized versions)
274
+ \providecommand{\@maketitle}{}
275
+ \renewcommand{\@maketitle}{%
276
+ \vbox{%
277
+ \hsize\textwidth
278
+ \linewidth\hsize
279
+ \vskip 0.1in
280
+ \@toptitlebar
281
+ \centering
282
+ {\LARGE\bf \@title\par}
283
+ \@bottomtitlebar
284
+ \if@anonymous
285
+ \begin{tabular}[t]{c}\bf\rule{\z@}{24\p@}
286
+ Anonymous Author(s) \\
287
+ Affiliation \\
288
+ Address \\
289
+ \texttt{email} \\
290
+ \end{tabular}%
291
+ \else
292
+ \def\And{%
293
+ \end{tabular}\hfil\linebreak[0]\hfil%
294
+ \begin{tabular}[t]{c}\bf\rule{\z@}{24\p@}\ignorespaces%
295
+ }
296
+ \def\AND{%
297
+ \end{tabular}\hfil\linebreak[4]\hfil%
298
+ \begin{tabular}[t]{c}\bf\rule{\z@}{24\p@}\ignorespaces%
299
+ }
300
+ \begin{tabular}[t]{c}\bf\rule{\z@}{24\p@}\@author\end{tabular}%
301
+ \fi
302
+ \vskip 0.3in \@minus 0.1in
303
+ }
304
+ }
305
+
306
+ % add conference notice to bottom of first page
307
+ \newcommand{\ftype@noticebox}{8}
308
+ \newcommand{\@notice}{%
309
+ % give a bit of extra room back to authors on first page
310
+ \enlargethispage{2\baselineskip}%
311
+ \@float{noticebox}[b]%
312
+ \footnotesize\@noticestring%
313
+ \end@float%
314
+ }
315
+
316
+ % abstract styling
317
+ \renewenvironment{abstract}%
318
+ {%
319
+ \vskip 0.075in%
320
+ \centerline%
321
+ {\large\bf Abstract}%
322
+ \vspace{0.5ex}%
323
+ \begin{quote}%
324
+ }
325
+ {
326
+ \par%
327
+ \end{quote}%
328
+ \vskip 1ex%
329
+ }
330
+
331
+ % For the paper checklist
332
+ \newcommand{\answerYes}[1][]{\textcolor{blue}{[Yes] #1}}
333
+ \newcommand{\answerNo}[1][]{\textcolor{orange}{[No] #1}}
334
+ \newcommand{\answerNA}[1][]{\textcolor{gray}{[NA] #1}}
335
+ \newcommand{\answerTODO}[1][]{\textcolor{red}{\bf [TODO]}}
336
+ \newcommand{\justificationTODO}[1][]{\textcolor{red}{\bf [TODO]}}
337
+
338
+ \newcommand{\involvementA}[1][]{\textcolor{blue}{\bf [A] #1}}
339
+ \newcommand{\involvementB}[1][]{\textcolor{blue}{\bf [B] #1}}
340
+ \newcommand{\involvementC}[1][]{\textcolor{blue}{\bf [C] #1}}
341
+ \newcommand{\involvementD}[1][]{\textcolor{blue}{\bf [D] #1}}
342
+ \newcommand{\involvementNA}[1][]{\textcolor{gray}{\bf [NA] #1}}
343
+ \newcommand{\involvmentTODO}[1][]{\textcolor{red}{\bf [TODO]}}
344
+
345
+ % handle tweaks for camera-ready copy vs. submission copy
346
+ \if@preprint
347
+ \newcommand{\@noticestring}{%
348
+ Preprint.%
349
+ }
350
+ \else
351
+ \if@agentsfinal
352
+ \newcommand{\@noticestring}{
353
+ \@trackname
354
+ }
355
+ \else
356
+ \newcommand{\@noticestring}{%
357
+ Submitted to \@agentsordinal\/ Open Conference on AI Agents for Science
358
+ (agents4science \@agentsyear). Do not distribute.%
359
+ }
360
+
361
+ % hide the acknowledgements
362
+ \NewEnviron{hide}{}
363
+ \let\ack\hide
364
+ \let\endack\endhide
365
+
366
+ % line numbers for submission
367
+ \RequirePackage{lineno}
368
+ \linenumbers
369
+
370
+ % fix incompatibilities between lineno and amsmath, if required, by
371
+ % transparently wrapping linenomath environments around amsmath
372
+ % environments
373
+ \AtBeginDocument{%
374
+ \@ifpackageloaded{amsmath}{%
375
+ \newcommand*\patchAmsMathEnvironmentForLineno[1]{%
376
+ \expandafter\let\csname old#1\expandafter\endcsname\csname #1\endcsname
377
+ \expandafter\let\csname oldend#1\expandafter\endcsname\csname end#1\endcsname
378
+ \renewenvironment{#1}%
379
+ {\linenomath\csname old#1\endcsname}%
380
+ {\csname oldend#1\endcsname\endlinenomath}%
381
+ }%
382
+ \newcommand*\patchBothAmsMathEnvironmentsForLineno[1]{%
383
+ \patchAmsMathEnvironmentForLineno{#1}%
384
+ \patchAmsMathEnvironmentForLineno{#1*}%
385
+ }%
386
+ \patchBothAmsMathEnvironmentsForLineno{equation}%
387
+ \patchBothAmsMathEnvironmentsForLineno{align}%
388
+ \patchBothAmsMathEnvironmentsForLineno{flalign}%
389
+ \patchBothAmsMathEnvironmentsForLineno{alignat}%
390
+ \patchBothAmsMathEnvironmentsForLineno{gather}%
391
+ \patchBothAmsMathEnvironmentsForLineno{multline}%
392
+ }
393
+ {}
394
+ }
395
+ \fi
396
+ \fi
397
+
398
+ \endinput