diff --git a/problemtools/statement_util.py b/problemtools/statement_util.py index 9eeb1d27..c5a3f6a8 100644 --- a/problemtools/statement_util.py +++ b/problemtools/statement_util.py @@ -47,7 +47,10 @@ def load_names_from_statements(problem_root: Path, version: FormatVersion) -> di assert version is FormatVersion.LEGACY, 'load_names_from_statements only makes sense for legacy format' ret: dict[str, str] = {} for lang, files in find_statements(problem_root, version).items(): - hit = re.search(r'\\problemname{(.*)}', files[0].read_text(), re.MULTILINE) + text = files[0].read_text() + flags = re.MULTILINE + # Two separate searches, as we want plainproblemname to override problemname if both exist. + hit = re.search(r'^%%\s*plainproblemname:(.*)$', text, flags) or re.search(r'\\problemname{(.*)}', text, flags) if hit: ret[lang] = hit.group(1).strip() return ret diff --git a/problemtools/verifyproblem.py b/problemtools/verifyproblem.py index f3a9985a..885561e2 100644 --- a/problemtools/verifyproblem.py +++ b/problemtools/verifyproblem.py @@ -839,6 +839,9 @@ def check(self, context: Context) -> bool: f'No problem statements found (expected file of one of following forms in directory {self.problem.format.statement_directory}/: {allowed_statements})' ) + def _latex_heuristic(name: str) -> bool: + return '\\' in name or '$' in name + for lang, files in self.statements.items(): if len(files) > 1: self.error(f'Found multiple statements in the same language {lang}: {", ".join((file.name for file in files))}') @@ -849,6 +852,8 @@ def check(self, context: Context) -> bool: self.error(f'Problem name in language {lang} is empty') elif not self.problem.metadata.name[lang].strip(): self.error(f'Problem name in language {lang} contains only whitespace') + elif self.problem.format is FormatVersion.LEGACY and _latex_heuristic(self.problem.metadata.name[lang]): + self.warning(f'Problem name in language {lang} looks like LaTeX. Consider using plainproblemname.') for file in files: try: diff --git a/tests/hello/problem_statement/problem.sv.tex b/tests/hello/problem_statement/problem.sv.tex index a87c7402..d021c237 100644 --- a/tests/hello/problem_statement/problem.sv.tex +++ b/tests/hello/problem_statement/problem.sv.tex @@ -1,4 +1,5 @@ -\problemname{Hej Världen!} +\problemname{Hej V\"arlden!} % Silly use of LaTeX just to test plainproblemname +%% plainproblemname: Hej Världen! \section*{Indata}