2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Окружение с параметром
Сообщение07.02.2017, 14:36 


19/03/15
291
Вот эта пара команд
Код:
\def\look{\@ifnextchar[{\@lookY}{\par\noindent{\textsf{Замечание. }}}}
\def\@lookY[#1]{{\par\noindent{{Замечание (#1).}}}}
дает такой эффект.
Код:
\look
печатает "Замечание. ", а
Код:
\look[добавка]
печатает "Замечание (добавка). ". То есть команда \look может использоваться с параметром или без. Как сделать тоже самое, но чтобы было environment.
Код:
\begin{look} ... \end{look}
или
Код:
\begin{look}[добавка] ... \end{look}
В стандартных писаниях вроде не нашел.

 Профиль  
                  
 
 Posted automatically
Сообщение07.02.2017, 14:51 
Модератор


19/10/15
1196
 i  Тема перемещена из форума «Помогите решить / разобраться (М)» в форум «TeXнические обсуждения»
Причина переноса: тематика.

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение07.02.2017, 15:24 
Заслуженный участник
Аватара пользователя


31/01/14
11057
Hogtown
А зачем изобретать велосипед? Если хочется иметь "Замечание" и т.д. воспользуйтесь
Используется синтаксис LaTeX
\newtheorem    % без номера
\newtheorem*  % с номером

и пакетом amsthm

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение07.02.2017, 15:37 


19/03/15
291
Оно немой параметр [добавка] имеет (как мне надо)?

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение07.02.2017, 16:02 
Заслуженный участник


28/04/09
1933
Если закрыть глаза на то, что это велосипедостроение... Нужна возможность модифицирования поведения пользовательских команды и окружения в зависимости от того, задан или нет необязательный аргумент. Для этого есть несколько пакетов разной степени популярности и функциональности. Рекомендую обратить взоры на пакет xparse (прежде всего он позволяет задавать произвольное количество обязательных и необязательных аргументов, следующих друг за другом в определенном порядке). Тогда желаемое можно сделать как-то так:
код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\documentclass[14pt]{extarticle}

\usepackage[a4paper, top = 2cm, bottom = 2cm, left = 3cm, right = 1.5cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1, T2A]{fontenc}
\usepackage[english, russian]{babel}

\usepackage{xparse}


\newcommand{\PackageName}{\texttt}

\newcommand{\CommandName}[1]{\texttt{\textbackslash #1}}

\newcommand{\EnvironmentName}{\texttt}


\NewDocumentCommand\LookCommand{o}
{%
    \par\noindent{\textsf{Замечание\IfNoValueF{#1}{~(#1)}.\IfNoValueT{#1}{ }}}%
}

\NewDocumentEnvironment{LookEnvironment}{o}
{%
    \LookCommand[#1]\par%
}
{%
    \par%
}


\begin{document}

    \section*{Примеры использования пакета \PackageName{xparse} для~создания команд и~окружений с~необязательными аргументами}

    \LookCommand Пример использования команды \CommandName{LookCommand}.
   
    \LookCommand[второе] Пример использования команды \CommandName{LookCommand} с~необязательным аргументом.
   
    \begin{LookEnvironment}
        Пример использования окружения \EnvironmentName{LookEnvironment}.
    \end{LookEnvironment}
    \begin{LookEnvironment}[четвертое]
        Пример использования окружения \EnvironmentName{LookEnvironment} с~необязательным аргументом.
    \end{LookEnvironment}

\end{document}

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение07.02.2017, 16:08 


19/03/15
291
Мне здесь не нравится, что надо грузить внешний пакет, в то время как наверняка можно прописать своей короткой прогой. У меня в моем стилевом файле накапливаются такие утилиты; я не люблю грузить лишние пакеты

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение07.02.2017, 16:37 
Заслуженный участник


28/04/09
1933
Если предполагается, что исходник придется кому-то отдавать, лучше пользоваться стандартными средствами (в данном случае, \newtheorem) без собственных оформительских выдумок.
Если все пишется для себя, то (на мой субъективный вкус) лучше пользоваться сторонними пакетами с (относительно) человекопонятным синтаксисом и риском столкнуться в какой-то момент с изменением этого синтаксиса или необходимостью поиска другого пакета (в связи с кончиной ранее используемого), чем через какое-то время снова разбираться (в случае необходимости внесения изменений) в подобной приведенной в стартовом сообщении темы пакетонезависимой лапше из макросов, автором которой к тому же зачастую является посторонний человек с другим уровнем владения $\TeX$-ом.

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение07.02.2017, 17:24 
Заслуженный участник
Аватара пользователя


31/01/14
11057
Hogtown
maximav в сообщении #1190516 писал(а):
Мне здесь не нравится, что надо грузить внешний пакет, в то время как наверняка можно прописать своей короткой прогой. У меня в моем стилевом файле накапливаются такие утилиты; я не люблю грузить лишние пакеты

Нш все пакеты одинаково полезны. Но практически любой математик использует amsthm (исключая тех, кто использует ntheorem), amsmath, amssymb и несколько других.

Ну, и как правильно отмечено, далеко не все редакторы обожают пакеты с кучей самопальных команд.

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение07.02.2017, 21:06 
Заслуженный участник
Аватара пользователя


23/07/05
17973
Москва
maximav в сообщении #1190506 писал(а):
Оно немой параметр [добавка] имеет (как мне надо)?
Имеет.

код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\documentclass[a4paper,10pt]{amsart}

\usepackage{mathtext}
\usepackage{amssymb}
\usepackage[all]{xy}
\usepackage{graphicx}
\usepackage[T2A]{fontenc}
\usepackage[cp1251]{inputenc}
\usepackage[russian,english]{babel}

\newcommand{\onto}{\xrightarrow{\text{\textup{onto}}}}

\newtheoremstyle{myrmk}{3pt}{3pt}{\rmfamily}{\parindent}{\itshape}{.}{.5em}{}
\newtheoremstyle{mydfn}{3pt}{3pt}{\rmfamily}{\parindent}{\bfseries}{.}{.5em}{}
\newtheoremstyle{mypln}{3pt}{3pt}{\itshape}{\parindent}{\bfseries}{.}{.5em}{}

\newenvironment{prf}[1][\proofname]{\par\indent\pushQED{\qed}\itshape#1. \normalfont\ignorespaces}{\popQED}

\swapnumbers
\theoremstyle{myrmk}
\newtheorem{itm}{}[section]
\newtheorem{rmk}[itm]{Remark}
\newtheorem{con}[itm]{Construction}
\theoremstyle{mydfn}
\newtheorem{dfn}[itm]{Definition}
\newtheorem{exm}[itm]{Example}
\theoremstyle{mypln}
\newtheorem{ass}[itm]{Assertion}
\newtheorem{thm}[itm]{Theorem}
\newtheorem{prp}[itm]{Proposition}
\newtheorem{cor}[itm]{Corollary}
\newtheorem{lem}[itm]{Lemma}

Примеры использования.

Используется синтаксис LaTeX
\begin{ass}[a consequence of Lemma 6 of the paper \cite{Ul4}]\label{S1A9}
If a mapping\\$f\colon X\to Y$ has the property $\mathfrak{T^Ea}$ then there exist a mapping $^{\mathfrak A}\pi\colon Y_{\mathfrak A}\onto Y$ and a homeomorphic embedding $f_{\mathfrak A}\colon X\to Y_{\mathfrak A}$ such that $f=^{\mathfrak A}\pi f_{\mathfrak A}$, where $Y_{\mathfrak A}=\mathfrak P(Y,\{Z_{\alpha}\},\{G_{\alpha}\},\{O_{\alpha}\},\{g_{\alpha}\},\alpha\in\mathfrak A)$, $Z_{\alpha}\in\mathfrak E$ and $G_{\alpha}\in\mathfrak a$ for all $\alpha\in\mathfrak A$ \emph{(see \ref{S3C1}--\ref{S3C2})}.
\end{ass}

Используется синтаксис LaTeX
\begin{cor}\label{S2C10}
If a function $g\in B(f)$, a point $y_0\in Y$ and a number $\varepsilon>0$ are given then there exists a neighborhood $Uy_0\subseteq Y$ such that $n_yg<n_{y_0}g+\varepsilon$ for all $y\in Uy_0$.
\end{cor}

\begin{prf}
The open set $U_{g,t}$ for $t=n_{y_0}g+\varepsilon$ is a desirable neighborhood.
\end{prf}

Используется синтаксис LaTeX
\begin{prp}\label{S2P8}
Let $g\in B(f)$, $y_0\in Y$. Then $$n_{y_0}g=\inf\{\sup\{n_yg:y\in Uy_0\}:Uy_0\subseteq Y\ \text{is a neighborhood of the point}\ y_0\}\text.$$
\end{prp}

\begin{prf}[Proof\enskip\normalfont{follows from the definition \ref{S2I5} of the semi-norms $n_y$, $y\in Y$}]
\end{prf}

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение08.02.2017, 13:37 


19/03/15
291
Спасибо, но теперь появился ненравящийся мне лишний номер. Кажется это и было причиной почему я не стал продолжать "раскопки" у Котельникова по newtheorem. Через * штука не работает. Я в принципе могу добить/решить, но есть надежда, что ларчик просто раскрывается и кто-то знает уже готовый ответ.

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение08.02.2017, 14:28 
Заслуженный участник
Аватара пользователя


23/07/05
17973
Москва
Я думаю, что просто нужно убрать определение счётчика \newtheorem{itm}{}[section] и его упоминание [itm] во всех последующих командах. Но не проверял.

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение08.02.2017, 15:38 
Заслуженный участник
Аватара пользователя


31/01/14
11057
Hogtown
Someone в сообщении #1190766 писал(а):
Я думаю, что просто нужно убрать определение счётчика \newtheorem{itm}{}[section]


В данном случае [section] 1) включает определяет thetheorem как \thesection.\arabic{theorem} и 2) зануляет счётчик theorem когда начинается новая секция

Т.е. убрав [section] будет сплошная вдоль секций нумерация. Точно также теоремы можно считать внутри более мелких или более крупных разделов

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение08.02.2017, 20:17 
Заслуженный участник


28/04/09
1933
maximav в сообщении #1190755 писал(а):
Через * штука не работает. Я в принципе могу добить/решить, но есть надежда, что ларчик просто раскрывается и кто-то знает уже готовый ответ.
Все прекрасно работает:
код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\documentclass[14pt]{extarticle}

\usepackage[a4paper, top = 2cm, bottom = 2cm, left = 3cm, right = 1.5cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1, T2A]{fontenc}
\usepackage[english, russian]{babel}

\usepackage{amsthm}


\newcommand{\PackageName}{\texttt}

\newcommand{\CommandName}[1]{\texttt{\textbackslash #1}}

\newcommand{\EnvironmentName}{\texttt}


\newtheoremstyle{RemarkStyle}{}{}{}{0pt}{\sffamily}{.}{ }{}

\theoremstyle{RemarkStyle}

\newtheorem{Remark}{Замечание}

\newtheorem*{Remark*}{Замечание}


\begin{document}

    \section*{Пример использования пакета \PackageName{amsthm} для~создания окружений теорем и~настройки их стилей}

    \begin{Remark}
        Пример использования окружения \EnvironmentName{Remark}.
    \end{Remark}
    \begin{Remark}[второе]
        Пример использования окружения \EnvironmentName{Remark} с~необязательным аргументом.
    \end{Remark}
    \begin{Remark*}
        Пример использования окружения \EnvironmentName{Remark*}.
    \end{Remark*}
    \begin{Remark*}[четвертое]
        Пример использования окружения \EnvironmentName{Remark*} с~необязательным аргументом.
    \end{Remark*}
   
\end{document}
Разумеется, * в названии создаваемого окружения необязательна (в данном случае она нужна только для того, чтобы различать нумерованное [Remark] и ненумерованное [Remark*] окружения).

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение09.02.2017, 15:43 


19/03/15
291
Эка хитро зарыто было: трюк с \newtheoremstyle. Ни в жизнь не догадаешься. Поиск по Котельникову, Львовскому и Гусссенсу: ни слуху ни духу. Причем, раскопки показали, оно автоматически грузит ntheorem.sty, а последний автогрузится из amsart? да еще без каких-либо оповещений. А где разгадать смысл многочисленных аргументов \newtheoremstyle{}{}{}...? Ну 0pt я конечно прощупал. В документации моего MiKTeX вижу только 3 аргумента.

 Профиль  
                  
 
 Re: Окружение с параметром
Сообщение09.02.2017, 16:22 
Заслуженный участник


28/04/09
1933
maximav в сообщении #1191157 писал(а):
Эка хитро зарыто было: трюк с \newtheoremstyle.
\newtheoremstyle отвечает за настройку внешнего вида создаваемых окружений, без использования этой команды все тоже прекрасно работает (но несколько по-иному выглядит). Команда \newtheorem* (позволяющая создавать ненумерованные теоремы) появляется благодаря использованию пакета amsthm. Об этом сказал Red_Herring еще в самом начале темы:
Red_Herring в сообщении #1190503 писал(а):
А зачем изобретать велосипед? Если хочется иметь "Замечание" и т.д. воспользуйтесь
Используется синтаксис LaTeX
\newtheorem    % без номера
\newtheorem*  % с номером

и пакетом amsthm
maximav в сообщении #1191157 писал(а):
А где разгадать смысл многочисленных аргументов \newtheoremstyle{}{}{}...?
В документации по пакету amsthm (раздел 4.3).

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group