Как мне очистить ввод LaTeX?

Я хотел бы ввести пользовательский ввод (иногда это будут большие абзацы) и сгенерировать документ LaTeX. Я рассматриваю пару простых регулярных выражений, которые заменяют все экземпляры \ на \textbackslash и все экземпляры { или } на \} или \{.

Сомневаюсь, что этого достаточно. Что мне еще нужно делать? Примечание. Если для этого создана специальная библиотека, я использую python.

Чтобы уточнить, я не хочу, чтобы что-либо анализировалось как синтаксис LaTeX: $a$ следует заменить на \$a\$.


person Conley Owens    schedule 13.04.2010    source источник
comment
Из-за сложной семантики и правил синтаксического анализа для TeX решение, вероятно, будет заключаться не в обработке с помощью Python, а в том, как вы сбрасываете данные в LaTeX. Если вы предоставите подробную информацию о том, какие входные данные могут содержать (в какой степени они должны обрабатываться как LaTeX? Должны ли работать такие вещи, как ---, \ae и математический режим?), Кто-то может дать вам отличный ответ.   -  person Mike Graham    schedule 13.04.2010
comment
Этот вопрос практически такой же, как stackoverflow.com/questions/2541616/   -  person Charles Stewart    schedule 13.04.2010
comment
Другой вопрос сосредоточен на том, чтобы уберечь пользователя от вредных действий (получения доступа к оболочке), а не на том, чтобы убедиться, что ввод выглядит одинаково как при вводе обычного текста, так и в документе.   -  person Conley Owens    schedule 13.04.2010


Ответы (1)


Если ваш ввод - простой текст и вы находитесь в обычном режиме catcode, вы должны сделать следующие замены:

  • \\textbackslash{} (обратите внимание на пустую группу!)
  • {\{
  • }\}
  • $\$
  • &\&
  • #\#
  • ^\textasciicircum{} (требуется пакет textcomp)
  • _\_
  • ~\textasciitilde{}
  • %\%

Кроме того, следующие замены полезны, по крайней мере, при использовании кодировки OT1 (и в любом случае безвредны):

  • <\textless{}
  • >\textgreater{}
  • |\textbar{}

И эти три отключают фигурные кавычки:

  • "\textquotedbl{}
  • '\textquotesingle{}
  • `\textasciigrave{}
person Philipp    schedule 13.04.2010
comment
Хватит ли места вместо пустой группы? - person Conley Owens; 13.04.2010
comment
А как насчет ---, о котором упоминал Майк Грэм? - person Conley Owens; 13.04.2010
comment
Обратите внимание, что \textasciitilde на самом деле очень уродлив, потому что он слишком высок, а это редко то, что нужно. Точно так же \texttildelow слишком низко. Лучшее обходное решение, которое я знаю, опубликовано здесь: stackoverflow.com/questions/256457/ - person Konrad Rudolph; 13.04.2010
comment
@ Конли Оуэнс: Нет, места не хватит, его сожрет процессор ввода. Пустая группа - самое простое решение; вы также можете проверить, следует ли пробел во вводимом тексте, и в этом случае вставить контрольный пробел (\ , обратная косая черта – пробел). - person Philipp; 14.04.2010
comment
@ Конли Оуэнс: Что вы имеете в виду под ---? Штрихи реализованы в виде лигатуры в (pdf) TeX. Если вы не хотите, чтобы «---» преобразовывалось в «-», вы должны явно заменить его (например, -{}-{}-). Обратное направление не вызывает проблем: если вы используете движок с поддержкой Unicode (XeTeX, LuaTeX) или загружаете пакет inputenc с соответствующей кодировкой, вы можете использовать типографические символы, такие как - или «напрямую. - person Philipp; 14.04.2010